Browse Source

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

liujunchi 3 years ago
parent
commit
0ffdec66f8
39 changed files with 742 additions and 387 deletions
  1. 9 2
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/TeacherFeignService.java
  2. 9 4
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/TeacherFeignServiceFallback.java
  3. 4 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java
  4. 115 112
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java
  5. 87 0
      cooleshow-resource/pom.xml
  6. 29 0
      cooleshow-resource/src/main/java/com/yonge/cooleshow/resource/ResourceApplication.java
  7. 12 0
      cooleshow-resource/src/main/resources/bootstrap-prod.yml
  8. 22 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/DestroyExpiredLiveRoomTask.java
  9. 22 22
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/TeacherSalaryTask.java
  10. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/CourseScheduleDao.java
  11. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoomVideo.java
  12. 1 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CourseScheduleEnum.java
  13. 2 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TeacherSalaryEnum.java
  14. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CourseScheduleService.java
  15. 11 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  16. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomVideoService.java
  17. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  18. 28 22
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  19. 4 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  20. 57 108
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  21. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomVideoServiceImpl.java
  22. 13 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java
  23. 36 33
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  24. 19 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  25. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java
  26. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java
  27. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java
  28. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java
  29. 33 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  30. 4 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml
  31. 2 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  32. 18 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  33. 13 13
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java
  34. 56 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomVideoController.java
  35. 17 7
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java
  36. 12 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/LiveRoomVideoController.java
  37. 0 3
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java
  38. 24 5
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/core/service/impl/PaymentClientImpl.java
  39. 11 8
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java

+ 9 - 2
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/TeacherFeignService.java

@@ -27,6 +27,13 @@ public interface TeacherFeignService {
     HttpResponseResult<Object> opsCourseGroup();
 
     /**
+     * 定时任务-销毁房间-直播间
+     * 每分钟执行一次
+     */
+    @GetMapping(value = "/task/destroyExpiredLiveRoom")
+    HttpResponseResult<Object> destroyExpiredLiveRoom();
+
+    /**
      * @Description: 课程提醒(每晚9点)
      * @Author: cy
      * @Date: 2022/5/6
@@ -47,6 +54,6 @@ public interface TeacherFeignService {
      * @Author: cy
      * @Date: 2022/5/24
      */
-//    @GetMapping("/task/teacherSalary")
-//    HttpResponseResult<Object> teacherSalary();
+    @GetMapping("/task/teacherSalary")
+    HttpResponseResult<Object> teacherSalary();
 }

+ 9 - 4
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/fallback/TeacherFeignServiceFallback.java

@@ -18,6 +18,11 @@ public class TeacherFeignServiceFallback implements TeacherFeignService {
     }
 
     @Override
+    public HttpResponseResult<Object> destroyExpiredLiveRoom() {
+        return null;
+    }
+
+    @Override
     public HttpResponseResult<Object> courseRemind() {
         return null;
     }
@@ -27,8 +32,8 @@ public class TeacherFeignServiceFallback implements TeacherFeignService {
         return null;
     }
 
-//    @Override
-//    public HttpResponseResult<Object> teacherSalary() {
-//        return null;
-//    }
+    @Override
+    public HttpResponseResult<Object> teacherSalary() {
+        return null;
+    }
 }

+ 4 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/AppConstant.java

@@ -59,4 +59,8 @@ public interface AppConstant {
      * 网络教室
      */
     String APPLICATION_CLASSROOM = "classroom";
+    /**
+     * 资源服务
+     */
+    String APPLICATION_RESOURCE = "resource";
 }

+ 115 - 112
cooleshow-common/src/main/java/com/yonge/cooleshow/common/controller/BaseController.java

@@ -33,91 +33,94 @@ import com.yonge.toolset.utils.http.HttpUtil;
 @ControllerAdvice
 public class BaseController {
 
-	private final static Logger logger = LoggerFactory.getLogger(BaseController.class);
-
-	public static <T> HttpResponseResult<T> succeed(T object) {
-		return getResponseData(true, HttpStatus.OK, object, "");
-	}
-
-	public static <T> HttpResponseResult<T> succeed() {
-		return getResponseData(true, HttpStatus.OK, null, "");
-	}
-
-	public static <T> HttpResponseResult<T> succeedData(T obj) {
-		return getResponseData(true, HttpStatus.OK, obj, "操作成功");
-	}
-
-	public static <T> HttpResponseResult<T> warned(String message) {
-		return failed(HttpStatus.MULTI_STATUS, message);
-	}
-
-	public static <T> HttpResponseResult<T> failed() {
-		return failed("");
-	}
-
-	public static <T> HttpResponseResult<T> failed(String msg) {
-		return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
-	}
-
-	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
-		return getResponseData(false, statusCode, null, msg);
-	}
-	public static <T> HttpResponseResult<T> failed(int code, String msg) {
-		return getResponseData(false, code, null, msg);
-	}
-
-	public static <T> HttpResponseResult<T> status(boolean flag) {
-			return flag ? succeed() : failed("操作失败");
-	}
-
-	public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
-		return getResponseData(false, statusCode, data, msg);
-	}
-
-	private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
-		HttpResponseResult<T> obj = new HttpResponseResult<T>();
-		obj.setStatus(status);
-		obj.setCode(statusCode.value());
-		obj.setData(data);
-		obj.setMsg(message);
-		return obj;
-	}
-
-	private static <T> HttpResponseResult<T> getResponseData(boolean status, int code, T data, String message) {
-		HttpResponseResult<T> obj = new HttpResponseResult<T>();
-		obj.setStatus(status);
-		obj.setCode(code);
-		obj.setData(data);
-		obj.setMsg(message);
-		return obj;
-	}
-
-	/**
-	 * 处理一般异常
-	 *
-	 * @param ex
-	 * @param request
-	 * @return
-	 */
-	@ExceptionHandler(Exception.class)
-	public HttpResponseResult<String> handleException(Exception ex, HttpServletRequest request) {
-		Throwable e = ExceptionUtils.getRootCause(ex);
-		if (e == null) {
-			e = ex;
-		}
-		logger.error("System Error", ex);
-		// return failed(e.getMessage());
-		if (e instanceof BizException || e instanceof ThirdpartyException) {
-			if(e.getMessage().equals("205")){
-				return failed(HttpStatus.RESET_CONTENT,e.getMessage());
-			}
-			return failed(e.getMessage());
-		} else if (e instanceof AccessDeniedException) {
-			return failed("禁止访问");
-		}else if(e instanceof BindException){
-			String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
-			return failed(errors);
-		} else if(e instanceof MethodArgumentNotValidException){
+    private final static Logger logger = LoggerFactory.getLogger(BaseController.class);
+
+    public static <T> HttpResponseResult<T> succeed(T object) {
+        return getResponseData(true, HttpStatus.OK, object, "");
+    }
+
+    public static <T> HttpResponseResult<T> succeed() {
+        return getResponseData(true, HttpStatus.OK, null, "");
+    }
+
+    public static <T> HttpResponseResult<T> succeedData(T obj) {
+        return getResponseData(true, HttpStatus.OK, obj, "操作成功");
+    }
+
+    public static <T> HttpResponseResult<T> warned(String message) {
+        return failed(HttpStatus.MULTI_STATUS, message);
+    }
+
+    public static <T> HttpResponseResult<T> failed() {
+        return failed("");
+    }
+
+    public static <T> HttpResponseResult<T> failed(String msg) {
+        return failed(HttpStatus.INTERNAL_SERVER_ERROR, msg);
+    }
+
+    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, String msg) {
+        return getResponseData(false, statusCode, null, msg);
+    }
+
+    public static <T> HttpResponseResult<T> failed(int code, String msg) {
+        return getResponseData(false, code, null, msg);
+    }
+
+    public static <T> HttpResponseResult<T> status(boolean flag) {
+        return flag ? succeed() : failed("操作失败");
+    }
+
+    public static <T> HttpResponseResult<T> failed(HttpStatus statusCode, T data, String msg) {
+        return getResponseData(false, statusCode, data, msg);
+    }
+
+    private static <T> HttpResponseResult<T> getResponseData(boolean status, HttpStatus statusCode, T data, String message) {
+        HttpResponseResult<T> obj = new HttpResponseResult<T>();
+        obj.setStatus(status);
+        obj.setCode(statusCode.value());
+        obj.setData(data);
+        obj.setMsg(message);
+        return obj;
+    }
+
+    private static <T> HttpResponseResult<T> getResponseData(boolean status, int code, T data, String message) {
+        HttpResponseResult<T> obj = new HttpResponseResult<T>();
+        obj.setStatus(status);
+        obj.setCode(code);
+        obj.setData(data);
+        obj.setMsg(message);
+        return obj;
+    }
+
+    /**
+     * 处理一般异常
+     *
+     * @param ex
+     * @param request
+     * @return
+     */
+    @ExceptionHandler(Exception.class)
+    public HttpResponseResult<String> handleException(Exception ex, HttpServletRequest request) {
+        Throwable e = ExceptionUtils.getRootCause(ex);
+        if (e == null) {
+            e = ex;
+        }
+        logger.error("System Error", ex);
+        // return failed(e.getMessage());
+        if (e instanceof BizException || e instanceof ThirdpartyException) {
+            if (e.getMessage().equals("205")) {
+                return failed(HttpStatus.RESET_CONTENT, e.getMessage());
+            }
+            return failed(e.getMessage());
+        } else if (e instanceof AccessDeniedException) {
+            return failed("禁止访问");
+        } else if (e instanceof IllegalMonitorStateException) {
+            return failed("操作失败");
+        } else if (e instanceof BindException) {
+            String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
+            return failed(errors);
+        } else if (e instanceof MethodArgumentNotValidException) {
             MethodArgumentNotValidException validException = (MethodArgumentNotValidException) ex;
             String errorMsg = validException.getBindingResult()
                     .getFieldErrors()
@@ -126,34 +129,34 @@ public class BaseController {
                     .collect(Collectors.joining());
             return failed(errorMsg);
         }
-		try {
-			Map<String,Object> paramMap = new HashMap<>(2);
-			JSONObject jsonObject = new JSONObject();
-			jsonObject.put("content","系统繁忙请及时处理: " + request.getRequestURL() + "   " + e);
-			paramMap.put("text",jsonObject.toJSONString());
-			paramMap.put("msgtype","text");
-			Map<String,String> headers = new HashMap<>(1);
-			headers.put("Content-Type","application/json");
-			HttpUtil.postForHttps(dingTalkRobotsSecurityParam(),JSON.toJSONString(paramMap),headers);
-		}catch (Exception exception){
-			logger.error("System Error", exception);
-		}
+        try {
+            Map<String, Object> paramMap = new HashMap<>(2);
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("content", "系统繁忙请及时处理: " + request.getRequestURL() + "   " + e);
+            paramMap.put("text", jsonObject.toJSONString());
+            paramMap.put("msgtype", "text");
+            Map<String, String> headers = new HashMap<>(1);
+            headers.put("Content-Type", "application/json");
+            HttpUtil.postForHttps(dingTalkRobotsSecurityParam(), JSON.toJSONString(paramMap), headers);
+        } catch (Exception exception) {
+            logger.error("System Error", exception);
+        }
         if (StringUtils.isNotBlank(e.getMessage())) {
             return failed(e.getMessage());
         }
-		return failed("系统繁忙");
-	}
-
-	public String dingTalkRobotsSecurityParam() throws Exception{
-		Long timestamp = System.currentTimeMillis();
-		String secret = "SEC36b17ac2f4e201f962042fb05f4b6b827719bcf9b6bb7b672e61f99c752eb693";
-		String stringToSign = timestamp + "\n" + secret;
-		Mac mac = Mac.getInstance("HmacSHA256");
-		mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
-		byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
-		String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
-		StringBuffer sb = new StringBuffer("https://api.dingtalk.com/robot/send?access_token=22d7b3b54ea7f1633c640dfdf17083d0731c3757719a84bd333740a8b18eb035&timestamp=");
-		sb.append(timestamp).append("&sign=").append(sign);
-		return sb.toString();
-	}
+        return failed("系统繁忙");
+    }
+
+    public String dingTalkRobotsSecurityParam() throws Exception {
+        Long timestamp = System.currentTimeMillis();
+        String secret = "SEC36b17ac2f4e201f962042fb05f4b6b827719bcf9b6bb7b672e61f99c752eb693";
+        String stringToSign = timestamp + "\n" + secret;
+        Mac mac = Mac.getInstance("HmacSHA256");
+        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
+        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
+        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
+        StringBuffer sb = new StringBuffer("https://api.dingtalk.com/robot/send?access_token=22d7b3b54ea7f1633c640dfdf17083d0731c3757719a84bd333740a8b18eb035&timestamp=");
+        sb.append(timestamp).append("&sign=").append(sign);
+        return sb.toString();
+    }
 }

