Explorar o código

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow into zouxuan

zouxuan %!s(int64=3) %!d(string=hai) anos
pai
achega
4454556201
Modificáronse 100 ficheiros con 2181 adicións e 645 borrados
  1. 0 5
      audio-analysis/pom.xml
  2. 3 3
      audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java
  3. 2 9
      audio-analysis/src/main/java/com/yonge/netty/common/message/MessageDispatcher.java
  4. 1 1
      audio-analysis/src/main/java/com/yonge/netty/common/message/MessageHandler.java
  5. 0 128
      audio-analysis/src/main/resources/application-template.yml
  6. 11 0
      audio-analysis/src/main/resources/bootstrap-dev.yml
  7. 0 16
      audio-analysis/src/main/resources/bootstrap-prod.properties
  8. 0 16
      audio-analysis/src/main/resources/bootstrap-sim.properties
  9. 0 16
      audio-analysis/src/main/resources/bootstrap-test.properties
  10. 55 0
      audio-analysis/src/main/resources/logback-spring.xml
  11. 2 2
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  12. 3 0
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java
  13. 3 3
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java
  14. 3 3
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java
  15. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java
  16. 1 1
      cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java
  17. 4 3
      cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml
  18. 1 1
      cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml
  19. 1 1
      cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java
  20. 4 2
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java
  21. 11 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java
  22. 11 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderPayment.java
  23. 20 5
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml
  24. 16 5
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  25. 52 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java
  26. 1 1
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java
  27. 39 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java
  28. 12 6
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderPayRes.java
  29. 10 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java
  30. 15 0
      cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java
  31. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java
  32. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java
  33. 10 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java
  34. 5 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java
  35. 33 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyDto.java
  36. 4 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderReturnApplyService.java
  37. 9 3
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java
  38. 6 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java
  39. 9 0
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java
  40. 134 32
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  41. 10 2
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java
  42. 25 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java
  43. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java
  44. 63 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java
  45. 0 86
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java
  46. 6 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java
  47. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  48. 15 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java
  49. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java
  50. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  51. 38 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java
  52. 30 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundPaymentDao.java
  53. 0 30
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java
  54. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalCallbackDao.java
  55. 7 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java
  56. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java
  57. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/Mapper.java
  58. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java
  59. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundPaymentDto.java
  60. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java
  61. 72 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java
  62. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java
  63. 0 10
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java
  64. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundPaymentSearch.java
  65. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java
  66. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoom.java
  67. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java
  68. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java
  69. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessageConfig.java
  70. 160 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java
  71. 146 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundPayment.java
  72. 0 144
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java
  73. 390 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java
  74. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java
  75. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java
  76. 7 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java
  77. 56 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageIconTypeEnum.java
  78. 48 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java
  79. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/RoomTypeEnum.java
  80. 31 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java
  81. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java
  82. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  83. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java
  84. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java
  85. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java
  86. 8 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  87. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java
  88. 49 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  89. 0 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java
  90. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  91. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalCallbackService.java
  92. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java
  93. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java
  94. 27 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  95. 25 19
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  96. 98 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java
  97. 59 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  98. 0 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  99. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  100. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

+ 0 - 5
audio-analysis/pom.xml

@@ -28,11 +28,6 @@
 		</dependency>
 
 		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
-		</dependency>
-
-		<dependency>
 			<groupId>com.alibaba.cloud</groupId>
 			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
 		</dependency>

+ 3 - 3
audio-analysis/src/main/java/com/yonge/audio/AudioAnalysisServerApplication.java

@@ -21,9 +21,9 @@ import com.yonge.audio.config.LocalFastJsonHttpMessageConverter;
 
 @SpringBootApplication
 @EnableDiscoveryClient