+ 87 - 0
cooleshow-resource/pom.xml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>cooleshow</artifactId>
+        <groupId>com.yonge.cooleshow</groupId>
+        <version>1.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>cooleshow-bbs</artifactId>
+    <version>1.0</version>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>cooleshow-common</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-security</artifactId>
+        </dependency>
+
+        <!-- swagger-spring-boot -->
+        <dependency>
+            <groupId>com.spring4all</groupId>
+            <artifactId>swagger-spring-boot-starter</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-mybatis</artifactId>
+            <version>${project.toolset.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-feign</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.cooleshow</groupId>
+            <artifactId>cooleshow-common</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>thirdparty-component</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-mybatis</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yonge.toolset</groupId>
+            <artifactId>toolset-emoji</artifactId>
+            <version>1.0</version>
+        </dependency>
+
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.0.7.1</version>
+        </dependency>
+    </dependencies>
+</project>

+ 29 - 0
cooleshow-resource/src/main/java/com/yonge/cooleshow/resource/ResourceApplication.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.bbs;
+
+import com.spring4all.swagger.EnableSwagger2Doc;
+import com.yonge.cooleshow.common.constant.AppConstant;
+import com.yonge.toolset.base.BaseApplication;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients("com.yonge.cooleshow")
+@MapperScan(basePackages = {"com.yonge.cooleshow.resource.dao"})
+@ComponentScan(basePackages = {
+        "com.yonge.cooleshow",
+        "com.yonge.toolset"
+})
+@Configuration
+@EnableSwagger2Doc
+public class ResourceApplication {
+    public static void main(String[] args) {
+        BaseApplication.run(AppConstant.APPLICATION_RESOURCE,ResourceApplication.class, args);
+    }
+
+}

+ 12 - 0
cooleshow-resource/src/main/resources/bootstrap-prod.yml

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

+ 22 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/DestroyExpiredLiveRoomTask.java

@@ -0,0 +1,22 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.TeacherFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/25 10:30
+ */
+@Service
+public class DestroyExpiredLiveRoomTask extends BaseTask {
+    @Autowired
+    private TeacherFeignService teacherFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        teacherFeignService.destroyExpiredLiveRoom();
+    }
+}

+ 22 - 22
cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/TeacherSalaryTask.java

@@ -1,22 +1,22 @@
-//package com.yonge.cooleshow.task.jobs;
-//
-//import com.yonge.cooleshow.api.feign.TeacherFeignService;
-//import com.yonge.cooleshow.task.core.BaseTask;
-//import com.yonge.cooleshow.task.core.TaskException;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Service;
-//
-///**
-// * @Author: cy
-// * @Date: 2022/5/24
-// */
-//@Service
-//public class TeacherSalaryTask extends BaseTask {
-//    @Autowired
-//    private TeacherFeignService teacherFeignService;
-//
-//    @Override
-//    public void execute() throws TaskException {
-//        teacherFeignService.teacherSalary();
-//    }
-//}
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.api.feign.TeacherFeignService;
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Author: cy
+ * @Date: 2022/5/24
+ */
+@Service
+public class TeacherSalaryTask extends BaseTask {
+    @Autowired
+    private TeacherFeignService teacherFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        teacherFeignService.teacherSalary();
+    }
+}

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.PracticeScheduleDto;
+import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.dto.search.HomeworkSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MyCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.PracticeTeacherSearch;
@@ -231,4 +232,7 @@ public interface CourseScheduleDao extends BaseMapper<CourseSchedule> {
 
     //查琴房课列表
     List<PianoClassVo> queryPianoClass(IPage page,@Param("param") MyCourseSearch search);
+
+    //查询待结算课程
+    List<UserAccountRecordDto> selectWaitCourse(String day);
 }

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

@@ -51,7 +51,7 @@ public class LiveRoomVideo implements Serializable {
     private Date endTime;
 
     @TableField("type")
-    @ApiModelProperty(value = "1: 录制开始;2: 录制切片;3: 录制结束;4: 文件上传-融云回调完成;0开始录制  1录制结束 2融云回调完成")
+    @ApiModelProperty(value = "1: 录制开始;2: 录制切片;3: 录制结束;4: 文件上传-融云回调完成")
     private Integer type;
 
     @TableField("created_time_")

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

@@ -42,13 +42,7 @@ public enum CourseScheduleEnum implements BaseEnum<String, CourseScheduleEnum> {
         CourseScheduleEnum[] values = {PRACTICE, LIVE, PIANO_ROOM_CLASS};
         existCourse(values, code, errMsg);
         //返回枚举对象
-        if (code.equals(CourseScheduleEnum.PRACTICE.getCode())) {
-            return CourseScheduleEnum.PRACTICE;
-        } else if (code.equals(CourseScheduleEnum.LIVE.getCode())) {
-            return CourseScheduleEnum.LIVE;
-        } else {
-            return CourseScheduleEnum.PIANO_ROOM_CLASS;
-        }
+        return CourseScheduleEnum.valueOf(code);
     }
 
     /**

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/TeacherSalaryEnum.java

@@ -8,9 +8,10 @@ import com.yonge.toolset.base.enums.BaseEnum;
  */
 public enum TeacherSalaryEnum implements BaseEnum<String, TeacherSalaryEnum> {
     //未上课-还未开始上课等待上课结束后结算
-    NOT_START("未结算"),
+    NOT_START("未开始"),
     //已结算-已经结算完成
     COMPLETE("已结算"),
+    WAIT("未结算"),
     //已取消-学生发起退款等等其他操作
     CANCEL("已取消");
 

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

@@ -236,6 +236,8 @@ public interface CourseScheduleService extends IService<CourseSchedule> {
 
     void scheduleTask();
 
+    void teacherSalaryTask();
+
     PianoRoomTimeVo selectRemainTime(Long teacherId);
 
     PageInfo<CourseStudentVo> selectStudent(Map<String, Object> param);

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

@@ -2,9 +2,11 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
-import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.vo.RoomVo;
-import org.springframework.transaction.annotation.Transactional;
+import com.yonge.cooleshow.biz.dal.entity.ImRoomMessage;
+import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
+import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
+import com.yonge.toolset.base.page.PageInfo;
 
 import java.util.List;
 import java.util.Map;
@@ -20,11 +22,14 @@ public interface LiveRoomService extends IService<LiveRoom> {
     LiveRoomDao getDao();
 
     /**
-     * 根据房间uid查询房间信息
+     * 分页查询当前用户关联的房间信息
      *
-     * @param roomUid 房间uid
+     * @param param 参数
+     *              <p>roomType 房间类型  LIVE-直播课  TEMP-临时直播间
+     *              <p>page 页数
+     *              <p>rows 每页数量
      */
-    RoomVo queryRoomInfo(String roomUid);
+    PageInfo<LiveRoom> queryPageRoom(Map<String, Object> param);
 
     /**
      * 校验房间信息,及个人信息
@@ -60,11 +65,6 @@ public interface LiveRoomService extends IService<LiveRoom> {
     void destroyLiveRoom(String roomUId);
 
     /**
-     * 定时任务-清理过期的房间-陪练课
-     */
-    void destroyExpiredPracticeRoom();
-
-    /**
      * 创建临时房间-直播间
      */
     String createTempLiveRoom(Map<String, Object> param);

+ 9 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomVideoService.java

@@ -5,6 +5,8 @@ import com.yonge.cooleshow.biz.dal.dao.LiveRoomVideoDao;
 import com.yonge.cooleshow.biz.dal.entity.LiveRoomVideo;
 import com.yonge.cooleshow.biz.dal.entity.RecordNotify;
 
+import java.util.List;
+
 /**
  * 直播视频记录(LiveRoomVideo)表服务接口
  *
@@ -15,6 +17,13 @@ public interface LiveRoomVideoService extends IService<LiveRoomVideo> {
 
     LiveRoomVideoDao getDao();
 
+    /**
+     * 查询对应房间的录像
+     *
+     * @param roomUid 房间uid
+     */
+    List<LiveRoomVideo> queryVideo(String roomUid);
+
     void recordSync(RecordNotify recordNotify);
 }
 

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

@@ -44,7 +44,7 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/5/6 14:49
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    UserOrderPayment onlyClosePayment(String orderNo, String reason);
+    Boolean onlyClosePayment(String orderNo, String reason);
     /***
      * 关闭付款单
      * @author liweifan
@@ -53,7 +53,7 @@ public interface UserOrderPaymentService extends IService<UserOrderPayment> {
      * @updateTime 2022/5/6 14:49
      * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
      */
-    UserOrderPayment closePaymentAndReqOpen(String orderNo, String reason);
+    Boolean closePaymentAndReqOpen(String orderNo, String reason);
 
 
     /***

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

@@ -1044,7 +1044,9 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         } catch (InterruptedException e) {
             throw new BizException("创建陪练课失败:{}", e.getMessage());
         } finally {
-            lock.unlock();
+            if (lock.isLocked() && lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
         }
         return HttpResponseResult.failed();
     }
@@ -1180,7 +1182,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 .eq(CourseSchedule::getStatus, CourseScheduleEnum.NOT_START)
                 .eq(CourseSchedule::getType, CourseScheduleEnum.PRACTICE));
         if (ObjectUtil.isEmpty(schedule)) {
-            throw new BizException("无法调整该课程");
+            throw new BizException("无法调整该课程,课程不存在");
         }
 
         //校验系统配置上下课时间
@@ -1189,7 +1191,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         Date s = DateUtil.strToDate(DateUtil.dateToString(classDate) + " " + star + ":00");
         Date e = DateUtil.strToDate(DateUtil.dateToString(classDate) + " " + end + ":00");
         if (startTime.before(s) || endTime.after(e)) {
-            throw new BizException("无法调整该课程");
+            throw new BizException("调整时间必须在{}到{}之间", star, end);
         }
 
         //查询是否有人购买
@@ -1617,18 +1619,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
                 //老师课酬状态改为已完成
                 courseScheduleTeacherSalaryService.update(null, Wrappers.<CourseScheduleTeacherSalary>lambdaUpdate()
-                        .set(CourseScheduleTeacherSalary::getStatus, CourseScheduleEnum.COMPLETE.getCode())
+                        .set(CourseScheduleTeacherSalary::getStatus, TeacherSalaryEnum.WAIT.getCode())
                         .set(CourseScheduleTeacherSalary::getSettlementTime, new Date())
                         .in(CourseScheduleTeacherSalary::getCourseScheduleId, practiceList.stream().map(CourseScheduleStudentVo::getCourseId).collect(Collectors.toList())));
 
-                //获取教师课酬写入到金额变更表
+                //清除缓存
                 for (CourseScheduleStudentVo practice : practiceList) {
-                    userAccountService.accountChange(
-                            new UserAccountRecordDto(practice.getTeacherId(), practice.getActualSalary()
-                                    , InOrOutEnum.IN, AccountBizTypeEnum.PRACTICE, practice.getCourseId(),
-                                    practice.getGroupName(), practice.getOrderNo())
-                    );
-
                     //清除学生统计缓存
                     redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(practice.getStudentId())).delete();
                     //清除老师统计缓存
@@ -1696,17 +1692,27 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
      * @Author: cy
      * @Date: 2022/5/24
      */
-//    @Transactional(rollbackFor = Exception.class)
-//    public void teacherSalaryTask() {
-//        //课程结算日期(天)
-//        Integer settlementDay = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.COURSE_SALARY_SETTLEMENT_DAY));
-//        //获取n天前日期
-//        String day = DateUtil.getDayAgoOrAftString(-settlementDay);
-//        //获取小于n天前所有课程id
-//        List<Long> idList = baseMapper.selectIdList(day);
-//        //更新老师课酬表
-//        baseMapper.updateTeacherSalary(idList);
-//    }
+    @Transactional(rollbackFor = Exception.class)
+    public void teacherSalaryTask() {
+        //课程结算日期(天)
+        Integer settlementDay = Integer.valueOf(sysConfigService.findConfigValue(SysConfigConstant.COURSE_SALARY_SETTLEMENT_DAY));
+        //获取n天前日期
+        String day = DateUtil.getDayAgoOrAftString(-settlementDay);
+
+        List<UserAccountRecordDto> list = baseMapper.selectWaitCourse(day);
+        if (CollectionUtils.isNotEmpty(list)){
+            for (UserAccountRecordDto dto : list) {
+                userAccountService.accountChange(dto);
+            }
+
+            Set<Long> bizIds = list.stream().map(UserAccountRecordDto::getBizId).collect(Collectors.toSet());
+            courseScheduleTeacherSalaryService.update(null, Wrappers.<CourseScheduleTeacherSalary>lambdaUpdate()
+                    .set(CourseScheduleTeacherSalary::getStatus, TeacherSalaryEnum.COMPLETE.getCode())
+                    .set(CourseScheduleTeacherSalary::getSettlementTime, new Date())
+                    .in(CourseScheduleTeacherSalary::getCourseScheduleId,bizIds));
+        }
+
+    }
 
     /**
      * @Description: 查询琴房剩余时长、冻结时长、统计学员人数

+ 4 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java

@@ -56,10 +56,10 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
             List<BasicUserInfo> basicUserInfos = basicUserInfoMap.get(studentId);
             if(CollectionUtils.isNotEmpty(basicUserInfos)){
                 BasicUserInfo info = basicUserInfos.get(0);
-                teacherFriend.setFriendAvatar(basicUserInfo.getAvatar());
-                teacherFriend.setFriendNickname(basicUserInfo.getUsername());
-                studentFriend.setFriendAvatar(info.getAvatar());
-                studentFriend.setFriendNickname(info.getUsername());
+                teacherFriend.setFriendAvatar(info.getAvatar());
+                teacherFriend.setFriendNickname(info.getUsername());
+                studentFriend.setFriendAvatar(basicUserInfo.getAvatar());
+                studentFriend.setFriendNickname(basicUserInfo.getUsername());
             }
             teacherFriend.setFriendId(studentId);
             teacherFriend.setUserId(teacherId);

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

@@ -1,21 +1,26 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.beust.jcommander.internal.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.LiveRoomDao;
-import com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto;
 import com.yonge.cooleshow.biz.dal.entity.*;
-import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.RoomTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.TeacherSalaryEnum;
 import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.support.IMHelper;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
-import com.yonge.cooleshow.biz.dal.vo.RoomVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.base.page.PageInfo;
+import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -24,7 +29,6 @@ import org.redisson.api.RMap;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -36,7 +40,8 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.yonge.cooleshow.biz.dal.constant.LiveRoomConstant.*;
-import static com.yonge.cooleshow.common.constant.SysConfigConstant.*;
+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;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务实现类
@@ -61,8 +66,6 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     @Autowired
     private SysConfigService sysConfigService;
     @Autowired
-    private UserAccountService userAccountService;
-    @Autowired
     private UserOrderService userOrderService;
     @Autowired
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
@@ -88,23 +91,23 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     }
 
     /**
-     * 根据房间uid查询房间信息
+     * 分页查询当前用户关联的房间信息
      *
-     * @param roomUid 房间uid
+     * @param param 参数
+     *              <p>roomType 房间类型  LIVE-直播课  TEMP-临时直播间
+     *              <p>page 页数
+     *              <p>rows 每页数量
      */
     @Override
-    public RoomVo queryRoomInfo(String roomUid) {
-        LiveRoom liveRoom = this.getOne(Wrappers.<LiveRoom>lambdaQuery()
-                .eq(LiveRoom::getRoomUid, roomUid));
-        if (liveRoom == null) {
-            throw new BizException("房间不存在");
-        }
-        RoomVo roomVo = new RoomVo();
-        BeanUtils.copyProperties(liveRoom, roomVo);
-        roomVo.setSpeakerName(getSysUser(liveRoom.getSpeakerId()).getRealName());
-        roomVo.setLikeNum(getLike(roomUid));
-        roomVo.setLookNum(getNum.apply(this::getOnlineUserCache, roomUid));
-        return roomVo;
+    public PageInfo<LiveRoom> queryPageRoom(Map<String, Object> param) {
+        String roomType = WrapperUtil.toStr(param, "roomType");
+        Long userId = getSysUser().getId();
+        Page<LiveRoom> pageInfo = PageUtil.getPageInfo(param);
+        IPage<LiveRoom> page = this.page(pageInfo, Wrappers.<LiveRoom>lambdaQuery()
+                .eq(WrapperUtil.StrPredicate.test(roomType), LiveRoom::getType, roomType)
+                .eq(LiveRoom::getSpeakerId, userId)
+        );
+        return PageUtil.pageInfo(page);
     }
 
     /**
@@ -210,12 +213,21 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public String createTempLiveRoom(Map<String, Object> param) {
         //查询主讲人信息
         SysUser sysUser = getSysUser();
+        Long teacherId = sysUser.getId();
+        List<LiveRoom> liveRoomList = this.list(Wrappers.<LiveRoom>lambdaQuery()
+                .eq(LiveRoom::getSpeakerId, teacherId)
+                .eq(LiveRoom::getType, RoomTypeEnum.TEMP.getCode())
+                .eq(LiveRoom::getLiveState, 1)
+                .eq(LiveRoom::getRoomState, 0)
+        );
+        if (CollectionUtils.isNotEmpty(liveRoomList)) {
+            throw new BizException("当前有直播间未结束,无需创建直播!");
+        }
         String roomTitle = WrapperUtil.toStr(param, "roomTitle", "房间标题不能为空!");
         String liveRemark = WrapperUtil.toStr(param, "liveRemark", "直播间描述不能为空!");
         Integer liveTime = WrapperUtil.toInt(param, "liveTime", "请选择直播时长!");
         Date liveStartTime = new Date();
         Date liveEndTime = DateUtil.addMinutes(liveStartTime, liveTime);
-        Long teacherId = sysUser.getId();
         //当前时间有课程则不能开启直播
         boolean check = courseScheduleService.checkTeacherCourseTime(teacherId, liveStartTime, liveEndTime);
         if (check) {
@@ -233,7 +245,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         room.setSpeakerId(teacherId);
         room.setLiveStartTime(liveStartTime);
         room.setLiveEndTime(liveEndTime);
-        room.setLiveState(0);
+        room.setLiveState(1);
         room.setRoomState(0);
         room.setCreatedBy(teacherId);
         room.setCreatedTime(liveStartTime);
@@ -327,14 +339,18 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         List<LiveRoom> list = this.list(Wrappers.<LiveRoom>lambdaQuery()
                 .eq(LiveRoom::getRoomState, 0)
                 .eq(LiveRoom::getLiveState, 1)
-                .eq(LiveRoom::getType, RoomTypeEnum.LIVE.getCode())
                 .le(LiveRoom::getLiveEndTime, now));
         if (CollectionUtils.isEmpty(list)) {
             return;
         }
         list.forEach(room -> {
-            Date expiredDate = DateUtil.addMinutes(room.getLiveEndTime(), Integer.parseInt(expiredMinuteStr));
-            //当前时间 大于(结束播时间 + 设置的过期分钟数)
+            //直播间过期时间
+            Date expiredDate = room.getLiveEndTime();
+            if (room.getType().equals(RoomTypeEnum.LIVE.getCode())) {
+                //如果是直播课,那么结束时间 = 直播间结束时间 + 设置的过期分钟数
+                expiredDate = DateUtil.addMinutes(room.getLiveEndTime(), Integer.parseInt(expiredMinuteStr));
+            }
+            //当前时间 大于 直播间过期时间
             if (now.getTime() >= expiredDate.getTime()) {
                 destroyLiveRoom(room);
             }
@@ -362,93 +378,26 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         if (Objects.isNull(room)) {
             return;
         }
-        //查询老师分润表
-        List<CourseScheduleTeacherSalary> salaryList = courseScheduleTeacherSalaryService.list(Wrappers.<CourseScheduleTeacherSalary>lambdaQuery()
-                .eq(CourseScheduleTeacherSalary::getCourseScheduleId, room.getCourseId())
-        );
-        if (CollectionUtils.isEmpty(salaryList)) {
-            return;
-        }
-        salaryList.forEach(salary -> {
-            //查询该学生及课程id 对应的支付订单号
-            CourseScheduleStudentPayment payment = courseScheduleStudentPaymentService.getOne(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
-                    .eq(CourseScheduleStudentPayment::getCourseId, room.getCourseId())
-                    .eq(CourseScheduleStudentPayment::getUserId, salary.getStudentId())
+        //直播课
+        if (room.getType().equals(RoomTypeEnum.LIVE.getCode())) {
+            //查询老师分润表
+            List<CourseScheduleTeacherSalary> salaryList = courseScheduleTeacherSalaryService.list(Wrappers.<CourseScheduleTeacherSalary>lambdaQuery()
+                    .eq(CourseScheduleTeacherSalary::getCourseScheduleId, room.getCourseId())
             );
-            if (Objects.isNull(payment)) {
+            if (CollectionUtils.isEmpty(salaryList)) {
                 return;
             }
-            //获取教师课酬写入到金额变更表
-            UserAccountRecordDto userAccountRecord = new UserAccountRecordDto();
-            userAccountRecord.setUserId(room.getSpeakerId());
-            userAccountRecord.setInOrOut(InOrOutEnum.IN);
-            userAccountRecord.setBizType(AccountBizTypeEnum.LIVE);
-            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);
-        });
+            salaryList.forEach(salary -> {
+                //修改教师课酬状态-已结算
+                salary.setStatus(TeacherSalaryEnum.WAIT.getCode());
+                courseScheduleTeacherSalaryService.updateById(salary);
+            });
+        }
         //删除房间
         ImDestroyLiveRoom(room.getRoomUid());
-    }
-
-    /**
-     * 定时任务-清理过期的房间-陪练课
-     */
-    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()) {
-                //删除房间
-                ImDestroyLiveRoom(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);
-            }
-        });
+        //修改房间状态
+        room.setLiveState(2);
+        this.updateById(room);
     }
 
     /**

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

@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -36,6 +37,19 @@ public class LiveRoomVideoServiceImpl extends ServiceImpl<LiveRoomVideoDao, Live
         return this.baseMapper;
     }
 
+    /**
+     * 查询对应房间的录像
+     *
+     * @param roomUid 房间uid
+     */
+    @Override
+    public List<LiveRoomVideo> queryVideo(String roomUid) {
+        return this.list(Wrappers.<LiveRoomVideo>lambdaQuery()
+                .eq(LiveRoomVideo::getRoomUid, roomUid)
+                .eq(LiveRoomVideo::getType, 4)
+        );
+    }
+
     @Override
     public void recordSync(RecordNotify recordNotify) {
         if (recordNotify.getCode().equals(200)) {

+ 13 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherFreeTimeServiceImpl.java

@@ -1,8 +1,10 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.excel.util.CollectionUtils;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.TeacherFreeTimeDao;
 import com.yonge.cooleshow.biz.dal.dto.PracticeTimesSetting;
@@ -12,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.service.TeacherFreeTimeService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherFreeTimeVo;
 import com.yonge.cooleshow.biz.dal.vo.WeekVo;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.payment.core.entity.SysConfigPayment;
 import com.yonge.toolset.utils.date.DateUtil;
 import jodd.util.StringUtil;
 import org.slf4j.Logger;
@@ -41,9 +44,12 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void upSet(TeacherFreeTime teacherFreeTime) {
-        TeacherFreeTime oldTeacherFreeTime = baseMapper.findOne(teacherFreeTime.getTeacherId(),
-                teacherFreeTime.getCourseMinutes(),
-                teacherFreeTime.getFreeMinutes());
+        Long teacherId = teacherFreeTime.getTeacherId();
+        TeacherFreeTime oldTeacherFreeTime = baseMapper.selectOne(Wrappers.<TeacherFreeTime>lambdaQuery().eq(TeacherFreeTime::getTeacherId, teacherId));
+
+//        TeacherFreeTime oldTeacherFreeTime = baseMapper.findOne(teacherFreeTime.getTeacherId(),
+//                teacherFreeTime.getCourseMinutes(),
+//                teacherFreeTime.getFreeMinutes());
 
         //删除原有设置
         if(Objects.nonNull(oldTeacherFreeTime)){
@@ -51,7 +57,10 @@ public class TeacherFreeTimeServiceImpl extends ServiceImpl<TeacherFreeTimeDao,
             baseMapper.deleteSubjectPrice(oldTeacherFreeTime.getId());
         }
         //将其他配置改为非默认
-        baseMapper.updateDefaultFlag(false,teacherFreeTime.getTeacherId());
+//        List<TeacherFreeTime> checkGapLock = baseMapper.selectList(Wrappers.<TeacherFreeTime>lambdaQuery().eq(TeacherFreeTime::getTeacherId, teacherFreeTime.getTeacherId()));
+//        if (!CollectionUtils.isEmpty(checkGapLock)){
+//            baseMapper.updateDefaultFlag(false,teacherFreeTime.getTeacherId());
+//        }
         baseMapper.insert(teacherFreeTime);
 
         List<TeacherSubjectPrice> priceList= JSONArray.parseArray(teacherFreeTime.getSubjectPrice(), TeacherSubjectPrice.class);

+ 36 - 33
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java

@@ -65,27 +65,19 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
 
     @Override
     public UserOrderPayment detailByOrderNo(String orderNo, PayChannelEnum payChannel, TradeStatusEnum status) {
-        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
-                .eq(UserOrderPayment::getOrderNo, orderNo)
-                .eq(UserOrderPayment::getPayChannel, payChannel)
-                .eq(UserOrderPayment::getStatus, status));
+        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getPayChannel, payChannel).eq(UserOrderPayment::getStatus, status));
     }
 
     @Override
     public UserOrderPayment detailByTransNoOrPaymentNo(String transNo, String paymentNo) {
-        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().and(
-                wrapper -> wrapper.eq(UserOrderPayment::getTransNo, transNo)
-                        .or().eq(UserOrderPayment::getPaymentNo, paymentNo)
-        ));
+        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().and(wrapper -> wrapper.eq(UserOrderPayment::getTransNo, transNo).or().eq(UserOrderPayment::getPaymentNo, paymentNo)));
     }
 
     @Override
-    public UserOrderPayment onlyClosePayment(String orderNo, String reason) {
-        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
-                .eq(UserOrderPayment::getOrderNo, orderNo)
-                .eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
+    public Boolean onlyClosePayment(String orderNo, String reason) {
+        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
         if (null == orderPayment) {
-            return orderPayment;
+            return true;
         }
 
         //更新付款单
@@ -94,21 +86,25 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setUpdateTime(new Date());
 
         updateById(orderPayment);
-        return orderPayment;
+        return true;
     }
 
 
     @Override
-    public UserOrderPayment closePaymentAndReqOpen(String orderNo, String reason) {
-        UserOrderPayment orderPayment = onlyClosePayment(orderNo, reason);
+    public Boolean closePaymentAndReqOpen(String orderNo, String reason) {
+        UserOrderPayment orderPayment = baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery().eq(UserOrderPayment::getOrderNo, orderNo).eq(UserOrderPayment::getStatus, TradeStatusEnum.pending));
         if (null == orderPayment) {
-            return orderPayment;
+            return true;
         }
+
+        //更新付款单
+        orderPayment.setStatus(TradeStatusEnum.close);
+        orderPayment.setPayFailMsg(StringUtil.isEmpty(reason) ? "交易取消" : reason);
+        orderPayment.setUpdateTime(new Date());
+
         //发送支付关单请求
-        if (!StringUtil.isEmpty(orderPayment.getTransNo())
-                || !StringUtil.isEmpty(orderPayment.getPaymentNo())) {
-            ClosePayment param = new ClosePayment(orderPayment.getOpenType(),
-                    PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), orderPayment.getPayChannel());
+        if (!StringUtil.isEmpty(orderPayment.getTransNo()) || !StringUtil.isEmpty(orderPayment.getPaymentNo())) {
+            ClosePayment param = new ClosePayment(orderPayment.getOpenType(), PaymentClientEnum.valueOf(orderPayment.getPaymentClient()), orderPayment.getPayChannel());
             param.setId(orderPayment.getTransNo());
             param.setPaymentNo(orderPayment.getPaymentNo());
             param.setReason(reason);
@@ -130,7 +126,12 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
                 e.printStackTrace();
             }
         }
-        return orderPayment;
+        updateById(orderPayment);
+        if (TradeStatusEnum.succeeded.equals(orderPayment.getCloseStatus())) {
+            return true;
+        } else {
+            return false;
+        }
     }
 
 
@@ -203,8 +204,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     @Override
     public void executePaymentCallBack(PaymentCallBack data) {
         UserOrderVo userOrderVo = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
-        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus())
-                || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
+        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus()) || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
             if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//支付成功
                 paymentSucceededHandle(data);
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
@@ -216,8 +216,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
     @Override
     public void closePaymentCallBack(PaymentCallBack data) {
         UserOrderVo userOrderVo = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
-        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus())
-                || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
+        if (OrderStatusEnum.WAIT_PAY.equals(userOrderVo.getStatus()) || OrderStatusEnum.PAYING.equals(userOrderVo.getStatus())) {
             if (TradeStatusEnum.succeeded.equals(data.getStatus())) {//关单成功
                 paymentCloseSucceededHandle(data);
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//关单失败
@@ -243,9 +242,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setOrderNo(payment.getOrderNo());
         orderPayment.setPaymentNo(payment.getPaymentNo());
         orderPayment.setTransNo(payment.getId());
-        orderPayment.setPayAmt(
-                new BigDecimal(payment.getPayAmt()).setScale(2, RoundingMode.HALF_UP)
-        );
+        orderPayment.setPayAmt(new BigDecimal(payment.getPayAmt()).setScale(2, RoundingMode.HALF_UP));
         orderPayment.setPayInfo(payment.getPayInfo());
         orderPayment.setStatus(TradeStatusEnum.pending);
 
@@ -274,8 +271,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             log.error("支付回调,订单未找到。 req is {}", JSONObject.toJSONString(data));
             return;
         }
-        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.orderSuccess(detail, data);
         }
 
@@ -310,8 +306,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             log.error("支付回调,订单未找到。 req is {}", JSONObject.toJSONString(data));
             return;
         }
-        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.doOrderCancel(detail, OrderStatusEnum.FAIL, "支付回调失败:" + errMsg);
             //关闭付款单
             onlyClosePayment(detail.getOrderNo(), "支付回调失败:" + errMsg);
@@ -332,6 +327,14 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         orderPayment.setCloseStatus(TradeStatusEnum.succeeded);
         orderPayment.setUpdateTime(new Date());
         updateById(orderPayment);
+
+        //若当前关单回调是当前订单付款单,则可以关单
+        UserOrderVo detail = userOrderService.getUserOrderByPaymentNoOrTransNo(data.getPaymentNo(), data.getId());
+        if (null != detail && OrderStatusEnum.PAYING.equals(detail.getStatus())
+                && orderPayment.getPaymentNo().equals(detail.getPaymentNo())) {
+            //关闭订单
+            userOrderService.doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单取消");
+        }
     }
 
     /***

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

@@ -192,9 +192,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             return HttpResponseResult.failed("订单已关闭");
         }
-        orderPaymentService.closePaymentAndReqOpen(payReq.getOrderNo(), "用户取消订单");
-        //关闭订单
-        doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
+        Boolean close = orderPaymentService.closePaymentAndReqOpen(payReq.getOrderNo(), "用户取消订单");
+        if(close){
+            //关闭订单
+            doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
+        }
         return HttpResponseResult.succeed(true);
     }
 
@@ -271,7 +273,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             OrderCreateRes createRes = createResult.getData();
             if (!createResult.getStatus() || null == createRes || !createRes.getRes()) {
                 log.info("订单[创建订单] Res:{}", JSONObject.toJSONString(createResult));
-                return HttpResponseResult.failed("订单商品信息获取失败");
+                return HttpResponseResult.failed(StringUtil.isEmpty(createResult.getMsg()) ? "订单商品信息获取失败" : createResult.getMsg());
             }
             createRes.setGoodType(info.getGoodType());
             //todo 优惠券优惠金额,暂时为0
@@ -377,7 +379,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             return;
         }
         UserOrderPayment userOrderPayment = orderPaymentService.detailByTransNoOrPaymentNo(detail.getTransNo(), detail.getPaymentNo());
-        if (null != userOrderPayment && TradeStatusEnum.pending.equals(userOrderPayment.getStatus())) {
+        if (null == userOrderPayment) {
+            //关闭订单
+            doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+        } else if (TradeStatusEnum.pending.equals(userOrderPayment.getStatus())) {
             Payment param = new Payment(detail.getOpenType(),
                     PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), detail.getPayChannel());
             param.setId(detail.getTransNo());
@@ -385,16 +390,18 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             BaseResult<Payment> res = paymentClient.queryPayment(param);
             //支付成功
             if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())
-                    && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))
-            ) {
+                    && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))) {
+                //订单已经完成,则完成订单
                 orderSuccess(detail);
-                return;
+            } else {
+                //关闭订单付款单
+                Boolean close = orderPaymentService.closePaymentAndReqOpen(orderNo, "订单超时");
+                if (close) {
+                    //关闭订单
+                    doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+                }
             }
         }
-        //关闭订单
-        doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
-        //关闭订单付款单
-        orderPaymentService.closePaymentAndReqOpen(orderNo, "订单超时");
     }
 
     private HttpResponseResult<OrderPayRes> doOrderPay(OrderPayReq payReq, UserOrderVo detail) throws Exception {

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentHomeVo.java

@@ -48,6 +48,8 @@ public class StudentHomeVo extends Student {
     private Date birthdate;
     @ApiModelProperty(value = "是否实名 0否 1是")
     private YesOrNoEnum isReal;
+    @ApiModelProperty(value = "学生 STUDENT 老师 TEACHER 系统用户 SYSTEM")
+    private String userType;
 
     public String getHeardUrl() {
         return heardUrl;
@@ -176,4 +178,12 @@ public class StudentHomeVo extends Student {
     public void setIsReal(YesOrNoEnum isReal) {
         this.isReal = isReal;
     }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/StudentVo.java

@@ -42,6 +42,8 @@ public class StudentVo extends Student {
     private YesOrNoEnum isVip;
     @ApiModelProperty(value = "声部名称(支持多个,用逗号分隔) ")
     private String subjectName;
+    @ApiModelProperty(value = "学生 STUDENT 老师 TEACHER 系统用户 STSTEM")
+    private String userType;
 
     public String getAvatar() {
         return avatar;
@@ -138,4 +140,12 @@ public class StudentVo extends Student {
     public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherHomeVo.java

@@ -65,6 +65,8 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     private YesOrNoEnum isStar;
     @ApiModelProperty(value = "老师风采视频")
     private List<TeacherStyleVideo> styleVideo;
+    @ApiModelProperty(value = "学生 STUDENT 老师 TEACHER 系统用户 STSTEM")
+    private String userType;
 
     public String getHeardUrl() {
         return heardUrl;
@@ -233,4 +235,12 @@ public class TeacherHomeVo extends Teacher implements Serializable {
     public void setIsStar(YesOrNoEnum isStar) {
         this.isStar = isStar;
     }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java

@@ -52,6 +52,8 @@ public class TeacherVo extends Teacher {
     private String teacherType;
     @ApiModelProperty(value = "老师风采视频")
     private List<TeacherStyleVideo> styleVideo;
+    @ApiModelProperty(value = "学生 STUDENT 老师 TEACHER 系统用户 STSTEM")
+    private String userType;
 
     public String getAvatar() {
         return avatar;
@@ -164,4 +166,12 @@ public class TeacherVo extends Teacher {
     public void setTeacherType(String teacherType) {
         this.teacherType = teacherType;
     }
+
+    public String getUserType() {
+        return userType;
+    }
+
+    public void setUserType(String userType) {
+        this.userType = userType;
+    }
 }

+ 33 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -877,4 +877,37 @@
             <![CDATA[ AND s.class_date_ <= #{param.endDate} ]]>
         </if>
     </select>
+    <select id="selectWaitCourse" resultType="com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto">
+        SELECT DISTINCT
+            ts.teacher_id_ AS userId,
+            ts.actual_salary_ AS transAmount,
+            ts.course_group_type_ AS bizType,
+            ts.course_schedule_id_ AS bizId,
+            lr.room_title_ AS bizName,
+            'IN' AS inOrOut,
+            sp.order_no_ AS orderNo,
+            ts.update_time_ AS updateTime
+        FROM course_schedule_teacher_salary ts
+        LEFT JOIN live_room lr ON ts.course_schedule_id_ = lr.course_id_
+        LEFT JOIN course_schedule_student_payment sp ON ts.course_schedule_id_ = sp.course_id_
+        WHERE ts.course_group_type_ = 'LIVE'
+        AND ts.status_ = 'WAIT'
+        <![CDATA[ AND ts.update_time_ <= #{day}]]>
+        UNION
+        SELECT DISTINCT
+            ts.teacher_id_ AS userId,
+            ts.actual_salary_ AS transAmount,
+            ts.course_group_type_ AS bizType,
+            ts.course_schedule_id_ AS bizId,
+            g.name_ AS bizName,
+            'IN' AS inOrOut,
+            sp.order_no_ AS orderNo,
+            ts.update_time_ AS updateTime
+        FROM course_schedule_teacher_salary ts
+        LEFT JOIN course_group g ON ts.course_group_id_ = g.id_
+        LEFT JOIN course_schedule_student_payment sp ON ts.course_schedule_id_ = sp.course_id_
+        WHERE ts.course_group_type_ = 'PRACTICE'
+        AND ts.status_ = 'WAIT'
+        <![CDATA[ AND ts.update_time_ <= #{day}]]>
+    </select>
 </mapper>

+ 4 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -45,7 +45,8 @@
             (!isnull(membership_end_time_) and membership_end_time_ > now()) as isVip,
             (
             SELECT GROUP_CONCAT(name_) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
-            ) as subjectName
+            ) as subjectName,
+            u.user_type_ as userType
         FROM student t
         left join sys_user u on t.user_id_ = u.id_
         where t.user_id_ = #{userId}
@@ -65,7 +66,8 @@
             (!isnull(membership_end_time_) and membership_end_time_ > now()) as isVip,
             (
                 SELECT GROUP_CONCAT(name_) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
-            ) as subjectName
+            ) as subjectName,
+            u.user_type_ as userType
         FROM student t
         left join sys_user u on t.user_id_ = u.id_
         where u.phone_ = #{phone}

+ 2 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -120,7 +120,8 @@
             (case when isnull(b.user_id_) then 0 else 1 end) as isBank,
             (
                 SELECT GROUP_CONCAT(name_) FROM subject WHERE FIND_IN_SET(id_,t.subject_id_)
-            ) as subjectName
+            ) as subjectName,
+            u.user_type_ as userType
         FROM teacher t
         left join sys_user u on t.user_id_ = u.id_
         left join (

+ 18 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -169,10 +169,21 @@
         SELECT
             <include refid="baseColumns"/>
         FROM user_order t
+        left join user_order_payment p on t.order_no_ = p.order_no_ and (p.status_ = 'pending' or p.status_ = 'succeeded')
         <where>
             <if test="null != param.status and '' != param.status">
                 AND t.status_ = #{param.status}
             </if>
+            <if test="param.startTime != null">
+                AND (
+                    (p.id_ is null and t.create_time_ &gt;= #{param.startTime}) or (p.id_ is not null and p.create_time_ &gt;= #{param.startTime})
+                )
+            </if>
+            <if test="param.endTime != null">
+                AND (
+                    (p.id_ is null and t.create_time_ &lt; #{param.endTime}) or (p.id_ is not null and p.create_time_ &lt; #{param.endTime})
+                )
+            </if>
         </where>
         order by t.create_time_
     </select>
@@ -225,9 +236,15 @@
     </select>
     <select id="getUserOrderByPaymentNoOrTransNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-            <include refid="baseColumns"/>
+            <include refid="baseColumns"/>,
+            p1.open_type_ as openType,
+            p1.payment_client_ as paymentClient,
+            p1.pay_channel_ as payChannel,
+            p1.trans_no_ as transNo,
+            p1.payment_no_ as paymentNo
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
+        left join user_order_payment p1 on t.order_no_ = p1.order_no_ and (p1.status_ = 'pending' or p1.status_ = 'succeeded')
         <where>
             <choose>
                 <when test="paymentNo != null and paymentNo != ''">

+ 13 - 13
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomController.java

@@ -1,12 +1,13 @@
 package com.yonge.cooleshow.teacher.controller;
 
-
 import com.alibaba.fastjson.JSONObject;
 import com.yonge.cooleshow.biz.dal.entity.ImUserStateSync;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.RoomInfoCache;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,6 +34,17 @@ public class TeacherLiveRoomController extends BaseController {
     @Resource
     private LiveRoomService liveRoomService;
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roomType", dataType = "String", value = "房间类型  LIVE-直播课  TEMP-临时直播间"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询当前用户关联的房间信息")
+    @PostMapping("/queryPageRoom")
+    public HttpResponseResult<PageInfo<LiveRoom>> queryPageRoom(@RequestBody Map<String, Object> param) {
+        return succeed(liveRoomService.queryPageRoom(param));
+    }
+
     /**
      * 根据房间uid查询房间信息
      *
@@ -74,18 +86,6 @@ public class TeacherLiveRoomController extends BaseController {
         liveRoomService.createCourseLiveRoom();
     }
 
-    @ApiOperation("定时任务-销毁房间-直播间")
-    @GetMapping("/destroyExpiredLiveRoom")
-    public void destroyExpiredLiveRoom() {
-        liveRoomService.destroyExpiredLiveRoom();
-    }
-
-    @ApiOperation("定时任务-销毁房间-直播间-陪练课")
-    @GetMapping("/destroyExpiredPracticeRoom")
-    public void destroyExpiredPracticeRoom() {
-        liveRoomService.destroyExpiredPracticeRoom();
-    }
-
     @ApiOperation("手动关闭直播间")
     @GetMapping("/destroyLiveRoom")
     public HttpResponseResult<Object> destroyLiveRoom(@ApiParam(value = "房间uid", required = true) String roomUid) {

+ 56 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherLiveRoomVideoController.java

@@ -0,0 +1,56 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoomVideo;
+import com.yonge.cooleshow.biz.dal.entity.RecordNotify;
+import com.yonge.cooleshow.biz.dal.service.LiveRoomVideoService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 直播视频记录(LiveRoomVideo)表控制层
+ *
+ * @author hgw
+ * @since 2022-03-18 15:41:17
+ */
+@Api(tags = "直播视频记录")
+@RestController
+@RequestMapping("/liveRoomVideo")
+public class TeacherLiveRoomVideoController extends BaseController {
+
+    private final static Logger log = LoggerFactory.getLogger(TeacherLiveRoomVideoController.class);
+
+    /**
+     * 服务对象
+     */
+    @Resource
+    private LiveRoomVideoService liveRoomVideoService;
+
+    @ApiOperation("查询直播回放")
+    @GetMapping("/queryVideo")
+    public HttpResponseResult<List<LiveRoomVideo>> queryVideo(@ApiParam(value = "房间uid", required = true) String roomUid) {
+        return succeed(liveRoomVideoService.queryVideo(roomUid));
+    }
+
+    @ApiOperation("录制结果回调")
+    @RequestMapping(value = "/recordSync")
+    public void recordSync(@RequestBody String body) {
+        log.info("recordSync body:{}", body);
+        RecordNotify recordNotify = JSONObject.parseObject(body, RecordNotify.class);
+        liveRoomVideoService.recordSync(recordNotify);
+    }
+
+}
+

+ 17 - 7
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/task/TaskController.java

@@ -3,10 +3,11 @@ package com.yonge.cooleshow.teacher.task;
 import com.yonge.cooleshow.biz.dal.entity.TeacherTotal;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 import com.yonge.cooleshow.biz.dal.service.TeacherTotalService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,6 +30,9 @@ public class TaskController extends BaseController {
     private CourseGroupService courseGroupService;
     @Autowired
     private CourseScheduleService scheduleService;
+    @Autowired
+    private LiveRoomService liveRoomService;
+
 
     /***
      * 查询所有老师统计数据
@@ -46,11 +50,17 @@ public class TaskController extends BaseController {
      * <p>定时将符合结束售卖日期的在售卖中的直播课课程组修改为取消或者成课状态状态-每隔10分钟执行一次
      */
     @GetMapping("/opsCourseGroup")
-    public HttpResponseResult<Object> opsCourseGroup(){
+    public HttpResponseResult<Object> opsCourseGroup() {
         courseGroupService.opsCourseGroup();
         return HttpResponseResult.succeed();
     }
 
+    @ApiOperation("定时任务-销毁房间-直播间")
+    @GetMapping("/destroyExpiredLiveRoom")
+    public void destroyExpiredLiveRoom() {
+        liveRoomService.destroyExpiredLiveRoom();
+    }
+
     @GetMapping("/getRedisValueByKey")
     public HttpResponseResult<Object> getRedisValueByKey(String key) {
         return succeed(teacherTotalService.getRedisValueByKey(key));
@@ -68,9 +78,9 @@ public class TaskController extends BaseController {
         return HttpResponseResult.succeed();
     }
 
-//    @GetMapping("/teacherSalary")
-//    public HttpResponseResult<Object> teacherSalary() {
-//        scheduleService.teacherSalaryTask();
-//        return HttpResponseResult.succeed();
-//    }
+    @GetMapping("/teacherSalary")
+    public HttpResponseResult<Object> teacherSalary() {
+        scheduleService.teacherSalaryTask();
+        return HttpResponseResult.succeed();
+    }
 }

+ 12 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/LiveRoomVideoController.java → cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/LiveRoomVideoController.java

@@ -1,19 +1,23 @@
-package com.yonge.cooleshow.teacher.controller;
-
+package com.yonge.cooleshow.website.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.LiveRoomVideo;
 import com.yonge.cooleshow.biz.dal.entity.RecordNotify;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomVideoService;
 import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.List;
 
 /**
  * 直播视频记录(LiveRoomVideo)表控制层
@@ -34,6 +38,12 @@ public class LiveRoomVideoController extends BaseController {
     @Resource
     private LiveRoomVideoService liveRoomVideoService;
 
+    @ApiOperation("查询直播回放")
+    @GetMapping("/queryVideo")
+    public HttpResponseResult<List<LiveRoomVideo>> queryVideo(@ApiParam(value = "房间uid", required = true) String roomUid) {
+        return succeed(liveRoomVideoService.queryVideo(roomUid));
+    }
+
     @ApiOperation("录制结果回调")
     @RequestMapping(value = "/recordSync")
     public void recordSync(@RequestBody String body) {

+ 0 - 3
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/adapay/AdapayTemplate.java

@@ -65,8 +65,6 @@ public class AdapayTemplate implements PaymentTemplate {
                 + "/" + payment.getPayChannel().getCode()
                 + "/executePayment"
         );
-
-        log.info("汇付[创建支付对象] Req:{}", JSONObject.toJSONString(paymentMap));
         //调用sdk方法,创建支付,得到支付对象
         Map<String, Object> res;
         try {
@@ -178,7 +176,6 @@ public class AdapayTemplate implements PaymentTemplate {
     @Override
     public BaseResult<PaymentCallBack> analysisNotice(OpenEnum openType, PaymentClientEnum paymentClient, PayChannelEnum payChannel, MethodNameEnum methodName, HttpServletRequest request) {
         PaymentCallBack paymentCallBack = new PaymentCallBack();
-
         try {
             //验签传参data
             String data = request.getParameter("data");

+ 24 - 5
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/core/service/impl/PaymentClientImpl.java

@@ -1,5 +1,6 @@
 package com.yonge.toolset.payment.core.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.yonge.toolset.base.result.BaseResult;
 import com.yonge.toolset.payment.base.PaymentTemplate;
 import com.yonge.toolset.payment.base.enums.MethodNameEnum;
@@ -13,6 +14,8 @@ import com.yonge.toolset.payment.base.model.RefundBill;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.util.PaywayUtil;
 import com.yonge.toolset.payment.core.service.PaymentClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
@@ -24,6 +27,8 @@ import java.util.Map;
  */
 @Service
 public class PaymentClientImpl implements PaymentClient {
+    private final static Logger log = LoggerFactory.getLogger(PaymentClientImpl.class);
+
     @Override
     public BaseResult<Map<String, Object>> getOpenAuthMsg(OpenAuth openAuth) {
         return PaywayUtil.getRealTemplate(openAuth.getOpenType(), openAuth.getPayChannel()).getOpenAuthMsg(openAuth);
@@ -31,26 +36,40 @@ public class PaymentClientImpl implements PaymentClient {
 
     @Override
     public BaseResult<Payment> executePayment(Payment payment) {
-        return PaywayUtil.getRealTemplate(payment.getOpenType(), payment.getPayChannel()).executePayment(payment);
+        log.info("支付-付款请求参数:{}", JSONObject.toJSONString(payment));
+        BaseResult<Payment> paymentBaseResult = PaywayUtil.getRealTemplate(payment.getOpenType(), payment.getPayChannel()).executePayment(payment);
+        log.info("支付-付款返回参数:{}", JSONObject.toJSONString(paymentBaseResult));
+        return paymentBaseResult;
     }
 
     @Override
     public BaseResult<Payment> queryPayment(Payment payment) {
-        return PaywayUtil.getRealTemplate(payment.getOpenType(), payment.getPayChannel()).queryPayment(payment);
+        log.info("支付-查询请求参数:{}", JSONObject.toJSONString(payment));
+        BaseResult<Payment> paymentBaseResult = PaywayUtil.getRealTemplate(payment.getOpenType(), payment.getPayChannel()).queryPayment(payment);
+        log.info("支付-查询返回参数:{}", JSONObject.toJSONString(paymentBaseResult));
+        return paymentBaseResult;
     }
 
     @Override
     public BaseResult<ClosePayment> closePayment(ClosePayment closePayment) {
-        return PaywayUtil.getRealTemplate(closePayment.getOpenType(), closePayment.getPayChannel()).closePayment(closePayment);
+        log.info("支付-关单请求参数:{}", JSONObject.toJSONString(closePayment));
+        BaseResult<ClosePayment> closePaymentBaseResult = PaywayUtil.getRealTemplate(closePayment.getOpenType(), closePayment.getPayChannel()).closePayment(closePayment);
+        log.info("支付-关单返回参数:{}", JSONObject.toJSONString(closePaymentBaseResult));
+        return closePaymentBaseResult;
     }
 
     @Override
     public BaseResult<RefundBill> refundPayment(RefundBill refundBill) {
-        return PaywayUtil.getRealTemplate(refundBill.getOpenType(), refundBill.getPayChannel()).refundPayment(refundBill);
+        log.info("支付-退款请求参数:{}", JSONObject.toJSONString(refundBill));
+        BaseResult<RefundBill> refundBillBaseResult = PaywayUtil.getRealTemplate(refundBill.getOpenType(), refundBill.getPayChannel()).refundPayment(refundBill);
+        log.info("支付-退款返回参数:{}", JSONObject.toJSONString(refundBillBaseResult));
+        return refundBillBaseResult;
     }
 
     @Override
     public BaseResult<PaymentCallBack> analysisNotice(OpenEnum openType, PaymentClientEnum paymentClient, PayChannelEnum payChannel, MethodNameEnum methodName, HttpServletRequest request) {
-        return PaywayUtil.getRealTemplate(openType, payChannel).analysisNotice(openType, paymentClient, payChannel, methodName, request);
+        BaseResult<PaymentCallBack> paymentCallBackBaseResult = PaywayUtil.getRealTemplate(openType, payChannel).analysisNotice(openType, paymentClient, payChannel, methodName, request);
+        log.info("支付-回调解析结果:{}", JSONObject.toJSONString(paymentCallBackBaseResult));
+        return paymentCallBackBaseResult;
     }
 }

+ 11 - 8
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/ali/OriginalAliAppTemplate.java

@@ -91,7 +91,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
         request.setBizContent(bizContent.toString());
         try {
             AlipayTradeAppPayResponse response = getAlipayClient(payment.getPaymentClient()).sdkExecute(request);
-            log.info("支付返回:{}", JSONObject.toJSONString(response));
+            log.info("支付宝-支付返回:{}", JSONObject.toJSONString(response));
 
             if (response.isSuccess()) {
                 payment.setId(response.getTradeNo());
@@ -101,7 +101,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 return BaseResult.failed(response.getMsg());
             }
         } catch (AlipayApiException e) {
-            log.error("调用支付宝App支付接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
+            e.printStackTrace();
             return BaseResult.failed("交易失败");
         } catch (Exception e) {
             e.printStackTrace();
@@ -114,13 +114,15 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
         AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
 
         JSONObject bizContent = new JSONObject();
-        bizContent.put("trade_no", payment.getId());
+        if (!StringUtil.isEmpty(payment.getId())) {
+            bizContent.put("trade_no", payment.getId());
+        }
         bizContent.put("out_trade_no", payment.getPaymentNo());
 
         request.setBizContent(bizContent.toString());
         try {
             AlipayTradeQueryResponse response = getAlipayClient(payment.getPaymentClient()).execute(request);
-            log.info("查询返回:{}", JSONObject.toJSONString(response));
+            log.info("支付宝-查询返回:{}", JSONObject.toJSONString(response));
 
             if (response.isSuccess()) {
                 payment.setPayAmt(response.getPayAmount());
@@ -140,7 +142,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 return BaseResult.failed(response.getMsg() + ":" + response.getSubMsg());
             }
         } catch (AlipayApiException e) {
-            log.error("调用支付宝APP查询订单接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
+            e.printStackTrace();
             return BaseResult.failed("查询失败");
         } catch (Exception e) {
             e.printStackTrace();
@@ -171,7 +173,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 return BaseResult.failed(response.getMsg() + ":" + response.getSubMsg());
             }
         } catch (AlipayApiException e) {
-            log.error("调用支付宝APP支付关单接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
+            e.printStackTrace();
             return BaseResult.failed("关单失败");
         } catch (Exception e) {
             e.printStackTrace();
@@ -203,7 +205,7 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 return BaseResult.failed(response.getMsg() + ":" + response.getSubMsg());
             }
         } catch (AlipayApiException e) {
-            log.error("调用支付宝APP支付退款接口失败,err_code={} err_msg={}", e.getErrCode(), e.getErrMsg());
+            e.printStackTrace();
             return BaseResult.failed("退款失败");
         } catch (Exception e) {
             e.printStackTrace();
@@ -263,7 +265,6 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
                 refundPayment.setTradeTime(jsonParams.getDate("gmt_refund"));
                 paymentCallBack.setRefundPaymentCallBack(refundPayment);
             } else {
-
                 if ("TRADE_CLOSED".equals(trade_status)) {
                     //关单成功
                     paymentCallBack.setMethodName(MethodNameEnum.closePayment);
@@ -291,9 +292,11 @@ public class OriginalAliAppTemplate implements PaymentTemplate {
             }
             return BaseResult.succeed(paymentCallBack);
         } catch (AlipayApiException e) {
+            e.printStackTrace();
             paymentCallBack.setResMsg("filed");
             return BaseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR, paymentCallBack, "微信回调对象转换失败");
         } catch (Exception e) {
+            e.printStackTrace();
             paymentCallBack.setResMsg("filed");
             return BaseResult.failed(HttpStatus.INTERNAL_SERVER_ERROR, paymentCallBack, "解析异常");
         }