-@EnableFeignClients("com.ym.mec")
-@MapperScan("com.ym.mec.biz.dal.dao")
-@ComponentScan(basePackages = { "com.yonge.netty", "com.ym.mec", "com.yonge.log" })
+@EnableFeignClients("com.yonge.cooleshow")
+@MapperScan("com.yonge.cooleshow.biz.dal.dao")
+@ComponentScan(basePackages = {"com.yonge.netty", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.biz", "com.yonge.cooleshow.common", "com.yonge.cooleshow.common.security","com.yonge.toolset.thirdparty" })
 @Configuration
 @EnableSwagger2Doc
 public class AudioAnalysisServerApplication {

+ 2 - 9
audio-analysis/src/main/java/com/yonge/netty/common/message/MessageDispatcher.java

@@ -18,17 +18,10 @@ public class MessageDispatcher extends SimpleChannelInboundHandler<Message<?>> {
 	@Override
 	protected void channelRead0(ChannelHandlerContext ctx, Message<?> message) {
 		// 获得 type 对应的 MessageHandler 处理器
-		MessageHandler messageHandler = messageHandlerContainer.getMessageHandler(message.getType());
+		MessageHandler<?> messageHandler = messageHandlerContainer.getMessageHandler(message.getType());
 		// 获得 MessageHandler 处理器 的消息类
 		// Class<? extends Message> messageClass = MessageHandlerContainer.getMessageClass(messageHandler);
 		// 执行逻辑
-		executor.submit(new Runnable() {
-
-			@Override
-			public void run() {
-				messageHandler.execute(ctx.channel(), message.getData());
-			}
-
-		});
+		executor.submit(() -> messageHandler.execute(ctx.channel(), message.getData()));
 	}
 }

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/common/message/MessageHandler.java

@@ -10,7 +10,7 @@ public interface MessageHandler<T> {
 	 * @param channel 通道
 	 * @param message 消息
 	 */
-	void execute(Channel channel, T message);
+	void execute(Channel channel, Object message);
 
 	/**
 	 * @return 消息类型,即每个 Message 实现类上的 TYPE 静态字段

+ 0 - 128
audio-analysis/src/main/resources/application-template.yml

@@ -1,128 +0,0 @@
-server:
-  port: 9004
-  tomcat:
-    accesslog:
-      enabled: true
-      buffered: true
-      directory: /var/logs
-      file-date-format: -yyyy-MM-dd
-      pattern: common
-      prefix: tomcat-audio
-      rename-on-rotate: false
-      request-attributes-enabled: false
-      rotate: true
-      suffix: .log
-      
-netty:
-  server:
-    port: 8090
-
-eureka:
-  client:
-    serviceUrl:
-      defaultZone: http://admin:admin123@localhost:8761/eureka/eureka/
-    instance: 
-      lease-renewal-interval-in-seconds: 5
-
-spring:
-  application:
-    name: audio-analysis-server
-    
-  datasource:
-    name: test
-    url: jdbc:mysql://47.114.1.200:3306/mec_test?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
-    username: mec_dev
-    password: dayaDataOnline@2019
-    # 使用druid数据源
-    type: com.alibaba.druid.pool.DruidDataSource
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    filters: stat
-    maxActive: 20
-    initialSize: 1
-    maxWait: 60000
-    minIdle: 1
-    timeBetweenEvictionRunsMillis: 60000
-    minEvictableIdleTimeMillis: 300000
-    validationQuery: select 'x'
-    testWhileIdle: true
-    testOnBorrow: false
-    testOnReturn: false
-    poolPreparedStatements: true
-    maxOpenPreparedStatements: 20
-  
-  redis:
-    host: 47.114.1.200
-    port: 6379
-    password: dyym
-    database: 1
-    #连接超时时间(毫秒)
-    timeout: 10000
-    jedis:
-      pool:
-        #连接池最大连接数(使用负值表示没有限制)
-        max-active: 20
-        #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: 10000
-        #连接池中的最大空闲连接
-        max-idle: 10
-        #连接池中的最小空闲连接
-        min-idle: 5
-    
-
-mybatis:
-    mapperLocations: classpath:config/mybatis/*.xml
-    
-swagger:
-  base-package: com.yonge.audo.controller
-          
-##认证 
-security:
-  oauth2:
-    client:
-      client-id: app
-      client-secret: app
-    resource:
-      token-info-uri: http://localhost:8001/oauth/check_token
-  
-#spring boot admin 相关配置
-management:
-  endpoints:
-    web:
-      exposure:
-        include: "*"
-  endpoint:
-    health:
-      show-details: ALWAYS
-      
-
-ribbon:  
-    ReadTimeout: 60000  
-    ConnectTimeout: 60000
-
-message:
-  debugMode: true
-  
-##支付流水隐藏
-payment:
-  hiddenMode: false
-  #隐藏的支付方式
-  channel: YQPAY
-  
-eseal:
-  tsign:
-    projectid: 4438776254
-    projectSecret: a94cf63d6361084d232f345d71321691
-    apisUrl: http://smlitsm.tsign.cn:8080/tgmonitor/rest/app!getAPIInfo2
-
-push:
-  jiguang:
-    reqURL: https://api.jpush.cn/v3/push
-    appKey:
-      student: 0e7422e1d6e73637e678716a
-      teacher: 7e0282ca92c12c8c45a93bb3
-      system: 496fc1007dea59b1b4252d2b
-    masterSecret:
-      student: c2361016604eab56ab2db2ac
-      teacher: d47430e2f4755ef5dc050ac5
-      system: a5e51e9cdb25417463afbf7a
-    apns_production: false

+ 11 - 0
audio-analysis/src/main/resources/bootstrap-dev.yml

@@ -0,0 +1,11 @@
+spring:
+  cloud:
+    nacos:
+      config:
+        server-addr: 47.114.1.200:8848
+        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        group: DEFAULT_GROUP
+        prefix: audio-analysis-dev
+        file-extension: yaml
+        enabled: true
+        refresh-enabled: true

+ 0 - 16
audio-analysis/src/main/resources/bootstrap-prod.properties

@@ -1,16 +0,0 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
-#spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.80.97:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f40a7594-4bd0-4bc6-8397-9353c6d2e63a
-#\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}
-spring.cloud.nacos.config.prefix=audio-analysis
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
-spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
-spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
-spring.cloud.nacos.config.enabled=true

+ 0 - 16
audio-analysis/src/main/resources/bootstrap-sim.properties

@@ -1,16 +0,0 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
-#spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.1.200:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=763783fd-dfd1-4a44-857e-42a27448c42c
-#\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}
-spring.cloud.nacos.config.prefix=audio-analysis
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
-spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
-spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
-spring.cloud.nacos.config.enabled=true

+ 0 - 16
audio-analysis/src/main/resources/bootstrap-test.properties

@@ -1,16 +0,0 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
-#spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.176.40:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
-#\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}
-spring.cloud.nacos.config.prefix=audio-analysis
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
-spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
-spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528nacos\u914d\u7f6e\u4e2d\u5fc3
-spring.cloud.nacos.config.enabled=true

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

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="10 seconds">
+
+	<property name="LOG_HOME" value="/mdata/logs/audio-analysis-%d{yyyy-MM-dd_HH}-%i.log" />
+	<property name="CONSOLE_LOG_PATTERN"
+		value="[%X{username} %X{ip} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}] : %msg%n" />
+
+	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder charset="UTF-8">
+			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
+		</encoder>
+	</appender>
+
+	<appender name="file"
+		class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<FileNamePattern>${LOG_HOME}</FileNamePattern>
+			<MaxHistory>90</MaxHistory>
+			<TimeBasedFileNamingAndTriggeringPolicy
+				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<MaxFileSize>20MB</MaxFileSize>
+			</TimeBasedFileNamingAndTriggeringPolicy>
+		</rollingPolicy>
+
+		<encoder>
+			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
+		</encoder>
+	</appender>
+
+	<logger name="com.yonge" level="info" />
+
+	<!--开发环境:打印控制台 -->
+	<springProfile name="dev">
+		<root level="dev">
+			<appender-ref ref="stdout" />
+			<appender-ref ref="file" />
+		</root>
+	</springProfile>
+	
+	<springProfile name="test">
+		<root level="info">
+			<appender-ref ref="stdout" />
+			<appender-ref ref="file" />
+		</root>
+	</springProfile>
+
+	<!--生产环境:输出到文件 -->
+	<springProfile name="prod">
+		<root level="WARN">
+			<appender-ref ref="stdout" />
+			<appender-ref ref="file" />
+		</root>
+	</springProfile>
+
+</configuration>

+ 2 - 2
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -143,8 +143,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
     public SysUserInfo registerUser(String phone, String clientId) {
         SysUser sysUser = new SysUser();
         sysUser.setPhone(phone);
-        String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
-        sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
+        //String password = sysUser.getPhone().substring(sysUser.getPhone().length() - 6);
+        //sysUser.setPassword(new BCryptPasswordEncoder().encode(password));
         String defaultHeard = sysConfigService.findConfigValue(SysConfigConstant.DEFAULT_HEARD);
         sysUser.setAvatar(defaultHeard);
         if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {

+ 3 - 0
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/HelpCenterContentController.java

@@ -63,6 +63,9 @@ public class HelpCenterContentController extends BaseController {
 			return failed("用户信息获取失败");
 		}
 		helpContent.setReleaseStatus(0);
+		if (helpContent.getOrder() == null) {
+			helpContent.setOrder(0);
+		}
 		if (helpContent.getId() != null && helpContent.getId() > 0) {
 
 			HelpCenterContent helpCenterContent = helpCenterContentService.get(helpContent.getId());

+ 3 - 3
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/NewsController.java

@@ -117,8 +117,8 @@ public class NewsController extends BaseController {
 			}
 		}
 
-		// 1 6
-		if (newsInfo.getType() == 1  || newsInfo.getType() == 6) {
+		// 6
+		if (newsInfo.getType() == 6) {
 			if (StringUtil.isEmpty(newsInfo.getContent())) {
 				return failed("内容不能为空");
 			}
@@ -224,7 +224,7 @@ public class NewsController extends BaseController {
 		}
 
 		AppHomeDto appHomeDto = new AppHomeDto();
-		queryInfo.setStatus(NewsStatusEnum.SHOW);
+		queryInfo.setStatus(NewsStatusEnum.SHOW.getCode().toString());
 		queryInfo.setPlatformType("STUDENT");
 		// 1热门资讯
 		queryInfo.setType(1);

+ 3 - 3
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/controller/queryinfo/NewsInformationQueryInfo.java

@@ -25,7 +25,7 @@ public class NewsInformationQueryInfo extends QueryInfo {
 	private String subType;
 
 	@ApiModelProperty(value = "资讯状态(0:禁用,1:启用)", required = false)
-	private NewsStatusEnum status;
+	private String status;
 
 	@ApiModelProperty(value = "编号/标题", required = false)
 	private String title;
@@ -72,11 +72,11 @@ public class NewsInformationQueryInfo extends QueryInfo {
 		this.subType = subType;
 	}
 
-	public NewsStatusEnum getStatus() {
+	public String getStatus() {
 		return status;
 	}
 
-	public void setStatus(NewsStatusEnum status) {
+	public void setStatus(String status) {
 		this.status = status;
 	}
 

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/dal/entity/HelpCenterContent.java

@@ -17,7 +17,7 @@ public class HelpCenterContent {
 
 	@ApiModelProperty(value = "内容", required = true)
 	@NotBlank(message = "正文不能为空")
-	private String content = "";
+	private String content;
 
 	@ApiModelProperty("发布时间")
 	private Date releaseTime;

+ 1 - 1
cooleshow-cms/src/main/java/com/yonge/cooleshow/cms/service/impl/SysNewsInformationServiceImpl.java

@@ -46,7 +46,7 @@ public class SysNewsInformationServiceImpl extends BaseServiceImpl<Long, SysNews
 	public Map<String,PageInfo<SysNewsInformation>> getHomeList(SysUser user, NewsInformationQueryInfo queryInfo) {
 		//1精彩活动,2热门资讯,3banner类型
 		Map<String,PageInfo<SysNewsInformation>> homeList = new HashMap<>();
-		queryInfo.setStatus(NewsStatusEnum.SHOW);
+		queryInfo.setStatus(NewsStatusEnum.SHOW.getCode().toString());
 		
 		String memo = queryInfo.getMemo();
 		

+ 4 - 3
cooleshow-cms/src/main/resources/config/mybatis/HelpCenterContentMapper.xml

@@ -31,7 +31,8 @@
 				and content.title_ like '%' #{title} '%'
 			</if>
 			<if test="status!= null">
-				and content.status_ = #{status}
+				and ((content.status_ = #{status} and content.catalog_id_ = 1)
+					or (content.release_status_ = #{status} and content.catalog_id_ = 2))
 			</if>
 			<if test="catalogType != null and catalogType != ''">
 				and content.catalog_type_ = #{catalogType}
@@ -212,7 +213,7 @@
 	<insert id="noticeReleaseToStudent">
 		insert into sys_message
 		(
-		user_id_,type_, title_, content_,status_, receiver_, send_time_,  create_on_, modify_on_,  group_, client_id_
+		user_id_,type_, title_, content_,status_, receiver_, send_time_,  create_on_, modify_on_,  group_, client_id_,message_config_id_
 		)
 		SELECT
 		t.user_id_,
@@ -222,7 +223,7 @@
 		2,
 		su.phone_,
 		#{param.releaseTime},
-		now(),now(),'NOTICE','STUDENT'
+		now(),now(),'NOTICE','STUDENT',48
 		from student t
 		left join sys_user su on su.id_ = t.user_id_
 	</insert>

+ 1 - 1
cooleshow-cms/src/main/resources/config/mybatis/SysNewsInformationMapper.xml

@@ -47,7 +47,7 @@
 				and sni.sub_type_ = #{subType}
 			</if>
 			<if test="status != null">
-				and sni.status_ = #{status, typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler}
+				and sni.status_ = #{status}
 			</if>
 			<if test="title != null">
 				and (sni.title_ like '%' #{title} '%'

+ 1 - 1
cooleshow-mall/mall-admin/src/main/java/com/yonge/cooleshow/admin/service/impl/OmsOrderReturnApplyServiceImpl.java

@@ -110,7 +110,7 @@ public class OmsOrderReturnApplyServiceImpl implements OmsOrderReturnApplyServic
      */
     private void refundAmount(OmsOrderReturnApply returnApply) {
         // 退款
-        UserOrderPayment userOrderPayment = userOrderPaymentMapper.selectByOrderNo(returnApply.getOrderSn());
+        UserOrderPayment userOrderPayment = userOrderPaymentMapper.selectByTranNo(returnApply.getOrderSn());
         OrderRefundReq refundReq = new OrderRefundReq();
         refundReq.setOrderNo(returnApply.getOrderSn());
         refundReq.setRefundAmount(returnApply.getReturnAmount().setScale(2, RoundingMode.HALF_UP).toString());

+ 4 - 2
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/mapper/UserOrderPaymentMapper.java

@@ -1,6 +1,5 @@
 package com.yonge.cooleshow.mbg.mapper;
 
-import com.yonge.cooleshow.mbg.model.UmsRole;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 
 public interface UserOrderPaymentMapper {
@@ -9,7 +8,10 @@ public interface UserOrderPaymentMapper {
     int insert(UserOrderPayment record);
 
 
-    UserOrderPayment selectByOrderNo(String orderNo);
+    UserOrderPayment selectByTranNo(String orderNo);
 
     int updateByPrimaryKeySelective(UserOrderPayment userOrderPayment);
+
+
+    UserOrderPayment selectByOrderNo(String orderSn, String payChannel, String payStaus);
 }

+ 11 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java

@@ -86,6 +86,9 @@ public class OmsOrderReturnApply implements Serializable {
     @ApiModelProperty(value = "收货备注")
     private String receiveNote;
 
+    @ApiModelProperty("退货单号")
+    private String deliverySn;
+
     private static final long serialVersionUID = 1L;
 
     public Long getId() {
@@ -341,4 +344,12 @@ public class OmsOrderReturnApply implements Serializable {
         sb.append("]");
         return sb.toString();
     }
+
+    public String getDeliverySn() {
+        return deliverySn;
+    }
+
+    public void setDeliverySn(String deliverySn) {
+        this.deliverySn = deliverySn;
+    }
 }

+ 11 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/UserOrderPayment.java

@@ -20,6 +20,9 @@ public class UserOrderPayment implements Serializable {
     private Long id;
     @ApiModelProperty("订单号 ")
     private String orderNo;
+
+    @ApiModelProperty("支付订单号")
+    private String adapayNo;
     @ApiModelProperty("交易流水号 ")
     private String transNo;
     @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
@@ -180,4 +183,12 @@ public class UserOrderPayment implements Serializable {
     public void setPayFailMsg(String payFailMsg) {
         this.payFailMsg = payFailMsg;
     }
+
+    public String getAdapayNo() {
+        return adapayNo;
+    }
+
+    public void setAdapayNo(String adapayNo) {
+        this.adapayNo = adapayNo;
+    }
 }

+ 20 - 5
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml

@@ -29,6 +29,7 @@
     <result column="receive_man" jdbcType="VARCHAR" property="receiveMan" />
     <result column="receive_time" jdbcType="TIMESTAMP" property="receiveTime" />
     <result column="receive_note" jdbcType="VARCHAR" property="receiveNote" />
+    <result column="delivery_sn" jdbcType="VARCHAR" property="deliverySn" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -92,7 +93,7 @@
     id, order_id, company_address_id, product_id, order_sn, create_time, member_username, 
     return_amount, return_name, return_phone, status, handle_time, product_pic, product_name, 
     product_brand, product_attr, product_count, product_price, product_real_price, reason, 
-    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note
+    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note,delivery_sn
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultMap="BaseResultMap">
     select
@@ -136,7 +137,7 @@
       product_count, product_price, product_real_price, 
       reason, description, proof_pics, 
       handle_note, handle_man, receive_man, 
-      receive_time, receive_note)
+      receive_time, receive_note,delivery_sn)
     values (#{orderId,jdbcType=BIGINT}, #{companyAddressId,jdbcType=BIGINT}, #{productId,jdbcType=BIGINT}, 
       #{orderSn,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{memberUsername,jdbcType=VARCHAR}, 
       #{returnAmount,jdbcType=DECIMAL}, #{returnName,jdbcType=VARCHAR}, #{returnPhone,jdbcType=VARCHAR}, 
@@ -145,7 +146,7 @@
       #{productCount,jdbcType=INTEGER}, #{productPrice,jdbcType=DECIMAL}, #{productRealPrice,jdbcType=DECIMAL}, 
       #{reason,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{proofPics,jdbcType=VARCHAR}, 
       #{handleNote,jdbcType=VARCHAR}, #{handleMan,jdbcType=VARCHAR}, #{receiveMan,jdbcType=VARCHAR}, 
-      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR})
+      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR},#{deliverySn})
   </insert>
   <insert id="insertSelective" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApply">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -231,6 +232,9 @@
       <if test="receiveNote != null">
         receive_note,
       </if>
+      <if test="deliverySn != null">
+        delivery_sn,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="orderId != null">
@@ -311,6 +315,9 @@
       <if test="receiveNote != null">
         #{receiveNote,jdbcType=VARCHAR},
       </if>
+      <if test="deliverySn != null">
+          #{deliverySn,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultType="java.lang.Long">
@@ -403,6 +410,9 @@
       <if test="record.receiveNote != null">
         receive_note = #{record.receiveNote,jdbcType=VARCHAR},
       </if>
+      <if test="record.deliverySn != null">
+        delivery_sn = #{record.deliverySn,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -436,7 +446,8 @@
       handle_man = #{record.handleMan,jdbcType=VARCHAR},
       receive_man = #{record.receiveMan,jdbcType=VARCHAR},
       receive_time = #{record.receiveTime,jdbcType=TIMESTAMP},
-      receive_note = #{record.receiveNote,jdbcType=VARCHAR}
+      receive_note = #{record.receiveNote,jdbcType=VARCHAR},
+      delivery_sn = #{record.deliverySn,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -522,6 +533,9 @@
       <if test="receiveNote != null">
         receive_note = #{receiveNote,jdbcType=VARCHAR},
       </if>
+      <if test="deliverySn != null">
+        delivery_sn = #{deliverySn,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -552,7 +566,8 @@
       handle_man = #{handleMan,jdbcType=VARCHAR},
       receive_man = #{receiveMan,jdbcType=VARCHAR},
       receive_time = #{receiveTime,jdbcType=TIMESTAMP},
-      receive_note = #{receiveNote,jdbcType=VARCHAR}
+      receive_note = #{receiveNote,jdbcType=VARCHAR},
+      delivery_sn = #{deliverySn,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>
 </mapper>

+ 16 - 5
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -17,13 +17,14 @@
         <result column="close_status_" jdbcType="TIMESTAMP" property="closeStatus" />
         <result column="close_fail_msg_" jdbcType="TIMESTAMP" property="closeFailMsg" />
         <result column="close_time_" jdbcType="TIMESTAMP" property="closeTime" />
+        <result column="adapay_no_" jdbcType="TIMESTAMP" property="adapayNo" />
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
         id_, order_no_, trans_no_, pay_channel_, pay_amt_, fee_amt_, pay_info_, status_,
-        pay_fail_msg_, arrival_time_,close_status_,close_fail_msg_,close_time_,create_time_, update_time_
+        pay_fail_msg_, arrival_time_,close_status_,close_fail_msg_,close_time_,create_time_, update_time_,adapay_no_
     </sql>
     <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
         <!--@mbg.generated-->
@@ -42,12 +43,12 @@
         insert into user_order_payment (order_no_, trans_no_, pay_channel_,
         pay_amt_, fee_amt_, pay_info_,
         status_, pay_fail_msg_, arrival_time_,
-        create_time_, update_time_,close_status_,close_fail_msg_,close_time_)
+        create_time_, update_time_,close_status_,close_fail_msg_,close_time_,adapay_no_)
         values (#{orderNo,jdbcType=VARCHAR}, #{transNo,jdbcType=VARCHAR}, #{payChannel,jdbcType=VARCHAR},
         #{payAmt,jdbcType=DECIMAL}, #{feeAmt,jdbcType=DECIMAL}, #{payInfo,jdbcType=VARCHAR},
         #{status,jdbcType=VARCHAR}, #{payFailMsg,jdbcType=VARCHAR}, #{arrivalTime,jdbcType=TIMESTAMP},
         #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP},#{closeStatus},#{closeFailMsg}
-        ,#{closeTime})
+        ,#{closeTime},#{adapayNo})
     </insert>
     <insert id="insertSelective" keyColumn="id_" keyProperty="id" parameterType="com.yonge.cooleshow.mbg.model.UserOrderPayment" useGeneratedKeys="true">
         <!--@mbg.generated-->
@@ -95,6 +96,9 @@
             <if test="closeTime != null">
                 close_time_,
             </if>
+            <if test="adapayNo != null">
+                adapay_no_,
+            </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="orderNo != null">
@@ -139,6 +143,9 @@
             <if test="closeTime != null">
                 #{closeTime},
             </if>
+            <if test="adapayNo != null">
+                #{adapayNo},
+            </if>
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.yonge.cooleshow.mbg.model.UserOrderPayment">
@@ -187,6 +194,9 @@
             <if test="closeTime != null">
                 close_time_ = #{closeTime,jdbcType=TIMESTAMP},
             </if>
+            <if test="adapayNo != null">
+                adapay_no_ = #{closeTime,jdbcType=TIMESTAMP},
+            </if>
         </set>
         where id_ = #{id,jdbcType=BIGINT}
     </update>
@@ -207,12 +217,13 @@
         close_status_ = #{closeStatus},
         close_fail_msg_ = #{closeFailMsg},
         close_time_ = #{closeTime,jdbcType=TIMESTAMP},
+        adapay_no_ = #{adapayNo,jdbcType=TIMESTAMP},
         where id_ = #{id,jdbcType=BIGINT}
     </update>
 
-    <select id="selectByOrderNo" resultMap="BaseResultMap">
+    <select id="selectByTranNo" resultMap="BaseResultMap">
         select
         <include refid="Base_Column_List" />
-      from user_order_payment where order_no_ = #{orderNo} limit 1
+      from user_order_payment where trans_no_ = #{orderNo} limit 1
     </select>
 </mapper>

+ 52 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderCloseReq.java

@@ -0,0 +1,52 @@
+package com.yonge.cooleshow.sdk.req;
+
+import io.swagger.annotations.ApiModel;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-05
+ */
+@ApiModel("关闭订单请求")
+public class OrderCloseReq {
+
+    /**
+     * 支付id
+     */
+    private String paymentId;
+
+    /**
+     * 关单描述
+     */
+    private String reason;
+
+    /**
+     * 扩展域
+     */
+    private String expend;
+
+    public String getPaymentId() {
+        return paymentId;
+    }
+
+    public void setPaymentId(String paymentId) {
+        this.paymentId = paymentId;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public String getExpend() {
+        return expend;
+    }
+
+    public void setExpend(String expend) {
+        this.expend = expend;
+    }
+}

+ 1 - 1
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/req/OrderPayReq.java

@@ -42,7 +42,7 @@ public class OrderPayReq {
     @ApiModelProperty(value = "商品描述",hidden = true)
     private String goodDesc;
 
-    @ApiModelProperty("拉起支付信息")
+    @ApiModelProperty(value = "拉起支付信息",hidden = true)
     private String payInfo;
 
     public void orderStatus(Integer orderStatus) {

+ 39 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderCloseRes.java

@@ -0,0 +1,39 @@
+package com.yonge.cooleshow.sdk.res;
+
+import io.swagger.annotations.ApiModel;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-05
+ */
+@ApiModel("关闭订单信息")
+public class OrderCloseRes {
+
+    /**
+     * 执行状态
+     */
+    private boolean status = true;
+
+    /**
+     * 错误信息
+     */
+    private String failMsg;
+
+    public boolean isStatus() {
+        return status;
+    }
+
+    public void setStatus(boolean status) {
+        this.status = status;
+    }
+
+    public String getFailMsg() {
+        return failMsg;
+    }
+
+    public void setFailMsg(String failMsg) {
+        this.failMsg = failMsg;
+    }
+}

+ 12 - 6
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/sdk/res/OrderPayRes.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.sdk.res;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.yonge.cooleshow.enums.PayStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -15,23 +16,28 @@ public class OrderPayRes {
     @ApiModelProperty("pay_info")
     private String pay_info;
 
-    @ApiModelProperty("执行状态")
+    @ApiModelProperty(value = "执行状态",required = true)
+    @JsonIgnore
     private boolean status = true;
 
-    @ApiModelProperty("出错信息")
+    @ApiModelProperty(value = "出错信息",required = true)
+    @JsonIgnore
     private String message;
 
-    @ApiModelProperty("支付状态")
+    @ApiModelProperty(value = "支付状态",required = true)
+    @JsonIgnore
     private PayStatusEnum payStatus;
 
 
-    @ApiModelProperty("订单编号")
+    @ApiModelProperty(value = "订单编号",required = true)
+    @JsonIgnore
     private String orderNo;
 
-    @ApiModelProperty("支付方式")
+    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信")
     private String payChannel;
 
-    @ApiModelProperty("交易流水号")
+    @ApiModelProperty(value = "交易流水号",required = true)
+    @JsonIgnore
     private String transNo;
 
     public String getPay_amt() {

+ 10 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/PaymentService.java

@@ -1,7 +1,9 @@
 package com.yonge.cooleshow.service;
 
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.req.OrderRefundReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.sdk.res.OrderRefundRes;
 
@@ -33,4 +35,12 @@ public interface PaymentService {
      * @return
      */
     OrderRefundRes orderRefund(OrderRefundReq refundReq);
+
+    /**
+     * 关闭订单
+     *
+     * @param closeReq 关闭订单
+     * @return
+     */
+    OrderCloseRes orderClose(OrderCloseReq closeReq);
 }

+ 15 - 0
cooleshow-mall/mall-pay/src/main/java/com/yonge/cooleshow/service/impl/AdapayPaymentServiceImpl.java

@@ -9,9 +9,11 @@ import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
 import com.yonge.cooleshow.sdk.adapay.dto.RefundReq;
 import com.yonge.cooleshow.sdk.req.DeviceInfo;
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.adapay.dto.PaymentReq;
 import com.yonge.cooleshow.sdk.req.OrderRefundReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderRefundRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.service.PaymentService;
@@ -142,4 +144,17 @@ public class AdapayPaymentServiceImpl implements PaymentService {
         }
         return orderRefundRes;
     }
+
+    @Override
+    public OrderCloseRes orderClose(OrderCloseReq closeReq) {
+        HttpResponseResult<Map<String, Object>> mapHttpResponseResult = paymentSdk.closePayment(closeReq.getPaymentId(),
+                                                                                                closeReq.getReason(),
+                                                                                                closeReq.getExpend());
+        OrderCloseRes closeRes = new OrderCloseRes();
+        if (!mapHttpResponseResult.getStatus()) {
+            closeRes.setFailMsg(mapHttpResponseResult.getMsg());
+            closeRes.setStatus(false);
+        }
+        return closeRes;
+    }
 }

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/component/CancelOrderReceiver.java

@@ -20,7 +20,7 @@ public class CancelOrderReceiver {
     private OmsPortalOrderService portalOrderService;
     @RabbitHandler
     public void handle(Long orderId){
-        portalOrderService.cancelOrder(orderId);
+        portalOrderService.cancelOrder(orderId, "超时取消");
         LOGGER.info("process orderId:{}",orderId);
     }
 }

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderController.java

@@ -91,7 +91,7 @@ public class OmsPortalOrderController {
     @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
     @ResponseBody
     public CommonResult cancelUserOrder(Long orderId) {
-        portalOrderService.cancelOrder(orderId);
+        portalOrderService.cancelOrder(orderId, "用户取消订单");
         return CommonResult.success(null);
     }
 

+ 10 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/OmsPortalOrderReturnApplyController.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnReason;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 import com.yonge.cooleshow.portal.service.OmsOrderReturnReasonService;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderReturnApplyService;
@@ -79,4 +80,13 @@ public class OmsPortalOrderReturnApplyController {
         OmsOrderReturnApplyResult result = returnApplyService.getItem(id);
         return CommonResult.success(result);
     }
+
+
+    @ApiOperation("设置退货单号")
+    @PostMapping(value = "/deliverySn")
+    @ResponseBody
+    public CommonResult getItem(@RequestBody OmsReturnApplyDto applyDto) {
+        returnApplyService.setDeliverySn(applyDto);
+        return CommonResult.success(true);
+    }
 }

+ 5 - 4
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/controller/PaymentController.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.util.DistributedLock;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.utils.web.WebUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -94,9 +95,7 @@ public class PaymentController extends BaseController {
                 //验签成功逻辑
                 log.info("验签成功");
                 String type = request.getParameter("type");
-                if (type.contains("payment")) {
-                    portalOrderService.orderCallback(data);
-                }
+                portalOrderService.orderCallback(data,type);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -124,7 +123,9 @@ public class PaymentController extends BaseController {
             }  else {
                 return failed(orderPayRes.getMessage());
             }
-        } catch (Exception e) {
+        }catch (BizException e) {
+            return failed(e.getMessage());
+        }catch (Exception e) {
             e.printStackTrace();
             return HttpResponseResult.failed("付款失败");
         }

+ 33 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/dto/OmsReturnApplyDto.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.portal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+
+/**
+ * 订单退货申请查询参数
+ * Created by macro on 2018/10/18.
+ */
+
+public class OmsReturnApplyDto {
+    @ApiModelProperty("服务单号")
+    private Long id;
+    @ApiModelProperty(value = "快递单号")
+    private String deliverySn;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDeliverySn() {
+        return deliverySn;
+    }
+
+    public void setDeliverySn(String deliverySn) {
+        this.deliverySn = deliverySn;
+    }
+}

+ 4 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderReturnApplyService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.portal.service;
 import com.yonge.cooleshow.mbg.model.OmsOrderReturnApply;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 
 import java.util.List;
@@ -26,4 +27,7 @@ public interface OmsPortalOrderReturnApplyService {
     OmsOrderReturnApplyResult getItem(Long id);
 
     List<OmsOrderReturnApply> list(OmsReturnApplyQueryParam queryParam, Integer pageSize, Integer pageNum);
+
+    /** 设置退货单号 */
+    void setDeliverySn(OmsReturnApplyDto applyDto);
 }

+ 9 - 3
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/OmsPortalOrderService.java

@@ -10,7 +10,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.Future;
 
 /**
  * 前台订单管理Service
@@ -45,7 +44,7 @@ public interface OmsPortalOrderService {
      * 取消单个超时订单
      */
     @Transactional
-    void cancelOrder(Long orderId);
+    void cancelOrder(Long orderId, String message);
 
     /**
      * 发送延迟消息取消订单
@@ -78,8 +77,15 @@ public interface OmsPortalOrderService {
     /**
      *
      * @param data
+     * @param type
+     */    /**
+     * 订单拉起支付
+     *
+     * @param payReq 支付信息
+     * @return
      */
-    void orderCallback(String data);
+    @Transactional
+    void orderCallback(String data, String type);
 
     /**
      * 订单拉起支付

+ 6 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/UserOrderPaymentService.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.portal.service;
 
+import com.yonge.cooleshow.enums.PayChannelEnum;
+import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 
 /**
@@ -16,7 +18,7 @@ public interface UserOrderPaymentService {
      * @param orderNo 订单id
      * @return
      */
-    UserOrderPayment getByOrderNo(String orderNo);
+    UserOrderPayment getByTranNo(String orderNo);
 
     /**
      * 保存订单记录
@@ -26,4 +28,7 @@ public interface UserOrderPaymentService {
     void save(UserOrderPayment userOrderPayment);
 
     void saveOrUpdate(UserOrderPayment userOrderPayment);
+
+    UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum pending);
+
 }

+ 9 - 0
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample;
 import com.yonge.cooleshow.portal.dao.OmsOrderReturnApplyDao;
 import com.yonge.cooleshow.portal.domain.OmsOrderReturnApplyParam;
 import com.yonge.cooleshow.portal.dto.OmsOrderReturnApplyResult;
+import com.yonge.cooleshow.portal.dto.OmsReturnApplyDto;
 import com.yonge.cooleshow.portal.dto.OmsReturnApplyQueryParam;
 import com.yonge.cooleshow.portal.service.OmsPortalOrderReturnApplyService;
 import org.springframework.beans.BeanUtils;
@@ -59,4 +60,12 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
         PageHelper.startPage(pageNum, pageSize);
         return returnApplyDao.getList(queryParam);
     }
+
+    @Override
+    public void setDeliverySn(OmsReturnApplyDto applyDto) {
+        OmsOrderReturnApply omsOrderReturnApply = new OmsOrderReturnApply();
+        omsOrderReturnApply.setId(applyDto.getId());
+        omsOrderReturnApply.setDeliverySn(applyDto.getDeliverySn());
+        returnApplyMapper.updateByPrimaryKey(omsOrderReturnApply);
+    }
 }

+ 134 - 32
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -19,7 +19,9 @@ import com.yonge.cooleshow.portal.dao.SmsCouponHistoryDao;
 import com.yonge.cooleshow.portal.domain.*;
 import com.yonge.cooleshow.portal.service.*;
 import com.yonge.cooleshow.sdk.adapay.PaymentSdk;
+import com.yonge.cooleshow.sdk.req.OrderCloseReq;
 import com.yonge.cooleshow.sdk.req.OrderPayReq;
+import com.yonge.cooleshow.sdk.res.OrderCloseRes;
 import com.yonge.cooleshow.sdk.res.OrderPayRes;
 import com.yonge.cooleshow.service.PaymentService;
 import org.slf4j.Logger;
@@ -291,14 +293,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             if (timeOutOrder.getStatus() == 0) {
                 payingOrderHandle(timeOutOrder);
             } else if (timeOutOrder.getStatus() == 6) {
-                cancelOrder(timeOutOrder.getId());
+                cancelOrder(timeOutOrder.getId(), "超时取消");
             }
         }
         return timeOutOrders.size();
     }
 
     @Override
-    public void cancelOrder(Long orderId) {
+    public void cancelOrder(Long orderId, String message) {
         //查询未付款的取消订单
         OmsOrderExample example = new OmsOrderExample();
         example.createCriteria().andIdEqualTo(orderId).andDeleteStatusEqualTo(0);
@@ -325,11 +327,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
                 UmsMember member = memberService.getById(cancelOrder.getMemberId());
                 memberService.updateIntegration(cancelOrder.getMemberId(), member.getIntegration() + cancelOrder.getUseIntegration());
             }
-            UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(cancelOrder.getOrderSn());
+            UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(cancelOrder.getOrderSn());
             if (null != orderPayment) {
+                // 发起关单
+                OrderCloseReq orderCloseReq = new OrderCloseReq();
+                orderCloseReq.setPaymentId(orderPayment.getTransNo());
+                orderCloseReq.setReason(message);
+                OrderCloseRes closeRes = adapayPaymentService.orderClose(orderCloseReq);
+                if (closeRes.isStatus()) {
+                    orderPayment.setCloseStatus(PayStatusEnum.pending.getCode());
+                } else {
+                    orderPayment.setCloseStatus(PayStatusEnum.failed.getCode());
+                    orderPayment.setCloseFailMsg(closeRes.getFailMsg());
+                }
+
                 //更新付款单
                 orderPayment.setStatus(PayStatusEnum.failed.getCode());
-                orderPayment.setPayFailMsg("交易取消");
+                orderPayment.setPayFailMsg(message);
+                orderPayment.setUpdateTime(new Date());
                 userOrderPaymentService.saveOrUpdate(orderPayment);
             }
         }
@@ -459,7 +474,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单不存在");
             return orderPayRes;
         }
-        UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn());
+        if (detail.getStatus() != 0 && detail.getStatus() != 6) {
+            orderPayRes.setStatus(false);
+            orderPayRes.setMessage("订单已付款或已关闭");
+            return orderPayRes;
+        }
+        UserOrderPayment userOrderPayment = userOrderPaymentService
+                .getByOrderNo(detail.getOrderSn(), payReq.getPayChannel(), PayStatusEnum.pending);
         payReq.orderStatus(detail.getStatus());
         payReq.setOrderNo(detail.getOrderSn());
         payReq.setOrderPrice(detail.getPayAmount());
@@ -471,13 +492,14 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         // 支付中的返回拉起信息
         orderPayRes = adapayPaymentService.orderPay(payReq);
         if (!orderPayRes.isStatus()) {
-            if (orderPayRes.getPayStatus() != null
-            && PayStatusEnum.failed.getCode().equals(orderPayRes.getPayStatus().getCode())) {
-                // 异常将取消订单
-                cancelOrder(detail.getId());
-            }
+            // 异常将取消订单
+            cancelOrder(detail.getId(),orderPayRes.getMessage());
             throw new BizException(orderPayRes.getMessage());
         }
+        if (!orderPayRes.getPay_amt().equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+            cancelOrder(detail.getId(),"订单金额和实际支付金额不符");
+            throw new BizException("订单金额和实际支付金额不符");
+        }
         // 订单状态和付款状态都是付款中,直接返回付款拉起信息
         if (OrderStatusEnum.PAYING.getCode().equals(payReq.getOrderStatus().getCode())
                 && PayStatusEnum.pending.getCode().equals(orderPayRes.getPayStatus().getCode())) {
@@ -488,7 +510,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         OmsOrder omsOrder = new OmsOrder();
         omsOrder.setId(detail.getId());
         if (orderPayRes.getPayStatus().getCode().equals(OrderStatusEnum.PAYING.getCode())) {
-            omsOrder.setStatus(1);
+            omsOrder.setStatus(0);
             orderMapper.updateByPrimaryKeySelective(omsOrder);
             // 保存订单支付表
             if (userOrderPayment == null) {
@@ -506,29 +528,104 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             userOrderPaymentService.saveOrUpdate(userOrderPayment);
         }else {
             // 异常将取消订单
-            cancelOrder(detail.getId());
+            cancelOrder(detail.getId(), orderPayRes.getMessage());
         }
 
         return orderPayRes;
     }
 
     @Override
-    public void orderCallback(String data) {
+    public void orderCallback(String data, String type) {
         JSONObject hfRes = JSONObject.parseObject(data);
-        if (PayStatusEnum.succeeded.getCode().equals(hfRes.getString("status"))) {
-            //订单完成
-            OmsOrderDetail orderDetail = detail(hfRes.getString("order_no"));
-            if (null == orderDetail) {
-                log.error("汇付支付回调,订单未找到。 req is {}", data);
-                return;
-            }
-            if (orderDetail.getStatus() == 0) {
-                orderSuccess(orderDetail, hfRes);
-            } else {
-                log.error("汇付支付回调,订单状态异常。 req is {}", data);
-            }
+
+        if (type.equals("payment.succeeded")) {//支付成功
+            paymentSucceededHandle(hfRes);
+        } else if (type.equals("payment.failed")) {//支付失败
+            paymentFailedHandle(hfRes);
+        } else if (type.equals("payment.close.succeeded")) {//支付关单成功
+            paymentCloseSucceededHandle(hfRes);
+        } else if (type.equals("payment.close.failed")) {//支付关单失败
+            paymentCloseFailedHandle(hfRes);
+        }
+    }
+
+
+
+    /***
+     * 处理回调-支付成功
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:09
+     */
+    private void paymentSucceededHandle(JSONObject hfRes) {
+        //订单完成
+        OmsOrder detail = detail(hfRes.getString("order_no"));
+        if (null == detail) {
+            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+            return;
+        }
+        if (detail.getStatus() == 0) {
+            orderSuccess(detail, hfRes);
+        } else {
+            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
+        }
+    }
+
+    /***
+     * 处理回调-支付失败
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:09
+     */
+    private void paymentFailedHandle(JSONObject hfRes) {
+        //订单完成
+        OmsOrder detail = detail(hfRes.getString("order_no"));
+
+        if (null == detail) {
+            log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
+            return;
+        }
+        if (detail.getStatus() == 0) {
+
+            cancelOrder(detail.getId(), "支付回调失败");
+        } else {
+            log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
         }
     }
+
+    /***
+     * 支付关单成功
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:33
+     */
+    private void paymentCloseSucceededHandle(JSONObject hfRes) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id"));
+        if (null == orderPayment) {
+            return;
+        }
+        orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
+        orderPayment.setUpdateTime(new Date());
+        userOrderPaymentService.saveOrUpdate(orderPayment);
+    }
+
+    /***
+     * 支付关单失败
+     * @author liweifan
+     * @param: hfRes
+     * @updateTime 2022/4/27 15:33
+     */
+    private void paymentCloseFailedHandle(JSONObject hfRes) {
+        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(hfRes.getString("payment_id"));
+        if (null == orderPayment) {
+            return;
+        }
+        orderPayment.setStatus(PayStatusEnum.failed.getCode());
+        orderPayment.setPayFailMsg("支付关单回调失败-" + hfRes.getString("error_msg"));
+        orderPayment.setUpdateTime(new Date());
+        userOrderPaymentService.saveOrUpdate(orderPayment);
+    }
+
     /***
      * 处理支付中订单
      * @author liweifan
@@ -538,7 +635,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     @Transactional(rollbackFor = Exception.class)
     void payingOrderHandle(OmsOrder userOrder) {
         //判断汇付订单状态
-        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(userOrder.getOrderSn());
+        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(userOrder.getOrderSn());
         if (null == orderPayment) {
             return;
         }
@@ -546,11 +643,12 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo());
             //支付失败
             if (PayStatusEnum.failed.getCode().equals(resMap.get("status").toString())) {
-                cancelOrder(userOrder.getId());
-            }
-            //支付成功
-            if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
+                cancelOrder(userOrder.getId(), "支付失败");
+            }else if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
+                // 支付成功
                 orderSuccess(userOrder,null);
+            } else {
+                cancelOrder(userOrder.getId(), "支付超时");
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -568,17 +666,21 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     @Transactional(rollbackFor = Exception.class)
     void orderSuccess(OmsOrder detail, JSONObject hfRes) {
         //更新订单
-        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn());
+        UserOrderPayment orderPayment = userOrderPaymentService.getByTranNo(detail.getOrderSn());
         if (orderPayment.getPayChannel().equals("alipay")) {
             paySuccess(detail.getId(),1);
         } else if (orderPayment.getPayChannel().equals("wx_lite")) {
             paySuccess(detail.getId(),2);
         }
+        String pay_amt = hfRes.getString("pay_amt");
+        if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
+            orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
+        }
         orderPayment.setStatus(PayStatusEnum.succeeded.getCode());
         orderPayment.setArrivalTime(new Date());
         if (null != hfRes) {
             try {
-                orderPayment.setPayAmt(new BigDecimal(hfRes.getString("pay_amt")));
+                orderPayment.setPayAmt(new BigDecimal(pay_amt));
                 orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt")));
             } catch (Exception e) {
                 e.printStackTrace();

+ 10 - 2
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/UserOrderPaymentServiceImpl.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.portal.service.impl;
 
+import com.yonge.cooleshow.enums.PayChannelEnum;
+import com.yonge.cooleshow.enums.PayStatusEnum;
 import com.yonge.cooleshow.mbg.mapper.UserOrderPaymentMapper;
 import com.yonge.cooleshow.mbg.model.UserOrderPayment;
 import com.yonge.cooleshow.portal.service.UserOrderPaymentService;
@@ -19,8 +21,8 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
     private UserOrderPaymentMapper userOrderPaymentMapper;
 
     @Override
-    public UserOrderPayment getByOrderNo(String orderNo) {
-        return userOrderPaymentMapper.selectByOrderNo(orderNo);
+    public UserOrderPayment getByTranNo(String orderNo) {
+        return userOrderPaymentMapper.selectByTranNo(orderNo);
     }
 
     @Override
@@ -36,4 +38,10 @@ public class UserOrderPaymentServiceImpl implements UserOrderPaymentService {
             userOrderPaymentMapper.updateByPrimaryKeySelective(userOrderPayment);
         }
     }
+
+    @Override
+    public UserOrderPayment getByOrderNo(String orderSn, PayChannelEnum payChannel, PayStatusEnum payStatus) {
+
+        return userOrderPaymentMapper.selectByOrderNo(orderSn,payChannel.getCode(),payStatus.getCode());
+    }
 }

+ 25 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HomeController.java

@@ -2,6 +2,9 @@ package com.yonge.cooleshow.admin.controller;
 
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
+import com.yonge.cooleshow.biz.dal.service.MusicSheetService;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
+import com.yonge.cooleshow.biz.dal.vo.HomeMusicSheetVo;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
@@ -13,6 +16,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/home")
@@ -21,6 +25,9 @@ public class HomeController extends BaseController {
     @Autowired
     private HomeService homeService;
 
+    @Autowired
+    private MusicSheetService musicSheetService;
+
     @ApiOperation(value = "查询用户待办事项数")
     @PostMapping("/getUserToDoNum")
     @PreAuthorize("@pcs.hasPermissions('home/getUserToDoNum')")
@@ -42,4 +49,22 @@ public class HomeController extends BaseController {
         return homeService.totalStudent(totalReq);
     }
 
+    @ApiOperation(value = "首页曲目点播数据")
+    @PostMapping("/musicSheet")
+    public HttpResponseResult<HomeMusicSheetVo> musicSheet() {
+        return succeed(musicSheetService.getMusicSheetHome());
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "dateTime", dataType = "String", value = "如果查询年数据 yyyy   如果查询月数据 yyyy-mm"),
+            @ApiImplicitParam(name = "timeType", dataType = "String", value = " 时间类型 MONTH月度  YEAR年度"),
+            @ApiImplicitParam(name = "type", dataType = "String", value = "类型  PRACTICE陪练课  LIVE直播课"),
+    })
+    @ApiOperation(value = "获取首页课程数据")
+    @PostMapping("/courseHome")
+    @PreAuthorize("@pcs.hasPermissions('home/courseHome')")
+    public HttpResponseResult<CourseHomeVo> queryCourseHomeData(@RequestBody Map<String,Object> param) {
+        return succeed(homeService.queryCourseHomeData(param));
+    }
+
 }

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/MusicSheetController.java

@@ -146,7 +146,7 @@ public class MusicSheetController extends BaseController {
         if (sysUser == null  || sysUser.getId() == null) {
             return failed("用户信息获取失败");
         }
-
+        query.setAuditStatus(AuthStatusEnum.PASS);
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectPage(PageUtil.getPage(query), query);
         return succeed(PageUtil.pageInfo(musicSheetVoIPage));
     }

+ 63 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundController.java

@@ -0,0 +1,63 @@
+package com.yonge.cooleshow.admin.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.page.PageInfo;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
+
+@RestController
+@RequestMapping("/userOrderRefunds")
+@Api(value = "用户退款表", tags = "用户退款表")
+public class UserOrderRefundController extends BaseController {
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private UserOrderRefundService userOrderRefundService;
+
+	/**
+     * 查询单条
+     */
+    @GetMapping("/detail/{id}")
+    @ApiOperation(value = "详情", notes = "传入id")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/detail')")
+	public HttpResponseResult<UserOrderRefundVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderRefundService.detail(id));
+	}
+    
+    /**
+     * 查询分页
+     */
+    @PostMapping("/page")
+    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/page')")
+	public HttpResponseResult<PageInfo<UserOrderRefundVo>> page(@RequestBody UserOrderRefundSearch query) {
+		IPage<UserOrderRefundVo> pages = userOrderRefundService.selectPage(PageUtil.getPage(query), query);
+        return succeed(PageUtil.pageInfo(pages));
+	}
+
+	@PostMapping("/doAuth")
+	@ApiOperation(value = "审核", notes = "传入authOperaReq")
+	@PreAuthorize("@pcs.hasPermissions('userOrderRefunds/doAuth')")
+	public HttpResponseResult<Boolean> doAuth(@Valid @RequestBody AuthOperaReq authOperaReq) throws Exception {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (user == null || null == user.getId()) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return userOrderRefundService.doAuth(authOperaReq, user);
+	}
+}

+ 0 - 86
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java

@@ -1,86 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.utils.string.StringUtil;
-import io.swagger.annotations.*;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
-
-@RestController
-@RequestMapping("/UserOrderRefunds")
-@Api(value = "用户退款表", tags = "用户退款表")
-public class UserOrderRefundsController extends BaseController {
-
-    @Autowired
-    private UserOrderRefundsService userOrderRefundsService;
-
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<UserOrderRefundsVo> detail(@PathVariable("id") Long id) {
-    	return succeed(userOrderRefundsService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
-    public HttpResponseResult<PageInfo<UserOrderRefundsVo>> page(@RequestBody OrderRefundsSearch query) {
-		IPage<UserOrderRefundsVo> pages = userOrderRefundsService.selectPage(PageUtil.getPage(query), query);
-        return succeed(PageUtil.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入orderRefunds")
-	public HttpResponseResult save(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-    	return status(userOrderRefundsService.save(userOrderRefunds));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入orderRefunds")
-	public HttpResponseResult update(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.updateById(userOrderRefunds));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入orderRefunds")
-	public HttpResponseResult submit(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
-        return status(userOrderRefundsService.saveOrUpdate(userOrderRefunds));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(userOrderRefundsService.removeByIds(StringUtil.toLongList(ids)));
-	}
-}

+ 6 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/VideoLessonController.java

@@ -133,4 +133,10 @@ public class VideoLessonController extends BaseController {
         lessonGroupService.updateGroup(examineVo);
         return succeed();
     }
+
+    @ApiOperation(value = "首页-视频课统计")
+    @GetMapping("/countVideoGroup")
+    public HttpResponseResult<CountVideoGroupVo> countVideoGroup() {
+        return succeed(lessonGroupService.countVideoGroup());
+    }
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java

@@ -185,5 +185,17 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //根据id统计评价
     Integer countReplies(Long studentId);
+
+    /**
+     * 按年查询首页课程数据
+     * @param param
+     */
+    List<CourseHomeVo.CourseHomeInfoVo> queryCourseHomeOfYear(@Param("param") Map<String, Object> param);
+
+    /**
+     * 按月查询首页课程数据
+     * @param param
+     */
+    List<CourseHomeVo.CourseHomeInfoVo> queryCourseHomeOfMonth(@Param("param") Map<String, Object> param);
 }
 

+ 15 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MusicSheetDao.java

@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.*;
 import com.yonge.cooleshow.biz.dal.entity.MusicSheet;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetDetailVo;
-import com.yonge.cooleshow.biz.dal.vo.MusicSheetVo;
-import com.yonge.cooleshow.biz.dal.vo.StudentMusicSheetOrderVo;
-import com.yonge.cooleshow.biz.dal.vo.TeacherMusicSheetVo;
+import com.yonge.cooleshow.biz.dal.vo.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -117,4 +114,18 @@ public interface MusicSheetDao extends BaseMapper<MusicSheet> {
      * @return
      */
     Integer selectTeacherMusicSheetCount(@Param("userId") Long userId);
+
+    /**
+     * 点播数量统计
+     *
+     * @return
+     */
+    HomeMusicSheetVo selectMusicNum();
+
+    /**
+     * 查询付费人数最多的前5个曲目
+     *
+     * @return
+     */
+    List<HomeMusicSheetVo.MusicSheetSmall> selectPayMusicSheet();
 }

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentDao.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,4 +33,12 @@ public interface StudentDao extends BaseMapper<Student> {
 	 * @return: java.lang.Integer
 	 */
     Integer setSubject(@Param("id") Long id, @Param("subjectIds") String subjectIds);
+	/***
+	 * 获取声部下拉框
+	 * @author liweifan
+	 * @param: id
+	 * @updateTime 2022/5/9 10:17
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+	 */
+	List<Subject> querySubjectItem(@Param("userId")Long id);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -67,4 +67,12 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @return: java.lang.Integer
      */
     Integer addHomeBrowse(@Param("userId")Long userId);
+    /***
+     * 获取声部下拉框
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/5/9 10:17
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     */
+    List<Subject> querySubjectItem(@Param("userId")Long id);
 }

+ 38 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundDao.java

@@ -0,0 +1,38 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+
+
+public interface UserOrderRefundDao extends BaseMapper<UserOrderRefund>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	UserOrderRefundVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo
+	 */
+	List<UserOrderRefundVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundSearch userOrderRefund);
+	/***
+	 * 查询订单中,未退费的商品
+	 * @author liweifan
+	 * @param: bizId
+	 * @updateTime 2022/5/9 18:05
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrderDetail>
+	 */
+    List<UserOrderDetail> selectOrderRefundDetils(@Param("orderId") Long orderId);
+}

+ 30 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundPaymentDao.java

@@ -0,0 +1,30 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+
+
+public interface UserOrderRefundPaymentDao extends BaseMapper<UserOrderRefundPayment>{
+	/**
+	 * 查询详情
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	UserOrderRefundPaymentVo detail(@Param("id") Long id);
+
+	/**
+	 * 分页查询
+     * @author liweifan
+     * @date 2022-05-09 17:14:30
+     * @return: com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo
+	 */
+	List<UserOrderRefundPaymentVo> selectPage(@Param("page") IPage page, @Param("param") UserOrderRefundPaymentSearch userOrderRefundPayment);
+	
+}

+ 0 - 30
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java

@@ -1,30 +0,0 @@
-package com.yonge.cooleshow.biz.dal.dao;
-
-import java.util.List;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Param;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-
-
-public interface UserOrderRefundsDao extends BaseMapper<UserOrderRefunds>{
-	/**
-	 * 查询详情
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	UserOrderRefundsVo detail(@Param("id") Long id);
-
-	/**
-	 * 分页查询
-     * @author liweifan
-     * @date 2022-03-30 13:53:51
-     * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
-	 */
-	List<UserOrderRefundsVo> selectPage(@Param("page") IPage page, @Param("param") OrderRefundsSearch orderRefunds);
-	
-}

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalCallbackDao.java

@@ -0,0 +1,7 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackDao extends BaseMapper<UserWithdrawalCallback> {
+}

+ 7 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserWithdrawalDao.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import java.util.List;
+import java.util.Map;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -35,5 +36,10 @@ public interface UserWithdrawalDao extends BaseMapper<UserWithdrawal>{
 	 */
 	List<UserWithdrawalVo> selectList(@Param("param") TeacherWithdrawalSearch teacherWithdrawal);
 
-	
+	/**
+	 * @Description: 提现成功回调
+	 * @Author: cy
+	 * @Date: 2022/5/9
+	 */
+    void withdrawSuccess(Map<String, Object> withdrawRecord);
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VideoLessonGroupDao.java

@@ -44,4 +44,10 @@ public interface VideoLessonGroupDao extends BaseMapper<VideoLessonGroup> {
 
     //根据组id查详情
     VideoLessonGroup selectGroupById(Long groupId);
+
+    //统计课时数
+    CountVideoGroupVo countVideoGroup();
+
+    //查询付费人数前5的课程
+    List<CountVideoGroupVo.VideoLesson> selectVideoLesson();
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/Mapper.java

@@ -1,7 +1,10 @@
 package com.yonge.cooleshow.biz.dal.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+
 public class Mapper {
 
+	@ApiModelProperty("SYSTEM:系统消息  COURSE:课程信息 NOTICE:公告")
 	private Object key;
 	
 	private Object value;

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundDto对象", description = "退款申请表数据传输对象")
+public class UserOrderRefundDto extends UserOrderRefund{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundDto buildDto(UserOrderRefund userOrderRefund){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefund);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/UserOrderRefundPaymentDto.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+import io.swagger.annotations.ApiModel;
+import org.apache.commons.beanutils.BeanUtils;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentDto对象", description = "退款单表数据传输对象")
+public class UserOrderRefundPaymentDto extends UserOrderRefundPayment{
+	private static final long serialVersionUID = 1L;
+    
+    public UserOrderRefundPaymentDto buildDto(UserOrderRefundPayment userOrderRefundPayment){
+        try {
+            BeanUtils.copyProperties(this,userOrderRefundPayment);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return this;
+    }
+
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/AuthOperaReq.java

@@ -14,8 +14,8 @@ import javax.validation.constraints.NotNull;
  */
 @ApiModel(value = "AuthOperaReq", description = "审核操作对象")
 public class AuthOperaReq {
-    @NotNull(message = "审核单id不能为空")
-    @ApiModelProperty(value = "审核单id", required = true)
+    @NotNull(message = "id不能为空")
+    @ApiModelProperty(value = "id", required = true)
     private Long id;
     @NotNull(message = "请说明审核是否通过")
     @ApiModelProperty(value = "审核是否通过", required = true)

+ 72 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderRefundReq.java

@@ -0,0 +1,72 @@
+package com.yonge.cooleshow.biz.dal.dto.req;
+
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 退款请求
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:55
+ */
+@ApiModel(value = "OrderRefundReq对象", description = "退款请求")
+public class OrderRefundReq {
+
+    @ApiModelProperty("订单ID ")
+    @NotNull(message = "订单id不能为空")
+    private Long orderId;
+
+    @ApiModelProperty("订单详情ids ")
+    private List<Long> oredrDetilIds;
+
+    @ApiModelProperty(value = "退款说明 ")
+    private String reason;
+
+    private Long userId;
+
+    private UserOrderDetailVo oredrDetil;
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public List<Long> getOredrDetilIds() {
+        return oredrDetilIds;
+    }
+
+    public void setOredrDetilIds(List<Long> oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public UserOrderDetailVo getOredrDetil() {
+        return oredrDetil;
+    }
+
+    public void setOredrDetil(UserOrderDetailVo oredrDetil) {
+        this.oredrDetil = oredrDetil;
+    }
+}

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/TotalReq.java

@@ -109,7 +109,7 @@ public class TotalReq {
                 } else {
                     paramDate = LocalDate.of(Integer.parseInt(dateTime), 1, 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfYear()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
             } else {
                 LocalDate paramDate;
                 if (StringUtil.isEmpty(dateTime)) {
@@ -118,7 +118,7 @@ public class TotalReq {
                     String[] classDateSp = dateTime.split("-");
                     paramDate = LocalDate.of(Integer.parseInt(classDateSp[0]), Integer.parseInt(classDateSp[1]), 1);
                 }
-                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MAX);
+                lastDay = LocalDateTime.of(paramDate.with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
             }
             return lastDay;
         }

+ 0 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/StudentMusicSheetOrderSearch.java

@@ -46,9 +46,6 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date endTime;
 
-    @ApiModelProperty(value = "订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭", hidden = true)
-    private YesOrNoEnum orderStatus = YesOrNoEnum.YES;
-
     @ApiModelProperty(value = "假删除 0 : 未删除 1:已删除", hidden = true)
     private Boolean delFlag = false;
 
@@ -119,11 +116,4 @@ public class StudentMusicSheetOrderSearch extends QueryInfo {
         this.delFlag = delFlag;
     }
 
-    public YesOrNoEnum getOrderStatus() {
-        return orderStatus;
-    }
-
-    public void setOrderStatus(YesOrNoEnum orderStatus) {
-        this.orderStatus = orderStatus;
-    }
 }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundPaymentSearch.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.base.page.QueryInfo;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-05-09 17:14:30
+ */
+@ApiModel(value = "UserOrderRefundPaymentSearch对象", description = "退款单表查询对象")
+public class UserOrderRefundPaymentSearch extends QueryInfo {
+	private static final long serialVersionUID = 1L;
+
+}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/OrderRefundsSearch.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/UserOrderRefundSearch.java

@@ -5,10 +5,10 @@ import io.swagger.annotations.ApiModel;
 
 /**
  * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
+ * @Data: 2022-05-09 17:14:30
  */
-@ApiModel(value = "OrderRefundsSearch对象", description = "用户退款表查询对象")
-public class OrderRefundsSearch extends QueryInfo{
+@ApiModel(value = "UserOrderRefundSearch对象", description = "退款申请表查询对象")
+public class UserOrderRefundSearch extends QueryInfo {
 	private static final long serialVersionUID = 1L;
 
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoom.java

@@ -63,7 +63,7 @@ public class LiveRoom implements Serializable {
     private Integer roomState;
 
     @TableField("type_")
-    @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间")
+    @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间 practice陪练课")
     private String type;
 
     @TableField("cover_pic_")

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Subject.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.entity;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
 import java.util.List;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -9,7 +10,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
 /**
  * 对应数据库表(subject):
  */
-public class Subject {
+public class Subject implements Serializable {
 
 	/**  */
 	private Long id;

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessage.java

@@ -15,6 +15,13 @@ public class SysMessage extends BaseEntity {
 
 	/** 主键 */
 	private Long id;
+
+	@ApiModelProperty("消息配置表id")
+	private Long messageConfigId;
+
+	@ApiModelProperty("TEACHER_AUTH:老师认证,MUSICIAN_AUTH:音乐人认证,PRACTICE:陪练课,LIVE:直播课,VIDEO:视频课,MUSIC_SHEET:乐谱," +
+			"COURSE:课程,INCOME:收入,HOMEWORK:作业,EVALUATE:评价,GROUP_CHAT:群聊,VIP:会员,NOTICE:公告")
+	private String subType;
 	
 	/** 标题 */
 	@ApiModelProperty(value = "标题",required = false)
@@ -205,4 +212,19 @@ public class SysMessage extends BaseEntity {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public Long getMessageConfigId() {
+		return messageConfigId;
+	}
+
+	public void setMessageConfigId(Long messageConfigId) {
+		this.messageConfigId = messageConfigId;
+	}
+
+	public String getSubType() {
+		return subType;
+	}
+
+	public void setSubType(String subType) {
+		this.subType = subType;
+	}
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysMessageConfig.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.yonge.cooleshow.biz.dal.enums.MessageIconTypeEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
@@ -15,6 +16,9 @@ public class SysMessageConfig {
 	/** 消息类型 */
 	private MessageTypeEnum messageType;
 
+	/** 消息二级类型  */
+	private MessageIconTypeEnum  subType;
+
 	/** 消息内容 */
 	private String content;
 
@@ -100,4 +104,11 @@ public class SysMessageConfig {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public MessageIconTypeEnum getSubType() {
+		return subType;
+	}
+
+	public void setSubType(MessageIconTypeEnum subType) {
+		this.subType = subType;
+	}
 }

+ 160 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefund.java

@@ -0,0 +1,160 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+
+/**
+ * 退款申请表
+ */
+@TableName("user_order_refund")
+@ApiModel(value = "UserOrderRefund对象", description = "退款申请表")
+public class UserOrderRefund implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("用户id ")
+    @TableField(value = "user_id_")
+    private Long userId;
+    @ApiModelProperty("订单id")
+    @TableField(value = "order_id_")
+    private Long orderId;
+    @ApiModelProperty("订单详情id(多个详情,分割) ")
+    @TableField(value = "oredr_detil_ids_")
+    private String oredrDetilIds;
+    @ApiModelProperty("状态 DOING、审核中 PASS、通过 UNPASS、不通过 ")
+    @TableField(value = "status_")
+    private AuthStatusEnum status;
+    @ApiModelProperty("申请退费金额 ")
+    @TableField(value = "apply_amount_")
+    private BigDecimal applyAmount;
+    @ApiModelProperty("实际退费金额 ")
+    @TableField(value = "actual_amount_")
+    private BigDecimal actualAmount;
+    @ApiModelProperty("退款描述 ")
+    @TableField(value = "reason_")
+    private String reason;
+    @ApiModelProperty("审核人 ")
+    @TableField(value = "operate_id_")
+    private Long operateId;
+    @ApiModelProperty("审核描述 ")
+    @TableField(value = "operate_reason_")
+    private String operateReason;
+    @TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+    @TableField(value = "update_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    public String getOredrDetilIds() {
+        return oredrDetilIds;
+    }
+
+    public void setOredrDetilIds(String oredrDetilIds) {
+        this.oredrDetilIds = oredrDetilIds;
+    }
+
+    public AuthStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(AuthStatusEnum status) {
+        this.status = status;
+    }
+
+    public BigDecimal getApplyAmount() {
+        return applyAmount;
+    }
+
+    public void setApplyAmount(BigDecimal applyAmount) {
+        this.applyAmount = applyAmount;
+    }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    public Long getOperateId() {
+        return operateId;
+    }
+
+    public void setOperateId(Long operateId) {
+        this.operateId = operateId;
+    }
+
+    public String getOperateReason() {
+        return operateReason;
+    }
+
+    public void setOperateReason(String operateReason) {
+        this.operateReason = operateReason;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}

+ 146 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefundPayment.java

@@ -0,0 +1,146 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.math.BigDecimal;
+
+/**
+ * 退款单表
+ */
+@TableName("user_order_refund_payment")
+@ApiModel(value = "UserOrderRefundPayment对象", description = "退款单表")
+public class UserOrderRefundPayment implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("退款申请单号 ")
+	@TableField(value = "refund_id_")
+    private String refundId;
+    @ApiModelProperty("汇付退款订单号 ")
+	@TableField(value = "adapay_no_")
+    private String adapayNo;
+    @ApiModelProperty("交易流水号(支付对象id) ")
+	@TableField(value = "trans_no_")
+    private String transNo;
+    @ApiModelProperty("交易金额 ")
+	@TableField(value = "refund_amt_")
+    private BigDecimal refundAmt;
+    @ApiModelProperty("回调交易金额 ")
+	@TableField(value = "back_refund_amt_")
+    private BigDecimal backRefundAmt;
+    @ApiModelProperty("汇付收取的服务费 ")
+	@TableField(value = "fee_amt_")
+    private BigDecimal feeAmt;
+    @ApiModelProperty("交易状态 pending 交易处理中 succeeded 交易成功 failed 交易失败 close 交易关闭 ")
+	@TableField(value = "status_")
+    private String status;
+    @ApiModelProperty("失败信息 ")
+	@TableField(value = "pay_fail_msg_")
+    private String payFailMsg;
+	@TableField(value = "create_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date createTime;
+	@TableField(value = "update_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date updateTime;
+
+	public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+	public String getRefundId() {
+        return refundId;
+    }
+
+    public void setRefundId(String refundId) {
+        this.refundId = refundId;
+    }
+    
+	public String getAdapayNo() {
+        return adapayNo;
+    }
+
+    public void setAdapayNo(String adapayNo) {
+        this.adapayNo = adapayNo;
+    }
+    
+	public String getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+    
+	public BigDecimal getRefundAmt() {
+        return refundAmt;
+    }
+
+    public void setRefundAmt(BigDecimal refundAmt) {
+        this.refundAmt = refundAmt;
+    }
+    
+	public BigDecimal getBackRefundAmt() {
+        return backRefundAmt;
+    }
+
+    public void setBackRefundAmt(BigDecimal backRefundAmt) {
+        this.backRefundAmt = backRefundAmt;
+    }
+    
+	public BigDecimal getFeeAmt() {
+        return feeAmt;
+    }
+
+    public void setFeeAmt(BigDecimal feeAmt) {
+        this.feeAmt = feeAmt;
+    }
+    
+	public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    
+	public String getPayFailMsg() {
+        return payFailMsg;
+    }
+
+    public void setPayFailMsg(String payFailMsg) {
+        this.payFailMsg = payFailMsg;
+    }
+    
+	public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+    
+	public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+    
+}

+ 0 - 144
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java

@@ -1,144 +0,0 @@
-package com.yonge.cooleshow.biz.dal.entity;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.math.BigDecimal;
-
-/**
- * 用户退款表
- */
-@TableName("user_order_refunds")
-@ApiModel(value = "UserOrderRefunds对象", description = "用户退款表")
-public class UserOrderRefunds implements Serializable {
-	private static final long serialVersionUID = 1L;
-    @TableId(value = "id_", type = IdType.AUTO)
-    private Long id;
-	@TableField(value = "user_id_")
-    private Integer userId;
-    @ApiModelProperty("订单号 ")
-	@TableField(value = "order_no_")
-    private String orderNo;
-    @ApiModelProperty("状态(1,审核中;2,通过;-1,拒绝;) ")
-	@TableField(value = "status_")
-    private String status;
-    @ApiModelProperty("申请退费金额 ")
-	@TableField(value = "apply_amount_")
-    private BigDecimal applyAmount;
-    @ApiModelProperty("实际退费金额 ")
-	@TableField(value = "actual_amount_")
-    private BigDecimal actualAmount;
-    @ApiModelProperty("退款描述 ")
-	@TableField(value = "reason_")
-    private String reason;
-    @ApiModelProperty("操作人 ")
-	@TableField(value = "operate_user_id_")
-    private Long operateUserId;
-	@TableField(value = "create_time_")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date createTime;
-	@TableField(value = "update_time_")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date updateTime;
-	@TableField(value = "remark_")
-    private String remark;
-
-	public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-    
-	public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-    
-	public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
-    
-	public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-    
-	public BigDecimal getApplyAmount() {
-        return applyAmount;
-    }
-
-    public void setApplyAmount(BigDecimal applyAmount) {
-        this.applyAmount = applyAmount;
-    }
-    
-	public BigDecimal getActualAmount() {
-        return actualAmount;
-    }
-
-    public void setActualAmount(BigDecimal actualAmount) {
-        this.actualAmount = actualAmount;
-    }
-    
-	public String getReason() {
-        return reason;
-    }
-
-    public void setReason(String reason) {
-        this.reason = reason;
-    }
-    
-	public Long getOperateUserId() {
-        return operateUserId;
-    }
-
-    public void setOperateUserId(Long operateUserId) {
-        this.operateUserId = operateUserId;
-    }
-    
-	public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-    
-	public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-    
-	public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-    
-}

+ 390 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserWithdrawalCallback.java

@@ -0,0 +1,390 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Description: 提现回调
+ * @Author: cy
+ * @Date: 2022/5/10
+ */
+@ApiModel(value = "user_withdrawal_callback-提现回调表")
+public class UserWithdrawalCallback extends BaseEntity {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键id")
+    private Long id;
+
+    @TableField("order_no_")
+    @ApiModelProperty(value = "众薪平台唯一订单号")
+    private String orderNo;
+
+    @TableField("out_member_no_")
+    @ApiModelProperty(value = "商户号")
+    private String outMemberNo;
+
+    @TableField("outer_order_no_")
+    @ApiModelProperty(value = "商户唯一订单号")
+    private String outerOrderNo;
+
+    @TableField("additional_charge_")
+    @ApiModelProperty(value = "个人附加费(单位为:分)")
+    private Integer additionalCharge;
+
+    @TableField("actual_amount_")
+    @ApiModelProperty(value = "实发金额(单位为:分,范围:1~10000000000)")
+    private Integer actualAmount;
+
+    @TableField("company_charge_")
+    @ApiModelProperty(value = "企业附加费(单位为:分)")
+    private Integer companyCharge;
+
+    @TableField("company_service_fee_")
+    @ApiModelProperty(value = "公司服务费汇总=企业个税+企业附加费+企业服务费(单位为:分)")
+    private Integer companyServiceFee;
+
+    @TableField("company_tax_")
+    @ApiModelProperty(value = "企业承担个税(单位为:分)")
+    private Integer companyTax;
+
+    @TableField("service_charge_")
+    @ApiModelProperty(value = "企业服务费(单位为:分)")
+    private Integer serviceCharge;
+
+    @TableField("tax_fee_")
+    @ApiModelProperty(value = "个人承担个税(单位为:分)")
+    private Integer taxFee;
+
+    @TableField("person_service_fee_")
+    @ApiModelProperty(value = "个人服务费汇总=个人个税+个人附加费(单位为:分)")
+    private Integer personServiceFee;
+
+    @TableField("predict_amount_")
+    @ApiModelProperty(value = "应发金额(单位为:分,范围:1~10000000000)")
+    private Integer predictAmount;
+
+    @TableField("salary_type_")
+    @ApiModelProperty(value = "发放类型(0:个人经营所得)")
+    private String salaryType;
+
+    @TableField("status_")
+    @ApiModelProperty(value = "交易状态(0:交易中;1:交易成功;2:交易失败)")
+    private String status;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("end_time_")
+    @ApiModelProperty(value = "完成时间")
+    private Date endTime;
+
+    @TableField("error_code_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorCode;
+
+    @TableField("error_msg_")
+    @ApiModelProperty(value = "支付失败时返回")
+    private String errorMsg;
+
+    @TableField("mobile_")
+    @ApiModelProperty(value = "收款方电话")
+    private String mobile;
+
+    @TableField("certificate_no_")
+    @ApiModelProperty(value = "收款方身份证号")
+    private String certificateNo;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "收款方姓名(银行预留姓名等)")
+    private String name;
+
+    @TableField("card_attribute_")
+    @ApiModelProperty(value = "卡属性:(C:对私)")
+    private String cardAttribute;
+
+    @TableField("card_type_")
+    @ApiModelProperty(value = "卡类型:DC借记卡")
+    private String cardType;
+
+    @TableField("pay_account_")
+    @ApiModelProperty(value = "收款方账号(银行卡号/支付宝账号/open_id)以实际业务为准")
+    private String payAccount;
+
+    @TableField("pay_type_")
+    @ApiModelProperty(value = "支付类型(1:银行卡,2:支付宝,4:微信)以实际业务为准")
+    private String payType;
+
+    @TableField("project_name_")
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    @TableField("remark_")
+    @ApiModelProperty(value = "备注(扩展字段)只针对测试环境:只要参数合规都会返回交易成功,如果想要模拟交易失败,该字段值中含有“失败”二字即会失败。")
+    private String remark;
+
+    @TableField("service_")
+    @ApiModelProperty(value = "接口名称: bpotop.zx.pay.order")
+    private String service;
+
+    @TableField("sign_type_")
+    @ApiModelProperty(value = "签名类型:RSA")
+    private String signType;
+
+    @TableField("notify_url_")
+    @ApiModelProperty(value = "回调地址")
+    private String notifyUrl;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public String getOutMemberNo() {
+        return outMemberNo;
+    }
+
+    public void setOutMemberNo(String outMemberNo) {
+        this.outMemberNo = outMemberNo;
+    }
+
+    public String getOuterOrderNo() {
+        return outerOrderNo;
+    }
+
+    public void setOuterOrderNo(String outerOrderNo) {
+        this.outerOrderNo = outerOrderNo;
+    }
+
+    public Integer getAdditionalCharge() {
+        return additionalCharge;
+    }
+
+    public void setAdditionalCharge(Integer additionalCharge) {
+        this.additionalCharge = additionalCharge;
+    }
+
+    public Integer getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(Integer actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public Integer getCompanyCharge() {
+        return companyCharge;
+    }
+
+    public void setCompanyCharge(Integer companyCharge) {
+        this.companyCharge = companyCharge;
+    }
+
+    public Integer getCompanyServiceFee() {
+        return companyServiceFee;
+    }
+
+    public void setCompanyServiceFee(Integer companyServiceFee) {
+        this.companyServiceFee = companyServiceFee;
+    }
+
+    public Integer getCompanyTax() {
+        return companyTax;
+    }
+
+    public void setCompanyTax(Integer companyTax) {
+        this.companyTax = companyTax;
+    }
+
+    public Integer getServiceCharge() {
+        return serviceCharge;
+    }
+
+    public void setServiceCharge(Integer serviceCharge) {
+        this.serviceCharge = serviceCharge;
+    }
+
+    public Integer getTaxFee() {
+        return taxFee;
+    }
+
+    public void setTaxFee(Integer taxFee) {
+        this.taxFee = taxFee;
+    }
+
+    public Integer getPersonServiceFee() {
+        return personServiceFee;
+    }
+
+    public void setPersonServiceFee(Integer personServiceFee) {
+        this.personServiceFee = personServiceFee;
+    }
+
+    public Integer getPredictAmount() {
+        return predictAmount;
+    }
+
+    public void setPredictAmount(Integer predictAmount) {
+        this.predictAmount = predictAmount;
+    }
+
+    public String getSalaryType() {
+        return salaryType;
+    }
+
+    public void setSalaryType(String salaryType) {
+        this.salaryType = salaryType;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getErrorCode() {
+        return errorCode;
+    }
+
+    public void setErrorCode(String errorCode) {
+        this.errorCode = errorCode;
+    }
+
+    public String getErrorMsg() {
+        return errorMsg;
+    }
+
+    public void setErrorMsg(String errorMsg) {
+        this.errorMsg = errorMsg;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getCertificateNo() {
+        return certificateNo;
+    }
+
+    public void setCertificateNo(String certificateNo) {
+        this.certificateNo = certificateNo;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCardAttribute() {
+        return cardAttribute;
+    }
+
+    public void setCardAttribute(String cardAttribute) {
+        this.cardAttribute = cardAttribute;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getPayAccount() {
+        return payAccount;
+    }
+
+    public void setPayAccount(String payAccount) {
+        this.payAccount = payAccount;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getService() {
+        return service;
+    }
+
+    public void setService(String service) {
+        this.service = service;
+    }
+
+    public String getSignType() {
+        return signType;
+    }
+
+    public void setSignType(String signType) {
+        this.signType = signType;
+    }
+
+    public String getNotifyUrl() {
+        return notifyUrl;
+    }
+
+    public void setNotifyUrl(String notifyUrl) {
+        this.notifyUrl = notifyUrl;
+    }
+}

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java

@@ -15,6 +15,8 @@ import java.time.Duration;
 public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
     TEACHER_TOTAL("老师统计缓存"),
     STUDENT_TOTAL("学生统计缓存"),
+    TEACHER_SUBJECT_ITEM("老师声部下拉缓存", Duration.ofHours(1L)),
+    STUDENT_SUBJECT_ITEM("学生声部下拉缓存", Duration.ofHours(1L)),
 
     LOCK_EXECUTE_ORDER("用户下单/付款/取消订单锁"),
     LOCK_CHANGE_ACCOUNT("账户变更锁"),
@@ -50,6 +52,10 @@ public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
         return msg;
     }
 
+    public Duration getDuration() {
+        return duration;
+    }
+
     public String getRedisKey(Object... detils) {
         String key = this.getCode();
         for (Object detil : detils) {

+ 42 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/ContractTypeEnum.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 协议模板类型枚举
+ */
+public enum ContractTypeEnum implements BaseEnum<String, ContractTypeEnum> {
+
+    REGISTER("REGISTER","注册"),
+    COURSES("COURSES","课程购买"),
+    PRODUCT("PRODUCT","产品")
+    ;
+
+    @EnumValue
+    private String code;
+
+    private String desc;
+
+    private ContractTypeEnum(String code,String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    @Override
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 7 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.enums;
 
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.toolset.base.enums.BaseEnum;
+import com.yonge.toolset.base.exception.BizException;
 
 import java.util.Arrays;
 import java.util.List;
@@ -39,7 +40,7 @@ public enum CourseScheduleEnum implements BaseEnum<String,CourseScheduleEnum> {
     public static CourseScheduleEnum existCourseType(String code, String errMsg) {
         CourseScheduleEnum[] values = {PRACTICE, LIVE};
         existCourse(values, code, errMsg);
-        //陪练课-校验学生时间是否交集
+        //返回枚举对象
         if (code.equals(CourseScheduleEnum.PRACTICE.getCode())) {
             return CourseScheduleEnum.PRACTICE;
         } else {
@@ -59,10 +60,12 @@ public enum CourseScheduleEnum implements BaseEnum<String,CourseScheduleEnum> {
     }
 
     private static void existCourse(CourseScheduleEnum[] values, String code, String errMsg) {
-        List<String> collect = Arrays.stream(values).map(CourseScheduleEnum::getCode).collect(Collectors.toList());
-        boolean typeFlag = collect.contains(code);
+        List<String> collect = Arrays.stream(values)
+                .map(CourseScheduleEnum::getCode)
+                .collect(Collectors.toList());
+        boolean typeFlag = collect.contains(code.toUpperCase());
         if (!typeFlag) {
-            throw new RuntimeException(errMsg);
+            throw new BizException(errMsg);
         }
     }
 

+ 56 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageIconTypeEnum.java

@@ -0,0 +1,56 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-05-09
+ */
+public enum MessageIconTypeEnum implements BaseEnum<String,MessageIconTypeEnum> {
+
+    TEACHER_AUTH("TEACHER_AUTH","老师认证"),
+    MUSICIAN_AUTH("MUSICIAN_AUTH","音乐人认证"),
+    PRACTICE("PRACTICE","陪练课"),
+    LIVE("LIVE","直播课"),
+    VIDEO("VIDEO","视频课"),
+    MUSIC_SHEET("MUSIC_SHEET","乐谱"),
+    COURSE("COURSE","课程"),
+    INCOME("INCOME","收入"),
+    HOMEWORK("HOMEWORK","作业"),
+    EVALUATE("EVALUATE","评价"),
+    GROUP_CHAT("GROUP_CHAT","群聊"),
+    VIP("VIP","会员"),
+
+    ;
+
+    MessageIconTypeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    @EnumValue
+    private String code;
+
+    private String msg;
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+
+    public String getCode() {
+        return code;
+    }
+
+}

+ 48 - 20
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -11,16 +11,29 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_BUY_TEACHER_MUSIC_SHEET("STUDENT_BUY_TEACHER_MUSIC_SHEET","学员购买老师乐谱"),
     MUSIC_SHEET_AUTH_PASS("MUSIC_SHEET_AUTH_PASS","乐谱审核通过"),
     MUSIC_SHEET_AUTH_UNPASS("MUSIC_SHEET_AUTH_UNPASS","乐谱审核失败"),
+
     STUDENT_BUY_MUSIC_SHEET_SUCCESS("STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱成功"),
+    SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS("SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱(短信)"),
+
     TEACHER_DECORATE_HOMEWORK("TEACHER_DECORATE_HOMEWORK","老师布置作业"),
     TEACHER_REVIEW_HOMEWORK("TEACHER_REVIEW_HOMEWORK","老师点评作业"),
     STUDENT_SUBMIT_HOMEWORK("STUDENT_SUBMIT_HOMEWORK","学生提交作业"),
 
-    TEACHER_AUTH_PASS("TEACHER_AUTH_PASS","老师认证通过"),
-    TEACHER_AUTH_FAIL("TEACHER_AUTH_FAIL","老师认证失败"),
-    MUSICIAN_AUTH_PASS("MUSICIAN_AUTH_PASS","音乐人认证通过"),
+    TEACHER_AUTH_PASS("TEACHER_AUTH_PASS","老师认证通过","H5?https//www.xxxx.com/teacher/#/practiceSetting"),
+    SMS_TEACHER_AUTH_PASS("SMS_TEACHER_AUTH_PASS","老师认证通过(短信)"),
+
+    TEACHER_AUTH_FAIL("TEACHER_AUTH_FAIL","老师认证失败","H5?https//www.xxxx.com/teacher/#/teacherCert"),
+    SMS_TEACHER_AUTH_FAIL("SMS_TEACHER_AUTH_FAIL","老师认证失败(短信)"),
+
+    MUSICIAN_AUTH_PASS("MUSICIAN_AUTH_PASS","音乐人认证通过","H5?https//www.xxxx.com/teacher/#/music-upload"),
+    SMS_MUSICIAN_AUTH_PASS("SMS_MUSICIAN_AUTH_PASS","音乐人认证通过(短信)"),
+
     MUSICIAN_AUTH_FAIL("MUSICIAN_AUTH_FAIL","音乐人认证失败"),
+    SMS_MUSICIAN_AUTH_FAIL("SMS_MUSICIAN_AUTH_FAIL","音乐人认证失败(短信)"),
+
     STUDENT_BUY_PRACTICE("STUDENT_BUY_PRACTICE","学员购买陪练课"),
+    SMS_STUDENT_BUY_PRACTICE("SMS_STUDENT_BUY_PRACTICE","学员购买陪练课(短信)"),
+
     STUDENT_BUY_LIVE("STUDENT_BUY_LIVE","学员购买直播课"),
     STUDENT_BUY_VIDEO("STUDENT_BUY_VIDEO","学员购买视频课"),
     LIVE_COMPLETION_SUCCESS("LIVE_COMPLETION_SUCCESS","直播课成课"),
@@ -33,12 +46,26 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_EVALUATE_TEACHER_PRACTICE("STUDENT_EVALUATE_TEACHER_PRACTICE","学员对老师评价"),
     WITHDRAWAL_SUCCESS("WITHDRAWAL_SUCCESS","提现成功"),
     STUDENT_JOIN_FANSGROUP("STUDENT_JOIN_FANSGROUP","学员申请加入粉丝群"),
+
     VIP_BUY_SUCCESS("VIP_BUY_SUCCESS","会员购买成功"),
-    VIP_EXPIRE_THIRTY_DAY("VIP_EXPIRE_THIRTY_DAY","会员到期前30天"),
-    VIP_EXPIRE("VIP_EXPIRE","会员到期"),
+    SMS_VIP_BUY_SUCCESS("SMS_VIP_BUY_SUCCESS","会员购买成功(短信)"),
+
+    VIP_EXPIRE_THIRTY_DAY("VIP_EXPIRE_THIRTY_DAY","会员到期前30天","H5?https//www.xxxx.com/student/#/memberCenter"),
+    SMS_VIP_EXPIRE_THIRTY_DAY("SMS_VIP_EXPIRE_THIRTY_DAY","会员到期前30天(短信)","H5?https//www.xxxx.com/student/#/memberCenter"),
+
+    VIP_EXPIRE("VIP_EXPIRE","会员到期","H5?https//www.xxxx.com/student/#/memberCenter"),
+    SMS_VIP_EXPIRE("SMS_VIP_EXPIRE","会员到期(短信)","H5?https//www.xxxx.com/student/#/memberCenter"),
+
     PRACTICE_BUY("PRACTICE_BUY","陪练课购买"),
+    SMS_PRACTICE_BUY("SMS_PRACTICE_BUY", "陪练课购买(短信)"),
+
     LIVE_BUY("LIVE_BUY","直播课购买"),
+    SMS_LIVE_BUY("SMS_LIVE_BUY","直播课购买"),
+
+
     VIDEO_BUY("VIDEO_BUY","视频课购买"),
+    SMS_VIDEO_BUY("SMS_VIDEO_BUY","视频课购买(短信)"),
+
     PRACTICE_REMIND("PRACTICE_REMIND","陪练课提醒(陪练课开始前20分钟)"),
     LIVE_REMIND("LIVE_REMIND","直播课提醒(直播课开始前20分钟)"),
     NOT_EVALUATE_TEACHER_PRACTICE("NOT_EVALUATE_TEACHER_PRACTICE","当日陪练课未对老师评价(每晚9点,已评价不发)"),
@@ -46,22 +73,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     //------短信模板------
     SMS_BUY_LIVE("SMS_BUY_LIVE","直播课购买成功"),
-    SMS_LIVE_BUY("SMS_LIVE_BUY","直播课购买"),
     SMS_LIVE_COMPLETION_SUCCESS("SMS_LIVE_COMPLETION_SUCCESS","直播课成课"),
-
-    SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS("SMS_STUDENT_BUY_MUSIC_SHEET_SUCCESS","学员购买乐谱(短信)"),
-
-    SMS_TEACHER_AUTH_PASS("SMS_TEACHER_AUTH_PASS","老师认证通过(短信)"),
-    SMS_TEACHER_AUTH_FAIL("SMS_TEACHER_AUTH_FAIL","老师认证失败(短信)"),
-    SMS_MUSICIAN_AUTH_PASS("SMS_MUSICIAN_AUTH_PASS","音乐人认证通过(短信)"),
-    SMS_MUSICIAN_AUTH_FAIL("SMS_MUSICIAN_AUTH_FAIL","音乐人认证失败(短信)"),
-    SMS_VIP_BUY_SUCCESS("SMS_VIP_BUY_SUCCESS","会员购买成功(短信)"),
-    SMS_VIP_EXPIRE_THIRTY_DAY("SMS_VIP_EXPIRE_THIRTY_DAY","会员到期前30天(短信)"),
-    SMS_VIP_EXPIRE("SMS_VIP_EXPIRE","会员到期(短信)"),
-
-    SMS_VIDEO_BUY("SMS_VIDEO_BUY","视频课购买(短信)"),
-    SMS_STUDENT_BUY_PRACTICE("SMS_STUDENT_BUY_PRACTICE","学员购买陪练课(短信)"),
-    SMS_PRACTICE_BUY("SMS_PRACTICE_BUY", "陪练课购买(短信)"),
     SMS_TOMORROW_COURSE_REMINDER("SMS_TOMORROW_COURSE_REMINDER", "明日课程提醒(每晚9点)(短信)");
 
     MessageTypeEnum(String code, String msg) {
@@ -69,11 +81,19 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         this.msg = msg;
     }
 
+    MessageTypeEnum(String code, String msg, String url) {
+        this.code = code;
+        this.msg = msg;
+        this.url = url;
+    }
+
     @EnumValue
     private String code;
 
     private String msg;
 
+    private String url;
+
     public void setCode(String code) {
         this.code = code;
     }
@@ -90,4 +110,12 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     public String getCode() {
         return code;
     }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/RoomTypeEnum.java

@@ -7,6 +7,7 @@ import java.util.stream.Collectors;
 public enum RoomTypeEnum {
 
     LIVE("LIVE", "直播课"),
+    PRACTICE("PRACTICE", "陪练课"),
     TEMP("TEMP", "临时直播间");
 
     private String code;

+ 31 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseGroupService.java

@@ -5,14 +5,17 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.CourseTimeEntity;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
 import org.redisson.api.RMap;
@@ -142,6 +145,33 @@ public interface CourseGroupService extends IService<CourseGroup> {
      * <p>定时将符合结束售卖日期的在售卖中的直播课课程组修改为取消或者成课状态状态-每隔10分钟执行一次
      */
     void opsCourseGroup();
-
+    /***
+     * 直播课退款单-创建前
+     * @param: refundReq
+     * @updateTime 2022/5/9 15:11
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
+     */
+    HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq);
+    /***
+     * 直播课退款单-创建后
+     * @param: userOrderRefund
+     * @updateTime 2022/5/9 15:11
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
+     */
+    void refundAfter(UserOrderDetailVo userOrderDetailVo);
+    /***
+     * 直播课退款单-退款成功
+     * @param: userOrderRefund
+     * @updateTime 2022/5/9 15:11
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
+     */
+    void refundSuccess(UserOrderDetailVo userOrderDetailVo);
+    /***
+     * 直播课退款单-退款失败
+     * @param: userOrderRefund
+     * @updateTime 2022/5/9 15:11
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes>
+     */
+    void refundCancel(UserOrderDetailVo userOrderDetailVo);
 }
 

+ 15 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/HomeService.java

@@ -1,11 +1,14 @@
 package com.yonge.cooleshow.biz.dal.service;
 
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
+import java.util.Map;
+
 /**
  * @Author: liweifan
  * @Data: 2022/3/30 18:07
@@ -18,7 +21,6 @@ public interface HomeService {
      * @return: com.yonge.cooleshow.biz.dal.vo.HomeTotalVo
      */
     HomeUserToDoNum getUserToDoNum();
-
     /***
      * 统计老师数据
      * @author liweifan
@@ -35,4 +37,16 @@ public interface HomeService {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher>
      */
     HttpResponseResult<HomeTotalStudent> totalStudent(TotalReq totalReq);
+
+    /**
+     * 获取首页课程数据
+     * <p>未完成  未开始&进行中
+     * <p>已完成  已完成课程
+     *
+     * @param param 传入参数
+     *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
+     *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - timeType 时间类型 MONTH、月度 YEAR
+     */
+    CourseHomeVo queryCourseHomeData(Map<String, Object> param);
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -39,6 +39,11 @@ public interface LiveRoomService extends IService<LiveRoom> {
     void destroyExpiredLiveRoom();
 
     /**
+     * 定时任务-清理过期的房间-陪练课
+     */
+    void destroyExpiredPracticeRoom();
+
+    /**
      * 创建临时房间-直播间
      */
     String createTempLiveRoom(Map<String, Object> param);

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/MusicSheetService.java

@@ -215,4 +215,12 @@ public interface MusicSheetService extends IService<MusicSheet> {
      * @return 老师过审的曲目数量
      */
     Integer getTeacherMusicSheetCount(Long userId);
+
+    /**
+     * 获取首页统计数据
+     *
+     * @return
+     */
+    HomeMusicSheetVo getMusicSheetHome();
+
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
@@ -50,4 +51,13 @@ public interface StudentService extends IService<Student>  {
      * @return: java.lang.Integer
      */
     Integer setSubject(Long id, String subjectIds);
+
+    /***
+     * 获取声部下拉框
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/5/9 10:16
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     */
+    List<Subject> querySubjectItem(Long id);
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherService.java

@@ -115,5 +115,12 @@ public interface TeacherService extends IService<Teacher> {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
      */
     HttpResponseResult<Boolean> addHomeBrowse(Long userId);
-
+    /***
+     * 获取声部下拉框
+     * @author liweifan
+     * @param: id
+     * @updateTime 2022/5/9 10:16
+     * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.Subject>
+     */
+    List<Subject> querySubjectItem(Long id);
 }

+ 8 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java

@@ -38,7 +38,14 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
     UserOrderPayment detailByTransNo(String transNo);
-
+    /***
+     * 通过汇付支付订单号查询付款单
+     * @author liweifan
+     * @param: orderNo
+     * @updateTime 2022/4/13 16:09
+     * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
+     */
+    UserOrderPayment detailByAdapayNo(String transNo);
     /***
      * 关闭付款单
      * @author liweifan

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundPaymentService.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundPaymentVo;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundPaymentSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefundPayment;
+
+/**
+ * 退款单表 服务类
+ * @author liweifan
+ * @date 2022-05-09
+ */
+public interface UserOrderRefundPaymentService extends IService<UserOrderRefundPayment>  {
+
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-05-09
+     */
+	UserOrderRefundPaymentVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-05-09
+     */
+    IPage<UserOrderRefundPaymentVo> selectPage(IPage<UserOrderRefundPaymentVo> page, UserOrderRefundPaymentSearch query);
+}

+ 49 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java

@@ -0,0 +1,49 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.AuthOperaReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
+import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+
+/**
+ * 用户退款表 服务类
+ * @author liweifan
+ * @date 2022-03-30
+ */
+public interface UserOrderRefundService extends IService<UserOrderRefund>  {
+	/**
+     * 查询详情
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+	UserOrderRefundVo detail(Long id);
+
+    /**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+    IPage<UserOrderRefundVo> selectPage(IPage<UserOrderRefundVo> page, UserOrderRefundSearch query);
+	/***
+	 * 订单退款
+	 * @author liweifan
+	 * @param: payReq
+	 * @updateTime 2022/4/21 19:39
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+	HttpResponseResult<Boolean> orderRefund(OrderRefundReq refundReq);
+	/***
+	 * 审批退款申请
+	 * @author liweifan
+	 * @param: authOperaReq
+	 * @param: user
+	 * @updateTime 2022/5/9 16:25
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+    HttpResponseResult<Boolean> doAuth(AuthOperaReq authOperaReq, SysUser user);
+}

+ 0 - 29
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java

@@ -1,29 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
-
-/**
- * 用户退款表 服务类
- * @author liweifan
- * @date 2022-03-30
- */
-public interface UserOrderRefundsService extends IService<UserOrderRefunds>  {
-
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-	UserOrderRefundsVo detail(Long id);
-
-    /**
-     * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-    IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query);
-}

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
@@ -114,6 +115,9 @@ public interface UserOrderService extends IService<UserOrder> {
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
      */
     HttpResponseResult<Boolean> orderCancel(OrderPayReq payReq);
+
+
+
     /***
      * 取消订单(未判断付款单状态)
      * @author liweifan
@@ -154,4 +158,5 @@ public interface UserOrderService extends IService<UserOrder> {
      * @updateTime 2022/4/29 18:41
      */
     void setOrderStatus(String orderNo, OrderStatusEnum orderStatus);
+
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalCallbackService.java

@@ -0,0 +1,8 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.UserWithdrawalCallback;
+
+public interface UserWithdrawalCallbackService extends IService<UserWithdrawalCallback> {
+    void insertCallback(UserWithdrawalCallback callback);
+}

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserWithdrawalService.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.utils.easyexcel.ExcelDataReaderProperty;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户账户提现表 服务类

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VideoLessonGroupService.java

@@ -44,4 +44,6 @@ public interface VideoLessonGroupService extends IService<VideoLessonGroup> {
     IPage<VideoLessonAuthGroup> queryGroupList(IPage<VideoLessonAuthGroup> page, VideoGroupSearch query);
 
     IPage<LessonGroupVo> selectLessonGroupById(IPage<LessonGroupVo> page, VideoLessonGroupSearch query);
+
+    CountVideoGroupVo countVideoGroup();
 }

+ 27 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java

@@ -12,6 +12,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseGroupDao;
 import com.yonge.cooleshow.biz.dal.dto.CheckCourseTimeDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto;
 import com.yonge.cooleshow.biz.dal.dto.LiveCourseGroupDto.CoursePlanDto;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
@@ -24,6 +25,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
+import com.yonge.cooleshow.biz.dal.vo.res.RefundCreateRes;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
@@ -601,13 +603,13 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
                 .eq(CourseGroup::getId, groupId)
                 .eq(CourseGroup::getType, CourseScheduleEnum.LIVE.getCode())
         );
+        if (Objects.isNull(courseGroup)) {
+            throw new BizException("课程组不存在!");
+        }
         //只要不是销售中的课程组都提示无法购买
         if (!courseGroup.getStatus().equals(CourseGroupEnum.APPLY.getCode())) {
             throw new BizException("课程已结束销售!");
         }
-        if (Objects.isNull(courseGroup)) {
-            throw new BizException("课程组不存在!");
-        }
         //课程信息
         List<CourseSchedule> courseList = courseScheduleService.list(Wrappers.<CourseSchedule>lambdaQuery()
                 .eq(CourseSchedule::getCourseGroupId, groupId));
@@ -834,6 +836,28 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         closeCourseGroup();
     }
 
+    @Override
+    public HttpResponseResult<RefundCreateRes> refundCreate(OrderRefundReq refundReq) {
+        RefundCreateRes refundCreateRes = new RefundCreateRes();
+        refundCreateRes.setActualPrice(BigDecimal.ZERO);
+        return HttpResponseResult.succeed(refundCreateRes);
+    }
+
+    @Override
+    public void refundAfter(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
+    @Override
+    public void refundSuccess(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
+    @Override
+    public void refundCancel(UserOrderDetailVo userOrderDetailVo) {
+
+    }
+
     /**
      * 定时将符合开售日期的未开售的直播课课程组修改为报名中状态
      */

+ 25 - 19
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -124,6 +124,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         param.put("endDate", lastDay.toString());
         param.put("teacherId", getSysUser().getId());
         param.put("type", CourseScheduleEnum.LIVE.getCode());
+        log.info("queryTeacherLiveCourse:{}", param);
         Page<TeacherLiveCourseInfoVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc("a.start_time_");
         IPage<TeacherLiveCourseInfoVo> page = baseMapper.queryLiveTeacherCourse(pageInfo, param);
@@ -131,7 +132,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
-     * 校验该学生大于当前时间未开始的课程时间和传入时间段有没有交集
+     * 校验该学生大于当前时间未开始和进行中的课程时间和传入时间段有没有交集
      *
      * @param studentId 学生id
      * @param startTime 新增课程 开始时间
@@ -148,7 +149,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         param.put("studentId", studentId);
         param.put("greaterDate", new Date());
         param.put("classDate", ymd);
-        param.put("status", CourseScheduleEnum.NOT_START.getCode());
+        param.put("statusList", Lists.newArrayList(CourseScheduleEnum.NOT_START.getCode(), CourseScheduleEnum.ING.getCode()));
         List<CourseSchedule> list = baseMapper.queryStudentCourse(param);
         return checkCourseTime(list, CourseSchedule::getStartTime, CourseSchedule::getEndTime, startTime, endTime);
     }
@@ -166,10 +167,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         WrapperUtil.checkObj(startTime, "开始时间不能为空!");
         //获取日期-目前上课没有跨天情况
         String ymd = DateUtil.format(startTime, DateUtil.DEFAULT_PATTERN);
-        //查询老师当天所有的课程时间数据
-        List<CourseSchedule> list = this.list(Wrappers.<CourseSchedule>lambdaQuery()
-                .eq(CourseSchedule::getTeacherId, teacherId)
-                .eq(CourseSchedule::getClassDate, ymd));
+        //查询老师当天未开始、进行中的课程
+        List<CourseSchedule> list = getTeacherCourseTime(teacherId, ymd, ymd);
         return checkCourseTime(list, CourseSchedule::getStartTime, CourseSchedule::getEndTime, startTime, endTime);
     }
 
@@ -296,19 +295,27 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                         holidayMap.put(calendarYear, list);
                         return list;
                     });
-            //是否是节假日  0:不是 1是
-            calendarEntity.setHoliday(holiday.contains(calendarEntity.getDate()) ? 1 : 0);
-            calendarEntity.setSkipHoliday(skipHoliday);//直播课日历只展示节假日 不跳过节假日
+            //是否是节假日 1是 0:不是
+            int holidayFlag = holiday.contains(calendarEntity.getDate()) ? 1 : 0;
+            calendarEntity.setHoliday(holidayFlag);
+
+            //是节假日又有需要跳过节假日
+            if (holidayFlag == 1 && skipHoliday == 1) {
+                calendarEntity.setSkipHoliday(1);//跳过节假日
+                calendarEntity.setCourseTime(null);//清空课程时间
+            } else {
+                calendarEntity.setSkipHoliday(0);//不跳过节假日
+            }
         });
     }
 
     /**
-     * 获取老师的课程时间数据
+     * 获取老师未开始、进行中的课程
      *
      * @param teacherId 老师id
      * @param startDate 开始时间
      * @param endDate   结束时间
-     * @return key:日期-年月日 value:课程时间-开始时间,结束时间
+     * @return 课程列表
      */
     private List<CourseSchedule> getTeacherCourseTime(Long teacherId, String startDate, String endDate) {
         //未开始、进行中的课程
@@ -533,9 +540,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      *
      * @param teacherId 老师id
      * @param studentId 学员id
+     * @param startDate 开始日期
+     * @param endDate   结束日期
      */
     private Map<String, List<CourseTimeEntity>> getAllPracticeCourseTime(Long teacherId, Long studentId, String startDate, String endDate) {
-        //获取老师的课程时间数据
+        //获取老师未开始、进行中的课程
         List<CourseSchedule> courseList = getTeacherCourseTime(teacherId, startDate, endDate);
         if (CollectionUtils.isEmpty(courseList)) {
             courseList = new ArrayList<>();
@@ -837,7 +846,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
         String orderNo = orderReqInfo.getOrderNo();
         scheduleDto.setType(CourseScheduleEnum.PRACTICE.getCode());
-        scheduleDto.setStatus(CourseGroupEnum.NOT_SALE.getCode());
+        scheduleDto.setStatus(CourseGroupEnum.ING.getCode());
         scheduleDto.setMixStudentNum(1);
         scheduleDto.setStudentId(studentId);
 
@@ -1047,15 +1056,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 Map<Long, String> teacherReceivers = new HashMap<>();
                 teacherReceivers.put(info.getTeacherId(), info.getPhone());
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.NOT_EVALUATE_STUDENT_PRACTICE,
-                                                   teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
-                                                   info.getRepliedNum(),info.getDecorateNum());
+                        teacherReceivers, null, 0, null, ClientEnum.TEACHER.getCode(),
+                        info.getRepliedNum(), info.getDecorateNum());
             } catch (Exception e) {
-                log.warn("老师当日陪练课未评价/布置作业消息发送失败,{}",e.getMessage());
+                log.warn("老师当日陪练课未评价/布置作业消息发送失败,{}", e.getMessage());
             }
-
         }
-
-
     }
 
     /**

+ 98 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/HomeServiceImpl.java

@@ -1,23 +1,26 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.HomeDao;
 import com.yonge.cooleshow.biz.dal.dto.req.TotalReq;
-import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.HomeService;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
+import com.yonge.cooleshow.biz.dal.vo.CourseHomeVo;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalStudent;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeTotalTeacher;
 import com.yonge.cooleshow.biz.dal.vo.res.HomeUserToDoNum;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.toolset.base.exception.BizException;
-import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * @Author: liweifan
@@ -27,6 +30,8 @@ import java.util.List;
 public class HomeServiceImpl implements HomeService {
     @Autowired
     private HomeDao baserMapper;
+    @Autowired
+    private CourseScheduleService courseScheduleService;
 
     @Override
     public HomeUserToDoNum getUserToDoNum() {
@@ -34,6 +39,7 @@ public class HomeServiceImpl implements HomeService {
         userToDoNum.setEntryNum(null == userToDoNum.getEntryNum() ? 0 : userToDoNum.getEntryNum());
         userToDoNum.setMusicianNum(null == userToDoNum.getMusicianNum() ? 0 : userToDoNum.getMusicianNum());
         userToDoNum.setMusicNum(null == userToDoNum.getMusicNum() ? 0 : userToDoNum.getMusicNum());
+        userToDoNum.setVideoCourseNum(null == userToDoNum.getVideoCourseNum() ? 0 : userToDoNum.getVideoCourseNum());
         return userToDoNum;
     }
 
@@ -105,4 +111,90 @@ public class HomeServiceImpl implements HomeService {
         total.setInfoList(totalList);
         return HttpResponseResult.succeed(total);
     }
+
+    /**
+     * 获取首页课程数据
+     * <p>未完成  未开始&进行中
+     * <p>已完成  已完成课程
+     *
+     * @param param 传入参数
+     *              <p> - dateTime  如果查询年数据 yyyy   如果查询月数据 yyyy-mm
+     *              <p> - type 类型  PRACTICE陪练课  LIVE直播课
+     *              <p> - timeType 时间类型 MONTH、月度 YEAR
+     */
+    public CourseHomeVo queryCourseHomeData(Map<String, Object> param) {
+        CourseScheduleEnum.existCourseType(WrapperUtil.toStr(param, "type"), "课程类型参数错误");
+        String dateTimeStr = WrapperUtil.toStr(param, "dateTime", "查询时间不能为空!");
+        String timeType = WrapperUtil.toStr(param, "timeType", "查询时间不类型不能为空!");
+        //按年查询true  按月查询false
+        boolean isYear = timeType.equals("YEAR");
+        //获取年
+        String[] split = dateTimeStr.split("-");
+        int year = Integer.parseInt(split[0]);
+        //获取月
+        int month = isYear ? 1 : Integer.parseInt(split[1]);
+        LocalDate firstDate;
+        LocalDate endDate;
+        CourseHomeVo result = new CourseHomeVo();
+        CourseScheduleDao courseScheduleServiceDao = courseScheduleService.getDao();
+        firstDate = LocalDate.of(year, month, 1);
+        //获取开始时间
+        if (isYear) {
+            //查询当年最后一天
+            endDate = firstDate.with(TemporalAdjusters.lastDayOfYear());
+        } else {
+            //查询当月最后一天
+            endDate = firstDate.with(TemporalAdjusters.lastDayOfMonth());
+        }
+        param.put("startDate", firstDate);
+        param.put("endDate", endDate);
+
+        //查询数据
+        List<CourseHomeVo.CourseHomeInfoVo> courseYearInfoList;
+        if (isYear) {
+            courseYearInfoList = courseScheduleServiceDao.queryCourseHomeOfYear(param);
+        } else {
+            courseYearInfoList = courseScheduleServiceDao.queryCourseHomeOfMonth(param);
+        }
+        if (CollectionUtils.isEmpty(courseYearInfoList)) {
+            courseYearInfoList = new ArrayList<>();
+        }
+        Map<String, CourseHomeVo.CourseHomeInfoVo> collect = courseYearInfoList.stream()
+                .collect(Collectors.toMap(CourseHomeVo.CourseHomeInfoVo::getDate, Function.identity(), (key1, key2) -> key2));
+        //补全数据
+        while (firstDate.isBefore(endDate)) {
+            CourseHomeVo.CourseHomeInfoVo infoVo = collect.get(firstDate.toString());
+            if (Objects.isNull(infoVo)) {
+                infoVo = new CourseHomeVo.CourseHomeInfoVo();
+                if (isYear) {
+                    infoVo.setDate(firstDate.toString().substring(0, 7));
+                } else {
+                    infoVo.setDate(firstDate.toString());
+                }
+                infoVo.setDoneCount(0);
+                infoVo.setUndoneCount(0);
+                courseYearInfoList.add(infoVo);
+            } else {
+                if (isYear) {
+                    infoVo.setDate(firstDate.toString().substring(0, 7));
+                }
+            }
+            if (isYear) {
+                firstDate = firstDate.plusMonths(1L);
+            } else {
+                firstDate = firstDate.plusDays(1L);
+            }
+        }
+        result.setCourseHomeInfoList(courseYearInfoList);
+        //计算总数方法
+        Function<Function<CourseHomeVo.CourseHomeInfoVo, Integer>, Integer> reduceFunc = (c) -> result.getCourseHomeInfoList().stream()
+                .map(c)
+                .reduce(0, Integer::sum);
+        result.setTotalDoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getDoneCount));
+        result.setTotalUndoneCount(reduceFunc.apply(CourseHomeVo.CourseHomeInfoVo::getUndoneCount));
+        result.setTotalCount(result.getTotalDoneCount() + result.getTotalUndoneCount());
+        result.getCourseHomeInfoList().sort(Comparator.comparing(CourseHomeVo.CourseHomeInfoVo::getDate));
+        return result;
+    }
+
 }

+ 59 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -33,8 +33,7 @@ import java.util.function.BiFunction;
 import java.util.stream.Collectors;
 
 import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.*;
-import static com.yonge.cooleshow.common.constant.SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE;
-import static com.yonge.cooleshow.common.constant.SysConfigConstant.PRE_CREATE_LIVE_ROOM_MINUTE;
+import static com.yonge.cooleshow.common.constant.SysConfigConstant.*;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务实现类
@@ -340,6 +339,64 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     }
 
     /**
+     * 定时任务-清理过期的房间-陪练课
+     */
+    public void destroyExpiredPracticeRoom() {
+        //查询房间过期时间
+        String expiredMinuteStr = sysConfigService.findConfigValue(PRE_CREATE_PRACTICE_ROOM_MINUTE);
+        if (StringUtils.isEmpty(expiredMinuteStr)) {
+            log.info("roomDestroy>>>> 未查询到配置:{}", PRE_CREATE_PRACTICE_ROOM_MINUTE);
+            return;
+        }
+        Date now = new Date();
+        //查询已经开始并且没有删除及销毁的直播间
+        List<LiveRoom> list = this.list(Wrappers.<LiveRoom>lambdaQuery()
+                .eq(LiveRoom::getRoomState, 0)
+                .eq(LiveRoom::getLiveState, 1)
+                .eq(LiveRoom::getType, RoomTypeEnum.PRACTICE.getCode())
+                .le(LiveRoom::getLiveEndTime, now));
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        list.forEach(room -> {
+            Date expiredDate = DateUtil.addMinutes(room.getLiveEndTime(), Integer.parseInt(expiredMinuteStr));
+            //当前时间 大于(结束播时间 + 设置的过期分钟数)
+            if (now.getTime() >= expiredDate.getTime()) {
+                //删除房间
+                destroyLiveRoom(room.getRoomUid());
+                //查询老师分润表
+                CourseScheduleTeacherSalary salary = courseScheduleTeacherSalaryService.getOne(Wrappers.<CourseScheduleTeacherSalary>lambdaQuery()
+                        .eq(CourseScheduleTeacherSalary::getCourseScheduleId, room.getCourseId())
+                );
+                if (Objects.isNull(salary)) {
+                    return;
+                }
+                //查询该学生及课程id 对应的支付订单号
+                CourseScheduleStudentPayment payment = courseScheduleStudentPaymentService.getOne(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+                        .eq(CourseScheduleStudentPayment::getCourseId, room.getCourseId())
+                        .eq(CourseScheduleStudentPayment::getUserId, salary.getStudentId())
+                );
+                if (Objects.isNull(payment)) {
+                    return;
+                }
+                //获取教师课酬写入到金额变更表
+                UserAccountRecordDto userAccountRecord = new UserAccountRecordDto();
+                userAccountRecord.setUserId(room.getSpeakerId());
+                userAccountRecord.setInOrOut(InOrOutEnum.IN);
+                userAccountRecord.setBizType(AccountBizTypeEnum.PRACTICE);
+                userAccountRecord.setBizId(room.getCourseId());
+                userAccountRecord.setBizName(room.getRoomTitle());
+                userAccountRecord.setTransAmount(salary.getActualSalary());//扣除手续费后所得金额
+                userAccountRecord.setOrderNo(payment.getOrderNo());
+                userAccountService.accountChange(userAccountRecord);
+                //修改老师课酬表
+                salary.setStatus(TeacherSalaryEnum.COMPLETE.getCode());
+                courseScheduleTeacherSalaryService.updateById(salary);
+            }
+        });
+    }
+
+    /**
      * 销毁房间-聊天室
      *
      * @param roomId 房间Uid

+ 0 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java

@@ -118,7 +118,6 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
         //会员购买消息推送
         authSend(studentVo.getUserId(), studentVo.getPhone(), DateUtil.format(vipCardRecord.getEndTime(), DateUtil.DEFAULT_PATTERN));
-
     }
 
 

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java

@@ -267,6 +267,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
             musicSheet.setAuditStatus(param.getAuthStatus());
             musicSheet.setUpdateBy(userId);
             musicSheet.setUpdateTime(new Date());
+            if (AuthStatusEnum.PASS.getCode().equals(param.getAuthStatus().getCode())) {
+                musicSheet.setState(YesOrNoEnum.YES);
+            }
             flag =  this.updateById(musicSheet);
         }
 
@@ -543,6 +546,15 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
 
     }
 
+    @Override
+    public HomeMusicSheetVo getMusicSheetHome() {
+
+        HomeMusicSheetVo homeMusicSheetVo = baseMapper.selectMusicNum();
+        homeMusicSheetVo.setMusicSheetSmallList(baseMapper.selectPayMusicSheet());
+
+        return homeMusicSheetVo;
+    }
+
     private SysUser getSysUser(Long userId) {
         return Optional.ofNullable(userId)
                        .map(sysUserFeignService::queryUserById)

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentSearch;
 import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
+import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.vo.*;
@@ -24,6 +25,7 @@ import org.springframework.util.CollectionUtils;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -76,4 +78,16 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     public Integer setSubject(Long id, String subjectIds) {
         return baseMapper.setSubject(id, subjectIds);
     }
+
+    @Override
+    public List<Subject> querySubjectItem(Long id) {
+        List<Subject> subjectList = (List<Subject>) redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(id)).get();
+        if (null == subjectList) {
+            subjectList = baseMapper.querySubjectItem(id);
+            redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(id))
+                    .set(subjectList, CacheNameEnum.STUDENT_SUBJECT_ITEM.getDuration().toHours(),
+                            TimeUnit.HOURS);
+        }
+        return subjectList;
+    }
 }

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio