Browse Source

代码提交

weifanli 3 years ago
parent
commit
c06d7716de
69 changed files with 1719 additions and 1040 deletions
  1. 0 15
      cooleshow-payment/payment-api/pom.xml
  2. 0 9
      cooleshow-payment/payment-api/src/main/java/com/yonge/cooleshow/payment/dto/OrderDto.java
  3. 0 22
      cooleshow-payment/payment-api/src/main/java/com/yonge/cooleshow/payment/dto/OrderPayDto.java
  4. 0 92
      cooleshow-payment/payment-server/pom.xml
  5. 0 18
      cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/PaymentApplication.java
  6. 0 58
      cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/controller/PaymentController.java
  7. 0 37
      cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/exception/ThirdpartyException.java
  8. 0 243
      cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/util/MessageFormatter.java
  9. 0 14
      cooleshow-payment/payment-server/src/main/resources/bootstrap-dev.properties
  10. 0 28
      cooleshow-payment/pom.xml
  11. 0 86
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/OrderDetailController.java
  12. 17 17
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java
  13. 17 17
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java
  14. 5 0
      cooleshow-user/user-biz/pom.xml
  15. 2 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java
  16. 20 20
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/SysConfigConstant.java
  17. 13 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  18. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java
  19. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderPaymentDao.java
  20. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java
  21. 70 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderPayReq.java
  22. 137 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/req/OrderReq.java
  23. 30 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java
  24. 23 78
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java
  25. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java
  26. 126 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java
  27. 3 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java
  28. 4 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java
  29. 42 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderStatusEnum.java
  30. 43 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java
  31. 40 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PayChannelEnum.java
  32. 22 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java
  33. 38 15
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java
  34. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/DeviceInfo.java
  35. 55 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/DivMember.java
  36. 5 40
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentConfirmParam.java
  37. 168 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentReq.java
  38. 0 29
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/OrderService.java
  39. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java
  40. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  41. 5 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java
  42. 54 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  43. 19 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  44. 0 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/OrderDetailServiceImpl.java
  45. 0 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/OrderRefundsServiceImpl.java
  46. 0 27
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/OrderServiceImpl.java
  47. 3 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
  48. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderDetailServiceImpl.java
  49. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  50. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundsServiceImpl.java
  51. 267 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  52. 15 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  53. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderDetailVo.java
  54. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderRefundsVo.java
  55. 0 14
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderVo.java
  56. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/TeacherVo.java
  57. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java
  58. 14 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java
  59. 24 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java
  60. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCheckRes.java
  61. 32 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderPayRes.java
  62. 2 4
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  63. 3 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  64. 13 16
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  65. 28 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml
  66. 3 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml
  67. 77 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java
  68. 89 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  69. 0 1
      pom.xml

+ 0 - 15
cooleshow-payment/payment-api/pom.xml

@@ -1,15 +0,0 @@
-<?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-payment</artifactId>
-        <groupId>com.yonge.cooleshow</groupId>
-        <version>1.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>payment-api</artifactId>
-
-
-</project>

+ 0 - 9
cooleshow-payment/payment-api/src/main/java/com/yonge/cooleshow/payment/dto/OrderDto.java

@@ -1,9 +0,0 @@
-package com.yonge.cooleshow.payment.dto;
-
-/**
- * 订单对象
- * @Author: liweifan
- * @Data: 2022/3/11 18:46
- */
-public class OrderDto {
-}

+ 0 - 22
cooleshow-payment/payment-api/src/main/java/com/yonge/cooleshow/payment/dto/OrderPayDto.java

@@ -1,22 +0,0 @@
-package com.yonge.cooleshow.payment.dto;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 18:45
- */
-public class OrderPayDto {
-    /***
-     * 订单对象
-     * @author liweifan
-     * @updateTime 2022/3/11 18:46
-     */
-    private OrderDto orderDto;
-
-    public OrderDto getOrderDto() {
-        return orderDto;
-    }
-
-    public void setOrderDto(OrderDto orderDto) {
-        this.orderDto = orderDto;
-    }
-}

+ 0 - 92
cooleshow-payment/payment-server/pom.xml

@@ -1,92 +0,0 @@
-<?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-payment</artifactId>
-        <groupId>com.yonge.cooleshow</groupId>
-        <version>1.0</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>payment-server</artifactId>
-    <groupId>com.yonge.cooleshow</groupId>
-    <version>1.0</version>
-    <name>payment-server</name>
-
-    <properties>
-        <java.version>1.8</java.version>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <fastjson.version>1.2.76</fastjson.version> <!-- fastjson -->
-    </properties>
-
-    <dependencies>
-        <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.alibaba</groupId>
-            <artifactId>druid-spring-boot-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.yonge.toolset</groupId>
-            <artifactId>audit-log</artifactId>
-        </dependency> -->
-
-        <dependency>
-            <groupId>com.github.whvcse</groupId>
-            <artifactId>easy-captcha</artifactId>
-            <version>1.6.2</version>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>${fastjson.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.huifu.adapay</groupId>
-            <artifactId>adapay-java-sdk</artifactId>
-            <version>1.2.10</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>payment-api</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

+ 0 - 18
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/PaymentApplication.java

@@ -1,18 +0,0 @@
-package com.yonge.cooleshow.payment;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 15:34
- */
-@SpringBootApplication
-@EnableDiscoveryClient
-public class PaymentApplication {
-    public static void main(String[] args) {
-        SpringApplication.run(PaymentApplication.class, args);
-    }
-
-}

+ 0 - 58
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/controller/PaymentController.java

@@ -1,58 +0,0 @@
-package com.yonge.cooleshow.payment.controller;
-
-import com.huifu.adapay.core.AdapayCore;
-import com.huifu.adapay.core.util.AdapaySign;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * @Author: liweifan
- * @Data: 2022/3/11 18:16
- */
-@RestController
-@RequestMapping("/payment")
-@Api(value = "付款接口", tags = "付款接口")
-public class PaymentController {
-
-    @PostMapping("/orderPay")
-    public void orderPay() {
-
-    }
-
-    /***
-     * 汇付回调
-     * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单
-     * @author liweifan
-     * @param: request
-     * @updateTime 2022/3/11 18:35
-     */
-    @PostMapping("/callback")
-    public void callback(HttpServletRequest request) {
-        try {
-            //验签传参data
-            String data = request.getParameter("data");
-            //验签传参sign
-            String sign = request.getParameter("sign");
-            //验签标记
-            boolean checkSign;
-            //验签传参publicKey
-            String publicKey = AdapayCore.PUBLIC_KEY;
-            //验签
-            checkSign = AdapaySign.verifySign(data, sign, publicKey);
-            if(checkSign){
-                //验签成功逻辑
-                System.out.println("成功返回数据data:"+data);
-            }else {
-                //验签失败逻辑
-            }
-        }catch (Exception e){
-        }
-        return ;
-    }
-}

+ 0 - 37
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/exception/ThirdpartyException.java

@@ -1,37 +0,0 @@
-package com.yonge.cooleshow.payment.exception;
-
-
-import com.yonge.cooleshow.payment.util.MessageFormatter;
-
-public class ThirdpartyException extends RuntimeException {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -4562885563376566463L;
-
-	public ThirdpartyException() {
-		super();
-	}
-
-	public ThirdpartyException(String message) {
-		super(message);
-	}
-
-	public ThirdpartyException(Throwable cause) {
-		super(cause);
-	}
-
-	public ThirdpartyException(String message, Throwable cause) {
-		super(message, cause);
-	}
-
-	public ThirdpartyException(String message, Object... arguments) {
-		super(MessageFormatter.arrayFormat(message, arguments));
-	}
-
-	public ThirdpartyException(String message, Throwable cause, Object... args) {
-		super(MessageFormatter.arrayFormat(message, args), cause);
-	}
-
-}

+ 0 - 243
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/util/MessageFormatter.java

@@ -1,243 +0,0 @@
-package com.yonge.cooleshow.payment.util;
-
-import java.util.HashMap;
-import java.util.Map;
-
-final public class MessageFormatter {
-	static final char DELIM_START = '{';
-	static final char DELIM_STOP = '}';
-	static final String DELIM_STR = "{}";
-	private static final char ESCAPE_CHAR = '\\';
-
-	/**
-	 * 将含有{}的字符串词用后面的变量替换
-	 * @param messagePattern
-	 * @param argArray
-	 * @return String
-	 */
-	final public static String arrayFormat(String messagePattern, Object... argArray) {
-		if (messagePattern == null) {
-			return "";
-		}
-		if (argArray == null) {
-			return messagePattern;
-		}
-		int i = 0;
-		int j;
-		StringBuffer sbuf = new StringBuffer(messagePattern.length() + 50);
-		int L;
-		for (L = 0; L < argArray.length; L++) {
-			j = messagePattern.indexOf(DELIM_STR, i);
-			if (j == -1) {
-				// no more variables
-				if (i == 0) { // this is a simple string
-					return messagePattern;
-				} else { // add the tail string which contains no variables and
-							// return
-					// the result.
-					sbuf.append(messagePattern.substring(i, messagePattern.length()));
-					return sbuf.toString();
-				}
-			} else {
-				if (isEscapedDelimeter(messagePattern, j)) {
-					if (!isDoubleEscaped(messagePattern, j)) {
-						L--; // DELIM_START was escaped, thus should not be
-								// incremented
-						sbuf.append(messagePattern.substring(i, j - 1));
-						sbuf.append(DELIM_START);
-						i = j + 1;
-					} else {
-						// The escape character preceding the delimiter start is
-						// itself escaped: "abc x:\\{}"
-						// we have to consume one backward slash
-						sbuf.append(messagePattern.substring(i, j - 1));
-						deeplyAppendParameter(sbuf, argArray[L], new HashMap<Object, Object>());
-						i = j + 2;
-					}
-				} else {
-					// normal case
-					sbuf.append(messagePattern.substring(i, j));
-					deeplyAppendParameter(sbuf, argArray[L], new HashMap<Object, Object>());
-					i = j + 2;
-				}
-			}
-		}
-		// append the characters following the last {} pair.
-		sbuf.append(messagePattern.substring(i, messagePattern.length()));
-		if (L < argArray.length - 1) {
-			return sbuf.toString();
-		} else {
-			return sbuf.toString();
-		}
-	}
-
-	// special treatment of array values was suggested by 'lizongbo'
-	private static void deeplyAppendParameter(StringBuffer sbuf, Object o, Map<Object, Object> seenMap) {
-		if (o == null) {
-			sbuf.append("null");
-			return;
-		}
-		if (!o.getClass().isArray()) {
-			safeObjectAppend(sbuf, o);
-		} else {
-			// check for primitive array types because they
-			// unfortunately cannot be cast to Object[]
-			if (o instanceof boolean[]) {
-				booleanArrayAppend(sbuf, (boolean[]) o);
-			} else if (o instanceof byte[]) {
-				byteArrayAppend(sbuf, (byte[]) o);
-			} else if (o instanceof char[]) {
-				charArrayAppend(sbuf, (char[]) o);
-			} else if (o instanceof short[]) {
-				shortArrayAppend(sbuf, (short[]) o);
-			} else if (o instanceof int[]) {
-				intArrayAppend(sbuf, (int[]) o);
-			} else if (o instanceof long[]) {
-				longArrayAppend(sbuf, (long[]) o);
-			} else if (o instanceof float[]) {
-				floatArrayAppend(sbuf, (float[]) o);
-			} else if (o instanceof double[]) {
-				doubleArrayAppend(sbuf, (double[]) o);
-			} else {
-				objectArrayAppend(sbuf, (Object[]) o, seenMap);
-			}
-		}
-	}
-
-	private static void safeObjectAppend(StringBuffer sbuf, Object o) {
-		try {
-			String oAsString = o.toString();
-			sbuf.append(oAsString);
-		} catch (Throwable t) {
-			sbuf.append("[FAILED toString()]");
-		}
-
-	}
-
-	private static void objectArrayAppend(StringBuffer sbuf, Object[] a, Map<Object, Object> seenMap) {
-		sbuf.append('[');
-		if (!seenMap.containsKey(a)) {
-			seenMap.put(a, null);
-			final int len = a.length;
-			for (int i = 0; i < len; i++) {
-				deeplyAppendParameter(sbuf, a[i], seenMap);
-				if (i != len - 1)
-					sbuf.append(", ");
-			}
-			// allow repeats in siblings
-			seenMap.remove(a);
-		} else {
-			sbuf.append("...");
-		}
-		sbuf.append(']');
-	}
-
-	private static void booleanArrayAppend(StringBuffer sbuf, boolean[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void byteArrayAppend(StringBuffer sbuf, byte[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void charArrayAppend(StringBuffer sbuf, char[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void shortArrayAppend(StringBuffer sbuf, short[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void intArrayAppend(StringBuffer sbuf, int[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void longArrayAppend(StringBuffer sbuf, long[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void floatArrayAppend(StringBuffer sbuf, float[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	private static void doubleArrayAppend(StringBuffer sbuf, double[] a) {
-		sbuf.append('[');
-		final int len = a.length;
-		for (int i = 0; i < len; i++) {
-			sbuf.append(a[i]);
-			if (i != len - 1)
-				sbuf.append(", ");
-		}
-		sbuf.append(']');
-	}
-
-	final static boolean isEscapedDelimeter(String messagePattern, int delimeterStartIndex) {
-
-		if (delimeterStartIndex == 0) {
-			return false;
-		}
-		char potentialEscape = messagePattern.charAt(delimeterStartIndex - 1);
-		if (potentialEscape == ESCAPE_CHAR) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	final static boolean isDoubleEscaped(String messagePattern, int delimeterStartIndex) {
-		if (delimeterStartIndex >= 2 && messagePattern.charAt(delimeterStartIndex - 2) == ESCAPE_CHAR) {
-			return true;
-		} else {
-			return false;
-		}
-	}
-}

+ 0 - 14
cooleshow-payment/payment-server/src/main/resources/bootstrap-dev.properties

@@ -1,14 +0,0 @@
-#\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=6f8374a9-598f-4889-bb17-476070ffb8de
-#\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=payment
-#\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 - 28
cooleshow-payment/pom.xml

@@ -1,28 +0,0 @@
-<?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">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>com.yonge.cooleshow</groupId>
-        <artifactId>cooleshow</artifactId>
-        <version>1.0</version>
-    </parent>
-
-    <groupId>com.yonge.cooleshow</groupId>
-    <artifactId>cooleshow-payment</artifactId>
-    <version>1.0</version>
-    <packaging>pom</packaging>
-    <name>cooleshow-payment</name>
-
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    </properties>
-
-    <modules>
-        <module>payment-server</module>
-        <module>payment-api</module>
-    </modules>
-
-</project>

+ 0 - 86
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/OrderDetailController.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.Condition;
-import com.yonge.cooleshow.common.controller.BaseController;
-import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.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.OrderDetailVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
-import com.yonge.cooleshow.biz.dal.entity.OrderDetail;
-import com.yonge.cooleshow.biz.dal.service.OrderDetailService;
-
-@RestController
-@RequestMapping("/orderDetail")
-@Api(value = "平台订单表", tags = "平台订单表")
-public class OrderDetailController extends BaseController {
-
-    @Autowired
-    private OrderDetailService orderDetailService;
-
-	/**
-     * 查询单条
-     */
-    @GetMapping("/detail/{id}")
-    @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<OrderDetailVo> detail(@PathVariable("id") Long id) {
-    	return succeed(orderDetailService.detail(id));
-	}
-    
-    /**
-     * 查询分页
-     */
-    @PostMapping("/page")
-    @ApiOperation(value = "查询分页", notes = "传入orderDetailSearch")
-    public HttpResponseResult<PageInfo<OrderDetailVo>> page(@RequestBody OrderDetailSearch query) {
-		IPage<OrderDetailVo> pages = orderDetailService.selectPage(Condition.getPage(query), query);
-        return succeed(Condition.pageInfo(pages));
-	}
-    
-    /**
-	 * 新增
-	 */
-	@PostMapping("/save")
-	@ApiOperation(value = "新增", notes = "传入orderDetail")
-	public HttpResponseResult save(@Valid @RequestBody OrderDetail orderDetail) {
-    	return status(orderDetailService.save(orderDetail));
-	}
-    
-    /**
-	 * 修改
-	 */
-	@PostMapping("/update")
-	@ApiOperation(value = "修改", notes = "传入orderDetail")
-	public HttpResponseResult update(@Valid @RequestBody OrderDetail orderDetail) {
-        return status(orderDetailService.updateById(orderDetail));
-	}
-    
-    /**
-	 * 新增或修改
-	 */
-    @PostMapping("/submit")
-    @ApiOperation(value = "新增或修改", notes = "传入orderDetail")
-	public HttpResponseResult submit(@Valid @RequestBody OrderDetail orderDetail) {
-        return status(orderDetailService.saveOrUpdate(orderDetail));
-    }
-
- 	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public HttpResponseResult remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        if (StringUtil.isEmpty(ids)) {
-			return failed("参数不能为空");
-		}
-		return status(orderDetailService.removeByIds(StringUtil.toLongList(ids)));
-	}
-}

+ 17 - 17
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/OrderController.java → cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderController.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.admin.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import com.yonge.cooleshow.biz.dal.support.Condition;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -13,26 +14,25 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
-import com.yonge.cooleshow.biz.dal.vo.OrderVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.Order;
-import com.yonge.cooleshow.biz.dal.service.OrderService;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 
 @RestController
-@RequestMapping("/order")
+@RequestMapping("/userOrder")
 @Api(value = "平台订单表", tags = "平台订单表")
-public class OrderController extends BaseController {
+public class UserOrderController extends BaseController {
 
     @Autowired
-    private OrderService orderService;
+    private UserOrderService userOrderService;
 
 	/**
      * 查询单条
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<OrderVo> detail(@PathVariable("id") Long id) {
-    	return succeed(orderService.detail(id));
+    public HttpResponseResult<UserOrderVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderService.detail(id));
 	}
     
     /**
@@ -40,8 +40,8 @@ public class OrderController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入orderSearch")
-    public HttpResponseResult<PageInfo<OrderVo>> page(@RequestBody OrderSearch query) {
-		IPage<OrderVo> pages = orderService.selectPage(Condition.getPage(query), query);
+    public HttpResponseResult<PageInfo<UserOrderVo>> page(@RequestBody OrderSearch query) {
+		IPage<UserOrderVo> pages = userOrderService.selectPage(Condition.getPage(query), query);
         return succeed(Condition.pageInfo(pages));
 	}
     
@@ -50,8 +50,8 @@ public class OrderController extends BaseController {
 	 */
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入order")
-	public HttpResponseResult save(@Valid @RequestBody Order order) {
-    	return status(orderService.save(order));
+	public HttpResponseResult save(@Valid @RequestBody UserOrder userOrder) {
+    	return status(userOrderService.save(userOrder));
 	}
     
     /**
@@ -59,8 +59,8 @@ public class OrderController extends BaseController {
 	 */
 	@PostMapping("/update")
 	@ApiOperation(value = "修改", notes = "传入order")
-	public HttpResponseResult update(@Valid @RequestBody Order order) {
-        return status(orderService.updateById(order));
+	public HttpResponseResult update(@Valid @RequestBody UserOrder userOrder) {
+        return status(userOrderService.updateById(userOrder));
 	}
     
     /**
@@ -68,8 +68,8 @@ public class OrderController extends BaseController {
 	 */
     @PostMapping("/submit")
     @ApiOperation(value = "新增或修改", notes = "传入order")
-	public HttpResponseResult submit(@Valid @RequestBody Order order) {
-        return status(orderService.saveOrUpdate(order));
+	public HttpResponseResult submit(@Valid @RequestBody UserOrder userOrder) {
+        return status(userOrderService.saveOrUpdate(userOrder));
     }
 
  	/**
@@ -81,6 +81,6 @@ public class OrderController extends BaseController {
         if (StringUtil.isEmpty(ids)) {
 			return failed("参数不能为空");
 		}
-		return status(orderService.removeByIds(StringUtil.toLongList(ids)));
+		return status(userOrderService.removeByIds(StringUtil.toLongList(ids)));
 	}
 }

+ 17 - 17
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/OrderRefundsController.java → cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/UserOrderRefundsController.java

@@ -13,26 +13,26 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 
-import com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.OrderRefunds;
-import com.yonge.cooleshow.biz.dal.service.OrderRefundsService;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
 
 @RestController
-@RequestMapping("/orderRefunds")
+@RequestMapping("/UserOrderRefunds")
 @Api(value = "用户退款表", tags = "用户退款表")
-public class OrderRefundsController extends BaseController {
+public class UserOrderRefundsController extends BaseController {
 
     @Autowired
-    private OrderRefundsService orderRefundsService;
+    private UserOrderRefundsService userOrderRefundsService;
 
 	/**
      * 查询单条
      */
     @GetMapping("/detail/{id}")
     @ApiOperation(value = "详情", notes = "传入id")
-    public HttpResponseResult<OrderRefundsVo> detail(@PathVariable("id") Long id) {
-    	return succeed(orderRefundsService.detail(id));
+    public HttpResponseResult<UserOrderRefundsVo> detail(@PathVariable("id") Long id) {
+    	return succeed(userOrderRefundsService.detail(id));
 	}
     
     /**
@@ -40,8 +40,8 @@ public class OrderRefundsController extends BaseController {
      */
     @PostMapping("/page")
     @ApiOperation(value = "查询分页", notes = "传入orderRefundsSearch")
-    public HttpResponseResult<PageInfo<OrderRefundsVo>> page(@RequestBody OrderRefundsSearch query) {
-		IPage<OrderRefundsVo> pages = orderRefundsService.selectPage(Condition.getPage(query), query);
+    public HttpResponseResult<PageInfo<UserOrderRefundsVo>> page(@RequestBody OrderRefundsSearch query) {
+		IPage<UserOrderRefundsVo> pages = userOrderRefundsService.selectPage(Condition.getPage(query), query);
         return succeed(Condition.pageInfo(pages));
 	}
     
@@ -50,8 +50,8 @@ public class OrderRefundsController extends BaseController {
 	 */
 	@PostMapping("/save")
 	@ApiOperation(value = "新增", notes = "传入orderRefunds")
-	public HttpResponseResult save(@Valid @RequestBody OrderRefunds orderRefunds) {
-    	return status(orderRefundsService.save(orderRefunds));
+	public HttpResponseResult save(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
+    	return status(userOrderRefundsService.save(userOrderRefunds));
 	}
     
     /**
@@ -59,8 +59,8 @@ public class OrderRefundsController extends BaseController {
 	 */
 	@PostMapping("/update")
 	@ApiOperation(value = "修改", notes = "传入orderRefunds")
-	public HttpResponseResult update(@Valid @RequestBody OrderRefunds orderRefunds) {
-        return status(orderRefundsService.updateById(orderRefunds));
+	public HttpResponseResult update(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
+        return status(userOrderRefundsService.updateById(userOrderRefunds));
 	}
     
     /**
@@ -68,8 +68,8 @@ public class OrderRefundsController extends BaseController {
 	 */
     @PostMapping("/submit")
     @ApiOperation(value = "新增或修改", notes = "传入orderRefunds")
-	public HttpResponseResult submit(@Valid @RequestBody OrderRefunds orderRefunds) {
-        return status(orderRefundsService.saveOrUpdate(orderRefunds));
+	public HttpResponseResult submit(@Valid @RequestBody UserOrderRefunds userOrderRefunds) {
+        return status(userOrderRefundsService.saveOrUpdate(userOrderRefunds));
     }
 
  	/**
@@ -81,6 +81,6 @@ public class OrderRefundsController extends BaseController {
         if (StringUtil.isEmpty(ids)) {
 			return failed("参数不能为空");
 		}
-		return status(orderRefundsService.removeByIds(StringUtil.toLongList(ids)));
+		return status(userOrderRefundsService.removeByIds(StringUtil.toLongList(ids)));
 	}
 }

+ 5 - 0
cooleshow-user/user-biz/pom.xml

@@ -61,6 +61,11 @@
             <artifactId>auth-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.huifu.adapay</groupId>
+            <artifactId>adapay-java-sdk</artifactId>
+            <version>1.2.10</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 11
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/config/HuifuConfiguration.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/config/HuifuConfiguration.java

@@ -1,20 +1,11 @@
-package com.yonge.cooleshow.payment.config;
+package com.yonge.cooleshow.biz.dal.config;
 
 import com.huifu.adapay.Adapay;
 import com.huifu.adapay.model.MerConfig;
-import com.yonge.cooleshow.payment.props.HuifuProperties;
+import com.yonge.cooleshow.biz.dal.props.HuifuProperties;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.web.cors.reactive.CorsUtils;
-import org.springframework.web.server.ServerWebExchange;
-import org.springframework.web.server.WebFilter;
-import org.springframework.web.server.WebFilterChain;
 
 /**
  * 路由配置信息

+ 20 - 20
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/SysConfigConstant.java

@@ -19,48 +19,48 @@ public interface SysConfigConstant {
      * @updateTime 2022/3/24 10:20
      */
     String OPEN_LIVE_OVER_CLASS = "open_list_over_class";
-
-    /**
-     * 直播服务费
-     */
-    String LIVE_SERVICE_RATE = "live_service_rate";
     /***
      * 平台提现手续费
      * @author liweifan
      * @updateTime 2022/3/24 17:15
      */
     String WITHDRAWAL_SERVICE_FEE = "withdrawal_service_fee";
-
+    /**
+     * 陪练课服务费
+     */
+    String PRACTICE_SERVICE_FEE = "practice_service_fee";
+    /**
+     * 陪练课可选时长配置
+     */
+    String PRACTICE_TIMES_SETTING = "practice_times_setting";
+    /**
+     * 直播课服务费
+     */
+    String LIVE_SERVICE_RATE = "live_service_rate";
+    /**
+     * 视频课服务费
+     */
+    String VIDEO_LESSON_SERVICE_FEE = "video_lesson_service_fee";
+    /**
+     * 乐谱服务费
+     */
+    String MUSIC_SHEET_SERVICE_FEE = "music_sheet_service_fee";
     /**
      * 提前XX分钟创建/进入直播房间的时间
      */
     String PRE_CREATE_LIVE_ROOM_MINUTE = "pre_create_live_room_minute";
-
     /**
      * 提前XX分钟创建/进入陪练课房间时间
      */
     String PRE_CREATE_PRACTICE_ROOM_MINUTE = "pre_create_practice_room_minute";
-
     /**
      * 直播结束后,XX分钟关闭房间
      */
     String DESTROY_EXPIRED_LIVE_ROOM_MINUTE = "destroy_expired_live_room_minute";
-
     /**
      * 陪练课结束后,XX分钟关闭房间
      */
     String DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE = "destroy_expired_practice_room_minute";
-
-    /**
-     * 陪练课提现手续费
-     */
-    String PRACTICE_SERVICE_FEE = "practice_service_fee";
-
-    /**
-     * 陪练课可选时长配置
-     */
-    String PRACTICE_TIMES_SETTING = "practice_times_setting";
-
     /**
      * 课程结束后,XX天后结算课酬
      */

+ 13 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/OrderDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java

@@ -4,27 +4,33 @@ 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.UserOrder;
 import org.apache.ibatis.annotations.Param;
-import com.yonge.cooleshow.biz.dal.entity.Order;
-import com.yonge.cooleshow.biz.dal.vo.OrderVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 
 
-public interface OrderDao extends BaseMapper<Order>{
+public interface UserOrderDao extends BaseMapper<UserOrder>{
 	/**
-	 * 查询详情
+	 * 查询详情-通过id
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
 	 */
-	OrderVo detail(@Param("id") Long id);
-
+	UserOrderVo detailById(@Param("id") Long id);
+	/**
+	 * 查询详情-通过订单号
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
+	 */
+	UserOrderVo detailByOrderNo(@Param("orderNo") String orderNo);
 	/**
 	 * 分页查询
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
 	 */
-	List<OrderVo> selectPage(@Param("page") IPage page, @Param("param") OrderSearch order);
+	List<UserOrderVo> selectPage(@Param("page") IPage page, @Param("param") OrderSearch order);
 	
 }

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/OrderDetailDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java

@@ -5,19 +5,19 @@ 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.OrderDetail;
-import com.yonge.cooleshow.biz.dal.vo.OrderDetailVo;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
 
 
-public interface OrderDetailDao extends BaseMapper<OrderDetail>{
+public interface UserOrderDetailDao extends BaseMapper<UserOrderDetail>{
 	/**
 	 * 查询详情
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
 	 */
-	OrderDetailVo detail(@Param("id") Long id);
+	UserOrderDetailVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
@@ -25,6 +25,6 @@ public interface OrderDetailDao extends BaseMapper<OrderDetail>{
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
 	 */
-	List<OrderDetailVo> selectPage(@Param("page") IPage page, @Param("param") OrderDetailSearch orderDetail);
+	List<UserOrderDetailVo> selectPage(@Param("page") IPage page, @Param("param") OrderDetailSearch orderDetail);
 	
 }

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

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

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/OrderRefundsDao.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderRefundsDao.java

@@ -5,19 +5,19 @@ 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.OrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo;
+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 OrderRefundsDao extends BaseMapper<OrderRefunds>{
+public interface UserOrderRefundsDao extends BaseMapper<UserOrderRefunds>{
 	/**
 	 * 查询详情
      * @author liweifan
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
 	 */
-	OrderRefundsVo detail(@Param("id") Long id);
+	UserOrderRefundsVo detail(@Param("id") Long id);
 
 	/**
 	 * 分页查询
@@ -25,6 +25,6 @@ public interface OrderRefundsDao extends BaseMapper<OrderRefunds>{
      * @date 2022-03-30 13:53:51
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo
 	 */
-	List<OrderRefundsVo> selectPage(@Param("page") IPage page, @Param("param") OrderRefundsSearch orderRefunds);
+	List<UserOrderRefundsVo> selectPage(@Param("page") IPage page, @Param("param") OrderRefundsSearch orderRefunds);
 	
 }

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

@@ -0,0 +1,70 @@
+package com.yonge.cooleshow.biz.dal.dto.req;
+
+import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 下单支付请求
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:55
+ */
+@ApiModel(value = "OrderPayReq对象", description = "下单支付请求")
+public class OrderPayReq {
+    @NotBlank(message = "订单号不能为空")
+    @ApiModelProperty(value = "订单号 ", required = true)
+    private String orderNo;
+    @NotNull(message = "支付渠道不能为空")
+    @ApiModelProperty(value = "支付渠道:  alipay 支付宝  wx_lite 微信 ", required = true)
+    private PayChannelEnum payChannel;
+    @ApiModelProperty(value = "用户id ")
+    private Long userId;
+    @ApiModelProperty(value = "用户端公网ip ")
+    private String ipAddress;
+    @ApiModelProperty(value = "微信用户openId(微信支付必传)")
+    private String openId;
+
+    public String getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(String orderNo) {
+        this.orderNo = orderNo;
+    }
+
+    public PayChannelEnum getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(PayChannelEnum payChannel) {
+        this.payChannel = payChannel;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getIpAddress() {
+        return ipAddress;
+    }
+
+    public void setIpAddress(String ipAddress) {
+        this.ipAddress = ipAddress;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+}

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

@@ -0,0 +1,137 @@
+package com.yonge.cooleshow.biz.dal.dto.req;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * 下单请求
+ *
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:55
+ */
+@ApiModel(value = "OrderReq对象", description = "下单请求")
+public class OrderReq {
+    @ApiModelProperty(value = "用户id ")
+    private Long userId;
+    @NotBlank(message = "订单名称不能为空")
+    @ApiModelProperty(value = "订单名称 ", required = true)
+    private String orderName;
+    @ApiModelProperty(value = "订单描述信息 ")
+    private String orderDesc;
+    @NotNull(message = "订单类型不能为空")
+    @ApiModelProperty(value = "订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ", required = true)
+    private OrderTypeEnum orderType;
+    @ApiModelProperty(value = "业务id ")
+    private Long bizId;
+    @ApiModelProperty(value = "业务内容 ")
+    private String bizContent;
+    @NotNull(message = "原价不能为空")
+    @ApiModelProperty(value = "原价 ", required = true)
+    private BigDecimal originalPrice;
+    @NotNull(message = "预计价格不能为空")
+    @ApiModelProperty(value = "预计价格 ", required = true)
+    private BigDecimal expectPrice;
+    @NotNull(message = "实际价格不能为空")
+    @ApiModelProperty(value = "实际价格 ", required = true)
+    private BigDecimal actualPrice;
+    @NotNull(message = "优惠金额不能为空")
+    @ApiModelProperty(value = "优惠金额 ", required = true)
+    private BigDecimal couponAmount;
+
+    @ApiModelProperty("用户备注 ")
+    private String userNote;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getOrderName() {
+        return orderName;
+    }
+
+    public void setOrderName(String orderName) {
+        this.orderName = orderName;
+    }
+
+    public String getOrderDesc() {
+        return orderDesc;
+    }
+
+    public void setOrderDesc(String orderDesc) {
+        this.orderDesc = orderDesc;
+    }
+
+    public OrderTypeEnum getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
+    }
+
+    public Long getBizId() {
+        return bizId;
+    }
+
+    public void setBizId(Long bizId) {
+        this.bizId = bizId;
+    }
+
+    public String getBizContent() {
+        return bizContent;
+    }
+
+    public void setBizContent(String bizContent) {
+        this.bizContent = bizContent;
+    }
+
+    public BigDecimal getOriginalPrice() {
+        return originalPrice;
+    }
+
+    public void setOriginalPrice(BigDecimal originalPrice) {
+        this.originalPrice = originalPrice;
+    }
+
+    public BigDecimal getExpectPrice() {
+        return expectPrice;
+    }
+
+    public void setExpectPrice(BigDecimal expectPrice) {
+        this.expectPrice = expectPrice;
+    }
+
+    public BigDecimal getActualPrice() {
+        return actualPrice;
+    }
+
+    public void setActualPrice(BigDecimal actualPrice) {
+        this.actualPrice = actualPrice;
+    }
+
+    public BigDecimal getCouponAmount() {
+        return couponAmount;
+    }
+
+    public void setCouponAmount(BigDecimal couponAmount) {
+        this.couponAmount = couponAmount;
+    }
+
+    public String getUserNote() {
+        return userNote;
+    }
+
+    public void setUserNote(String userNote) {
+        this.userNote = userNote;
+    }
+}

+ 30 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/TeacherSearch.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.support.Query;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -12,8 +13,20 @@ import io.swagger.annotations.ApiModelProperty;
 public class TeacherSearch extends Query {
     @ApiModelProperty(value = "老师编号/昵称/电话")
     private String search;
-    @ApiModelProperty(value = "老师类型")
+    @ApiModelProperty(value = "老师类型 TOURIST 游客 ENTRY 认证老师 MUSICIAN 平台音乐人")
     private String teacherType;
+    /***
+     * 是否入驻老师
+     * @author liweifan
+     * @updateTime 2022/4/1 17:20
+     */
+    private YesOrNoEnum entryFlag;
+    /***
+     * 是否音乐人
+     * @author liweifan
+     * @updateTime 2022/4/1 17:20
+     */
+    private YesOrNoEnum musicianFlag;
 
     public String getSearch() {
         return search;
@@ -30,4 +43,20 @@ public class TeacherSearch extends Query {
     public void setTeacherType(String teacherType) {
         this.teacherType = teacherType;
     }
+
+    public YesOrNoEnum getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(YesOrNoEnum entryFlag) {
+        this.entryFlag = entryFlag;
+    }
+
+    public YesOrNoEnum getMusicianFlag() {
+        return musicianFlag;
+    }
+
+    public void setMusicianFlag(YesOrNoEnum musicianFlag) {
+        this.musicianFlag = musicianFlag;
+    }
 }

+ 23 - 78
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/Order.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -4,6 +4,9 @@ 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.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -16,9 +19,9 @@ import java.math.BigDecimal;
 /**
  * 平台订单表
  */
-@TableName("order")
-@ApiModel(value = "Order对象", description = "平台订单表")
-public class Order implements Serializable {
+@TableName("user_order")
+@ApiModel(value = "UserOrder对象", description = "平台订单表")
+public class UserOrder implements Serializable {
 	private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
@@ -27,7 +30,7 @@ public class Order implements Serializable {
     private String orderNo;
     @ApiModelProperty("买家id ")
 	@TableField(value = "user_id_")
-    private Integer userId;
+    private Long userId;
     @ApiModelProperty("卖家id ")
 	@TableField(value = "merch_id_")
     private Long merchId;
@@ -39,7 +42,7 @@ public class Order implements Serializable {
     private String orderDesc;
     @ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 ")
 	@TableField(value = "status_")
-    private String status;
+    private OrderStatusEnum status;
     @ApiModelProperty("原价 ")
 	@TableField(value = "original_price_")
     private BigDecimal originalPrice;
@@ -64,9 +67,9 @@ public class Order implements Serializable {
     @ApiModelProperty("用户备注 ")
 	@TableField(value = "user_note_")
     private String userNote;
-    @ApiModelProperty("订单类型 1、开通会员  2、陪练课购买  3、直播课购买 4、视频课购买 5、单曲点播 ")
+    @ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播")
 	@TableField(value = "order_type_")
-    private String orderType;
+    private OrderTypeEnum orderType;
     @ApiModelProperty("下单时间 ")
 	@TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -86,23 +89,6 @@ public class Order implements Serializable {
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date updateTime;
-    @ApiModelProperty("交易流水号 ")
-	@TableField(value = "trans_no_")
-    private String transNo;
-    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
-	@TableField(value = "pay_channel_")
-    private String payChannel;
-    @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
-	@TableField(value = "pay_amt_")
-    private BigDecimal payAmt;
-    @ApiModelProperty("到账时间 ")
-	@TableField(value = "arrival_time_")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
-    private Date arrivalTime;
-    @ApiModelProperty("失败信息 ")
-	@TableField(value = "pay_fail_msg_")
-    private String payFailMsg;
 
 	public Long getId() {
         return id;
@@ -119,16 +105,16 @@ public class Order implements Serializable {
     public void setOrderNo(String orderNo) {
         this.orderNo = orderNo;
     }
-    
-	public Integer getUserId() {
+
+    public Long getUserId() {
         return userId;
     }
 
-    public void setUserId(Integer userId) {
+    public void setUserId(Long userId) {
         this.userId = userId;
     }
-    
-	public Long getMerchId() {
+
+    public Long getMerchId() {
         return merchId;
     }
 
@@ -152,14 +138,6 @@ public class Order implements Serializable {
         this.orderDesc = orderDesc;
     }
     
-	public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-    
 	public BigDecimal getOriginalPrice() {
         return originalPrice;
     }
@@ -224,14 +202,6 @@ public class Order implements Serializable {
         this.userNote = userNote;
     }
     
-	public String getOrderType() {
-        return orderType;
-    }
-
-    public void setOrderType(String orderType) {
-        this.orderType = orderType;
-    }
-    
 	public Date getCreateTime() {
         return createTime;
     }
@@ -263,45 +233,20 @@ public class Order implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-    
-	public String getTransNo() {
-        return transNo;
-    }
 
-    public void setTransNo(String transNo) {
-        this.transNo = transNo;
-    }
-    
-	public String getPayChannel() {
-        return payChannel;
-    }
-
-    public void setPayChannel(String payChannel) {
-        this.payChannel = payChannel;
-    }
-    
-	public BigDecimal getPayAmt() {
-        return payAmt;
+    public OrderStatusEnum getStatus() {
+        return status;
     }
 
-    public void setPayAmt(BigDecimal payAmt) {
-        this.payAmt = payAmt;
-    }
-    
-	public Date getArrivalTime() {
-        return arrivalTime;
+    public void setStatus(OrderStatusEnum status) {
+        this.status = status;
     }
 
-    public void setArrivalTime(Date arrivalTime) {
-        this.arrivalTime = arrivalTime;
-    }
-    
-	public String getPayFailMsg() {
-        return payFailMsg;
+    public OrderTypeEnum getOrderType() {
+        return orderType;
     }
 
-    public void setPayFailMsg(String payFailMsg) {
-        this.payFailMsg = payFailMsg;
+    public void setOrderType(OrderTypeEnum orderType) {
+        this.orderType = orderType;
     }
-    
 }

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/OrderDetail.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderDetail.java

@@ -15,9 +15,9 @@ import org.springframework.format.annotation.DateTimeFormat;
 /**
  * 平台订单表
  */
-@TableName("order_detail")
-@ApiModel(value = "OrderDetail对象", description = "平台订单表")
-public class OrderDetail implements Serializable {
+@TableName("user_order_detail")
+@ApiModel(value = "UserOrderDetail对象", description = "平台订单表")
+public class UserOrderDetail implements Serializable {
 	private static final long serialVersionUID = 1L;
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;

+ 126 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderPayment.java

@@ -0,0 +1,126 @@
+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_payment")
+@ApiModel(value = "UserOrderPayment对象", description = "平台订单支付表")
+public class UserOrderPayment implements Serializable {
+	private static final long serialVersionUID = 1L;
+    @TableId(value = "id_", type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty("订单号 ")
+	@TableField(value = "order_no_")
+    private String orderNo;
+    @ApiModelProperty("交易流水号 ")
+	@TableField(value = "trans_no_")
+    private String transNo;
+    @ApiModelProperty("支付渠道:  alipay 支付宝  wx_lite 微信 ")
+	@TableField(value = "pay_channel_")
+    private String payChannel;
+    @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
+	@TableField(value = "pay_amt_")
+    private BigDecimal payAmt;
+    @ApiModelProperty("支付详情信息(用于拉起支付) ")
+	@TableField(value = "pay_info")
+    private String payInfo;
+    @ApiModelProperty("失效时间(超过支付失效时间的订单,会取出来判断是否已经关单,最大失效时间往前推5分钟) ")
+	@TableField(value = "invalid_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date invalidTime;
+    @ApiModelProperty("到账时间 ")
+	@TableField(value = "arrival_time_")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    private Date arrivalTime;
+    @ApiModelProperty("失败信息 ")
+	@TableField(value = "pay_fail_msg_")
+    private String payFailMsg;
+
+	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 getTransNo() {
+        return transNo;
+    }
+
+    public void setTransNo(String transNo) {
+        this.transNo = transNo;
+    }
+    
+	public String getPayChannel() {
+        return payChannel;
+    }
+
+    public void setPayChannel(String payChannel) {
+        this.payChannel = payChannel;
+    }
+    
+	public BigDecimal getPayAmt() {
+        return payAmt;
+    }
+
+    public void setPayAmt(BigDecimal payAmt) {
+        this.payAmt = payAmt;
+    }
+    
+	public String getPayInfo() {
+        return payInfo;
+    }
+
+    public void setPayInfo(String payInfo) {
+        this.payInfo = payInfo;
+    }
+    
+	public Date getInvalidTime() {
+        return invalidTime;
+    }
+
+    public void setInvalidTime(Date invalidTime) {
+        this.invalidTime = invalidTime;
+    }
+    
+	public Date getArrivalTime() {
+        return arrivalTime;
+    }
+
+    public void setArrivalTime(Date arrivalTime) {
+        this.arrivalTime = arrivalTime;
+    }
+    
+	public String getPayFailMsg() {
+        return payFailMsg;
+    }
+
+    public void setPayFailMsg(String payFailMsg) {
+        this.payFailMsg = payFailMsg;
+    }
+    
+}

+ 3 - 3
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/OrderRefunds.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrderRefunds.java

@@ -16,9 +16,9 @@ import java.math.BigDecimal;
 /**
  * 用户退款表
  */
-@TableName("order_refunds")
-@ApiModel(value = "OrderRefunds对象", description = "用户退款表")
-public class OrderRefunds implements Serializable {
+@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;

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/CacheNameEnum.java

@@ -14,7 +14,10 @@ import java.time.Duration;
  */
 public enum CacheNameEnum implements BaseEnum<String, CacheNameEnum> {
     TEACHER_HOME_TOTAL("老师首页统计缓存"),
-    STUDENT_HOME_TOTAL("学生首页统计缓存")
+    STUDENT_HOME_TOTAL("学生首页统计缓存"),
+
+    LOCK_EXECUTE_ORDER("用户下单锁"),
+    LOCK_PAY_ORDER("用户付款锁")
     ;
     /***
      * 缓存描述

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

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:59
+ */
+public enum OrderStatusEnum implements BaseEnum<String, OrderStatusEnum> {
+    WAIT_PAY("WAIT_PAY","待支付"),
+    PAYING("PAYING","支付中"),
+    PAID("PAID","已付款"),
+    CLOSE("CLOSE","已关闭")
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    OrderStatusEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+}

+ 43 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/OrderTypeEnum.java

@@ -0,0 +1,43 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 订单类型
+ * @Author: liweifan
+ * @Data: 2022/3/31 14:59
+ */
+public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
+    VIP("VIP","开通会员"),
+    PRACTICE("PRACTICE","陪练课购买"),
+    LIVE("LIVE","直播课购买"),
+    VIDEO("VIDEO","视频课购买"),
+    MUSIC("MUSIC","单曲点播")
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    OrderTypeEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+}

+ 40 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/PayChannelEnum.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+/**
+ * 支付渠道
+ * @author liweifan
+ * @updateTime 2022/3/31 11:30
+ */
+public enum PayChannelEnum implements BaseEnum<String, PayChannelEnum> {
+    alipay("alipay","支付宝APP支付"),
+    wx_lite("wx_lite","微信APP支付")
+    ;
+    @EnumValue
+    private String code;
+    private String msg;
+
+    PayChannelEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+}

+ 22 - 5
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/props/HuifuProperties.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/props/HuifuProperties.java

@@ -1,4 +1,4 @@
-package com.yonge.cooleshow.payment.props;
+package com.yonge.cooleshow.biz.dal.props;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
@@ -9,14 +9,31 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
 @RefreshScope
 @ConfigurationProperties("huifu")
 public class HuifuProperties {
+    /***
+     * 汇付 控制台 主页面应用的app_id
+     * @author liweifan
+     * @updateTime 2022/3/31 11:19
+     */
+    private String appId;
+    /***
+     * 汇付 控制台->商户信息管理->证书管理中的API Key(prod模式的API KEY)
+     * @author liweifan
+     * @updateTime 2022/3/31 11:19
+     */
     private String apiKey;
-
+    /***
+     * 汇付 控制台->商户信息管理->证书管理中的API Key(mock模式的API KEY)
+     * @author liweifan
+     * @updateTime 2022/3/31 11:19
+     */
     private String mockApiKey;
-
+    /***
+     * 商户发起请求时,用于请求参数加签所需要的RSA私钥
+     * @author liweifan
+     * @updateTime 2022/3/31 11:24
+     */
     private String rsaPrivateKey;
 
-    private String appId;
-
     public String getApiKey() {
         return apiKey;
     }

+ 38 - 15
cooleshow-payment/payment-server/src/main/java/com/yonge/cooleshow/payment/sdk/PaymentSdk.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/PaymentSdk.java

@@ -1,17 +1,24 @@
-package com.yonge.cooleshow.payment.sdk;
+package com.yonge.cooleshow.biz.dal.sdk;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.huifu.adapay.model.Payment;
 import com.huifu.adapay.model.PaymentConfirm;
-import com.yonge.cooleshow.payment.config.HuifuConfiguration;
-import com.yonge.cooleshow.payment.exception.ThirdpartyException;
+import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
+import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
+import com.yonge.cooleshow.biz.dal.service.impl.ImGroupMemberServiceImpl;
+import com.yonge.toolset.thirdparty.exception.ThirdpartyException;
+import com.yonge.toolset.utils.collection.MapUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 @Component
 public class PaymentSdk {
+    private final static Logger log = LoggerFactory.getLogger(PaymentSdk.class);
 
     /**
      * 执行一个支付交易
@@ -19,25 +26,41 @@ public class PaymentSdk {
      * @return 创建的支付对象
      * @throws Exception 异常
      */
-    public Map<String, Object> executePayment(Map<String, Object> paymentParams) throws Exception {
-        paymentParams.put("app_id", HuifuConfiguration.getHuifuProperties().getAppId());
-
-        //log.info("汇付[创建支付对象] Req:{}", paymentParams);
+    public Map<String, Object> executePayment(PaymentReq paymentReq) {
+        paymentReq.setApp_id(HuifuConfiguration.getHuifuProperties().getAppId());
+        //创建分账对象
+        Map<String, String> div_member = new HashMap<>();
+        div_member.put("member_id", "0");
+        div_member.put("amount", paymentReq.getPay_amt());
+        div_member.put("fee_flag", "Y");
+        List<Map<String, String>> div_members = Arrays.asList(div_member);
+        paymentReq.setDiv_members(JSONObject.toJSONString(div_members));
+
+        log.info("汇付[创建支付对象] Req:{}", JSONObject.toJSONString(paymentReq));
         //调用sdk方法,创建支付,得到支付对象
-        Map<String, Object> payment = Payment.create(paymentParams);
-        //log.info("汇付[创建支付对象] Resp:{}", payment);
-
-        String errorCode = (String) payment.get("error_code");
+        Map<String, Object> paymentParams = MapUtil.populateMap(new HashMap<>(), paymentReq);
+        Map<String, Object> res;
+        try {
+            res = Payment.create(paymentParams);
+        } catch (BaseAdaPayException e) {
+            throw new ThirdpartyException(e.getMessage());
+        }
+        if (null == res) {
+            throw new ThirdpartyException("请求失败");
+        }
+        log.info("汇付[创建支付对象] Resp:{}", res);
+        String errorCode = (String) res.get("error_code");
         if (null != errorCode) {
-            String errorMsg = (String) payment.get("error_msg");
+            String errorMsg = (String) res.get("error_msg");
             throw new ThirdpartyException(errorMsg);
         }
-        return payment;
+        return res;
     }
 
     /**
      * 创建确认对象
      * 创建支付确认对象适用于延时分账的场景
+     *
      * @return 查询的支付对象
      * @throws Exception 异常
      */

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/DeviceInfo.java

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.sdk.req;
+
+import java.io.Serializable;
+
+/**
+ * 交易设备信息
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:36
+ */
+public class DeviceInfo implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /***
+     * 交易设备所在的公网 IP
+     * @author liweifan
+     * @updateTime 2022/3/31 11:07
+     */
+    private String device_ip;
+
+    public String getDevice_ip() {
+        return device_ip;
+    }
+
+    public void setDevice_ip(String device_ip) {
+        this.device_ip = device_ip;
+    }
+}

+ 55 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/DivMember.java

@@ -0,0 +1,55 @@
+package com.yonge.cooleshow.biz.dal.sdk.req;
+
+import java.io.Serializable;
+
+/**
+ * 分账对象
+ * @Author: liweifan
+ * @Data: 2022/3/31 11:26
+ */
+public class DivMember implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 分账用户 Member对象 的 id;若是商户本身时,传入0
+     * @author liweifan
+     * @updateTime 2022/3/31 11:27
+     */
+    private String member_id;
+    /**
+     * 分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String amount;
+    /**
+     * 是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个
+     * @author liweifan
+     * @updateTime 2022/3/31 11:28
+     */
+    private String fee_flag;
+
+    public String getMember_id() {
+        return member_id;
+    }
+
+    public void setMember_id(String member_id) {
+        this.member_id = member_id;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getFee_flag() {
+        return fee_flag;
+    }
+
+    public void setFee_flag(String fee_flag) {
+        this.fee_flag = fee_flag;
+    }
+}

+ 5 - 40
cooleshow-payment/payment-api/src/main/java/com/yonge/cooleshow/payment/sdk/PaymentConfirmParam.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentConfirmParam.java

@@ -1,12 +1,15 @@
-package com.yonge.cooleshow.payment.sdk;
+package com.yonge.cooleshow.biz.dal.sdk.req;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @Author: liweifan
  * @Data: 2022/3/11 17:44
  */
-public class PaymentConfirmParam {
+public class PaymentConfirmParam implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     //Adapay生成的支付对象id
     private String payment_id;
     //请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
@@ -67,42 +70,4 @@ public class PaymentConfirmParam {
     public void setFee_mode(String fee_mode) {
         this.fee_mode = fee_mode;
     }
-
-    /***
-     * 分账对象
-     * @author liweifan
-     * @updateTime 2022/3/11 18:03
-     */
-    public class  DivMember{
-        //分账用户 Member对象 的 id;若是商户本身时,传入0
-        private String member_id;
-        //分账金额,精确到分,如0.50,1.00等,分账总金额必须等于主交易金额,金额不能为0.00
-        private String amount;
-        //是否手续费承担方,N-否,Y-是,手续费承担方有且只能有一个
-        private String fee_flag;
-
-        public String getMember_id() {
-            return member_id;
-        }
-
-        public void setMember_id(String member_id) {
-            this.member_id = member_id;
-        }
-
-        public String getAmount() {
-            return amount;
-        }
-
-        public void setAmount(String amount) {
-            this.amount = amount;
-        }
-
-        public String getFee_flag() {
-            return fee_flag;
-        }
-
-        public void setFee_flag(String fee_flag) {
-            this.fee_flag = fee_flag;
-        }
-    }
 }

+ 168 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/req/PaymentReq.java

@@ -0,0 +1,168 @@
+package com.yonge.cooleshow.biz.dal.sdk.req;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * 创建支付对象请求参数
+ * @Author: liweifan
+ * @Data: 2022/3/31 10:58
+ */
+public class PaymentReq implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /***
+     * 请求订单号,只能为英文、数字或者下划线的一种或多种组合,保证在app_id下唯一
+     * @author liweifan
+     * @updateTime 2022/3/31 11:00
+     */
+    private String order_no;
+    /***
+     * 控制台 主页面应用的app_id
+     * @author liweifan
+     * @updateTime 2022/3/31 11:00
+     */
+    private String app_id;
+    /***
+     * 支付渠道,参见 支付渠道
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String pay_channel;
+    /***
+     * 交易金额,必须大于0,保留两位小数点,如0.10、100.05等
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String pay_amt;
+    /***
+     * 商品标题
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String goods_title;
+    /***
+     * 商品描述信息,微信小程序和微信公众号该字段最大长度42个字符
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String goods_desc;
+    /***
+     * 分账对象信息列表,最多仅支持7个分账方,json 数组形式,详见 分账对象信息列表
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String div_members;
+    /***
+     * 订单附加说明
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String description;
+    /***
+     * 前端设备信息,详见 设备信息
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private DeviceInfo device_info;
+    /***
+     * 支付渠道额外参数,JSON格式,条件可输入,详见 支付渠道 expend参数
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private Map<String,Object> expend;
+    /***
+     * 异步通知地址,url为http/https路径,服务器POST回调,URL 上请勿附带参数
+     * @author liweifan
+     * @updateTime 2022/3/31 11:01
+     */
+    private String notify_url;
+
+    public String getOrder_no() {
+        return order_no;
+    }
+
+    public void setOrder_no(String order_no) {
+        this.order_no = order_no;
+    }
+
+    public String getApp_id() {
+        return app_id;
+    }
+
+    public void setApp_id(String app_id) {
+        this.app_id = app_id;
+    }
+
+    public String getPay_amt() {
+        return pay_amt;
+    }
+
+    public void setPay_amt(String pay_amt) {
+        this.pay_amt = pay_amt;
+    }
+
+    public String getGoods_title() {
+        return goods_title;
+    }
+
+    public void setGoods_title(String goods_title) {
+        this.goods_title = goods_title;
+    }
+
+    public String getGoods_desc() {
+        return goods_desc;
+    }
+
+    public void setGoods_desc(String goods_desc) {
+        this.goods_desc = goods_desc;
+    }
+
+    public String getDiv_members() {
+        return div_members;
+    }
+
+    public void setDiv_members(String div_members) {
+        this.div_members = div_members;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public DeviceInfo getDevice_info() {
+        return device_info;
+    }
+
+    public void setDevice_info(DeviceInfo device_info) {
+        this.device_info = device_info;
+    }
+
+    public Map<String, Object> getExpend() {
+        return expend;
+    }
+
+    public void setExpend(Map<String, Object> expend) {
+        this.expend = expend;
+    }
+
+    public String getNotify_url() {
+        return notify_url;
+    }
+
+    public void setNotify_url(String notify_url) {
+        this.notify_url = notify_url;
+    }
+
+    public String getPay_channel() {
+        return pay_channel;
+    }
+
+    public void setPay_channel(String pay_channel) {
+        this.pay_channel = pay_channel;
+    }
+}

+ 0 - 29
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/OrderService.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.OrderVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.entity.Order;
-
-/**
- * 平台订单表 服务类
- * @author liweifan
- * @date 2022-03-30
- */
-public interface OrderService extends IService<Order>  {
-
-	/**
-     * 查询详情
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-	OrderVo detail(Long id);
-
-    /**
-     * 分页查询
-     * @author liweifan
- 	 * @date 2022-03-30
-     */
-    IPage<OrderVo> selectPage(IPage<OrderVo> page, OrderSearch query);
-}

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/OrderDetailService.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java

@@ -2,28 +2,28 @@ 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.OrderDetailVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
-import com.yonge.cooleshow.biz.dal.entity.OrderDetail;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
 
 /**
  * 平台订单表 服务类
  * @author liweifan
  * @date 2022-03-30
  */
-public interface OrderDetailService extends IService<OrderDetail>  {
+public interface UserOrderDetailService extends IService<UserOrderDetail>  {
 
 	/**
      * 查询详情
      * @author liweifan
  	 * @date 2022-03-30
      */
-	OrderDetailVo detail(Long id);
+	UserOrderDetailVo detail(Long id);
 
     /**
      * 分页查询
      * @author liweifan
  	 * @date 2022-03-30
      */
-    IPage<OrderDetailVo> selectPage(IPage<OrderDetailVo> page, OrderDetailSearch query);
+    IPage<UserOrderDetailVo> selectPage(IPage<UserOrderDetailVo> page, OrderDetailSearch query);
 }

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

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+
+/**
+ * 平台订单支付表 服务类
+ *
+ * @author liweifan
+ * @date 2022-04-01
+ */
+public interface UserOrderPaymentService extends IService<UserOrderPayment> {
+
+}

+ 5 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/OrderRefundsService.java → cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundsService.java

@@ -2,28 +2,28 @@ 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.OrderRefundsVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.entity.OrderRefunds;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
 
 /**
  * 用户退款表 服务类
  * @author liweifan
  * @date 2022-03-30
  */
-public interface OrderRefundsService extends IService<OrderRefunds>  {
+public interface UserOrderRefundsService extends IService<UserOrderRefunds>  {
 
 	/**
      * 查询详情
      * @author liweifan
  	 * @date 2022-03-30
      */
-	OrderRefundsVo detail(Long id);
+	UserOrderRefundsVo detail(Long id);
 
     /**
      * 分页查询
      * @author liweifan
  	 * @date 2022-03-30
      */
-    IPage<OrderRefundsVo> selectPage(IPage<OrderRefundsVo> page, OrderRefundsSearch query);
+    IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query);
 }

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

@@ -0,0 +1,54 @@
+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.OrderReq;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+
+/**
+ * 平台订单表 服务类
+ * @author liweifan
+ * @date 2022-03-30
+ */
+public interface UserOrderService extends IService<UserOrder>  {
+
+	/**
+     * 查询详情 通过订单id
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+	UserOrderVo detail(Long id);
+	/**
+	 * 查询详情 通过订单号
+	 * @author liweifan
+	 * @date 2022-03-30
+	 */
+	UserOrderVo detail(String orderNo);
+	/**
+     * 分页查询
+     * @author liweifan
+ 	 * @date 2022-03-30
+     */
+    IPage<UserOrderVo> selectPage(IPage<UserOrderVo> page, OrderSearch query);
+	/***
+	 * 下单接口
+	 * @author liweifan
+	 * @param: orderReq
+	 * @updateTime 2022/3/31 15:42
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.entity.Order>
+	 */
+    HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq);
+	/***
+	 * 订单付款
+	 * @author liweifan
+	 * @param: payReq
+	 * @updateTime 2022/3/31 17:23
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult
+	 */
+    HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq);
+}

+ 19 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java

@@ -2,9 +2,13 @@ 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.OrderReq;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCheckRes;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 
 /**
  * 购买会员卡记录表 服务类
@@ -26,4 +30,19 @@ public interface VipCardRecordService extends IService<VipCardRecord>  {
  	 * @date 2022-03-30
      */
     IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query);
+	/***
+	 * 验证订单参数
+	 * @author liweifan
+	 * @param: orderReq
+	 * @updateTime 2022/3/31 15:47
+	 * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+	 */
+    HttpResponseResult<OrderCheckRes> checkOrder(OrderReq orderReq);
+	/***
+	 * 订单下单后操作
+	 * @author liweifan
+	 * @param: orderVo
+	 * @updateTime 2022/3/31 17:24
+	 */
+    void orderAfter(UserOrderVo orderVo);
 }

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

@@ -1,27 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.OrderDetail;
-import com.yonge.cooleshow.biz.dal.vo.OrderDetailVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
-import com.yonge.cooleshow.biz.dal.dao.OrderDetailDao;
-import com.yonge.cooleshow.biz.dal.service.OrderDetailService;
-
-
-@Service
-public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailDao, OrderDetail> implements OrderDetailService {
-
-	@Override
-    public OrderDetailVo detail(Long id) {
-        OrderDetailVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<OrderDetailVo> selectPage(IPage<OrderDetailVo> page, OrderDetailSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-	
-}

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

@@ -1,27 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.OrderRefunds;
-import com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderRefundsSearch;
-import com.yonge.cooleshow.biz.dal.dao.OrderRefundsDao;
-import com.yonge.cooleshow.biz.dal.service.OrderRefundsService;
-
-
-@Service
-public class OrderRefundsServiceImpl extends ServiceImpl<OrderRefundsDao, OrderRefunds> implements OrderRefundsService {
-
-	@Override
-    public OrderRefundsVo detail(Long id) {
-        OrderRefundsVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<OrderRefundsVo> selectPage(IPage<OrderRefundsVo> page, OrderRefundsSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-	
-}

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

@@ -1,27 +0,0 @@
-package com.yonge.cooleshow.biz.dal.service.impl;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-import com.yonge.cooleshow.biz.dal.entity.Order;
-import com.yonge.cooleshow.biz.dal.vo.OrderVo;
-import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
-import com.yonge.cooleshow.biz.dal.dao.OrderDao;
-import com.yonge.cooleshow.biz.dal.service.OrderService;
-
-
-@Service
-public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements OrderService {
-
-	@Override
-    public OrderVo detail(Long id) {
-        OrderVo detail = baseMapper.detail(id);
-        return detail;
-    }
-    
-     @Override
-    public IPage<OrderVo> selectPage(IPage<OrderVo> page, OrderSearch query){
-        return page.setRecords(baseMapper.selectPage(page, query));
-    }
-	
-}

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

@@ -76,6 +76,9 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     @Override
     public IPage<TeacherVo> selectPage(IPage<TeacherVo> page, TeacherSearch teacher) {
+        if(!StringUtil.isEmpty(teacher.getTeacherType())){
+
+        }
         return page.setRecords(baseMapper.selectPage(page, teacher));
     }
 

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

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderDetailSearch;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao;
+import com.yonge.cooleshow.biz.dal.service.UserOrderDetailService;
+
+
+@Service
+public class UserOrderDetailServiceImpl extends ServiceImpl<UserOrderDetailDao, UserOrderDetail> implements UserOrderDetailService {
+
+	@Override
+    public UserOrderDetailVo detail(Long id) {
+        UserOrderDetailVo detail = baseMapper.detail(id);
+        return detail;
+    }
+    
+     @Override
+    public IPage<UserOrderDetailVo> selectPage(IPage<UserOrderDetailVo> page, OrderDetailSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+}

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

@@ -0,0 +1,13 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderPaymentDao;
+import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
+
+
+@Service
+public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao, UserOrderPayment> implements UserOrderPaymentService {
+
+}

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

@@ -0,0 +1,27 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+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;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderRefundsDao;
+import com.yonge.cooleshow.biz.dal.service.UserOrderRefundsService;
+
+
+@Service
+public class UserOrderRefundsServiceImpl extends ServiceImpl<UserOrderRefundsDao, UserOrderRefunds> implements UserOrderRefundsService {
+
+	@Override
+    public UserOrderRefundsVo detail(Long id) {
+        UserOrderRefundsVo detail = baseMapper.detail(id);
+        return detail;
+    }
+    
+     @Override
+    public IPage<UserOrderRefundsVo> selectPage(IPage<UserOrderRefundsVo> page, OrderRefundsSearch query){
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+}

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

@@ -0,0 +1,267 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.constant.SysConfigConstant;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.PayChannelEnum;
+import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
+import com.yonge.cooleshow.biz.dal.sdk.req.DeviceInfo;
+import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCheckRes;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.utils.collection.MapUtil;
+import org.apache.commons.beanutils.BeanUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.dao.UserOrderDao;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+
+@Service
+public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> implements UserOrderService {
+    private final static Logger log = LoggerFactory.getLogger(UserOrderServiceImpl.class);
+
+    @Autowired
+    private VipCardRecordService vipCardRecordService;
+    @Autowired
+    private SysConfigService sysConfigService;
+    @Autowired
+    private UserOrderDetailService orderDetailService;
+    @Autowired
+    private UserOrderPaymentService orderPaymentService;
+    @Autowired
+    private PaymentSdk paymentSdk;
+
+    //验证订单是否可以下单
+    private static final Map<String, Function<OrderReq, HttpResponseResult<OrderCheckRes>>> checkOrder = new HashMap<>();
+    //插入订单后执行
+    private static final Map<String, Consumer<UserOrderVo>> orderAfter = new HashMap<>();
+
+    @PostConstruct
+    private void init() {
+        //vip开通缴费
+        checkOrder.put(OrderTypeEnum.VIP.getCode(), vipCardRecordService::checkOrder);
+
+
+        //vip开通缴费
+        orderAfter.put(OrderTypeEnum.VIP.getCode(), vipCardRecordService::orderAfter);
+    }
+
+    @Override
+    public UserOrderVo detail(Long id) {
+        return baseMapper.detailById(id);
+    }
+
+    @Override
+    public UserOrderVo detail(String orderNo) {
+        return baseMapper.detailByOrderNo(orderNo);
+    }
+
+    @Override
+    public IPage<UserOrderVo> selectPage(IPage<UserOrderVo> page, OrderSearch query) {
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<UserOrder> executeOrder(OrderReq orderReq) {
+        log.info("订单[创建订单] Req:{}", JSONObject.toJSONString(orderReq));
+        //todo 假定一个用户最多有三个待支付,支付中订单
+        /*Integer num = baseMapper.selectCount(Wrappers.<Order>query().lambda()
+                .eq(Order::getUserId, orderReq.getUserId())
+                .in(Order::getStatus, OrderStatusEnum.PAYING.getCode(), OrderStatusEnum.WAIT_PAY.getCode())
+        );
+        Integer payingNum = 3;
+        if (num >= payingNum) {
+            return HttpResponseResult.failed("未完成订单数过多");
+        }*/
+        //todo 订单验证参数,金额不小于0等
+
+        //验证参数,必须验证参数
+        Function<OrderReq, HttpResponseResult<OrderCheckRes>> checkFunction = checkOrder.get(orderReq.getOrderType());
+        if (Objects.isNull(checkFunction)) {
+            return HttpResponseResult.failed("参数校验失败");
+        }
+        HttpResponseResult<OrderCheckRes> checkResult = checkFunction.apply(orderReq);
+        if (!checkResult.getStatus() || null == checkResult.getData() || !checkResult.getData().getRes()) {
+            log.info("订单[创建订单] Res:{}", JSONObject.toJSONString(checkResult));
+            return HttpResponseResult.failed("参数校验失败");
+        }
+        //验证成功后,订单入库
+        UserOrderVo orderVo = insertOrder(orderReq, checkResult.getData());
+
+        Consumer<UserOrderVo> afterFunction = orderAfter.get(orderReq.getOrderType());
+        if (!Objects.isNull(afterFunction)) {
+            afterFunction.accept(orderVo);
+        }
+        return HttpResponseResult.succeed();
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult<OrderPayRes> orderPay(OrderPayReq payReq) {
+        //查询订单
+        UserOrderVo detail = detail(payReq.getOrderNo());
+        if (null == detail) {
+            return HttpResponseResult.failed("订单不存在");
+        }
+        if (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())) {
+            //处于待支付状态,需要调用汇付发起付款请求接口
+            return orderPayWaitPay(payReq, detail);
+        } else if (OrderStatusEnum.PAYING.equals(detail.getStatus())) {
+            //处于付款中状态,需要拉起付款接口返回信息,并且去到汇付
+            return orderPayPaying(payReq, detail);
+        }
+        return HttpResponseResult.failed("订单状态异常");
+    }
+
+    /***
+     * 处理待支付订单
+     * @author liweifan
+     * @param: payReq
+     * @param: detail
+     * @updateTime 2022/4/1 10:32
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+     */
+    private HttpResponseResult<OrderPayRes> orderPayWaitPay(OrderPayReq payReq, UserOrderVo detail) {
+        PaymentReq paymentReq = new PaymentReq();
+        paymentReq.setOrder_no(payReq.getOrderNo());
+        paymentReq.setPay_channel(payReq.getPayChannel().getCode());
+        paymentReq.setPay_amt(detail.getActualPrice().setScale(2).toString());
+        paymentReq.setGoods_title(detail.getOrderName());
+        paymentReq.setGoods_desc(detail.getOrderDesc());
+
+        DeviceInfo deviceInfo = new DeviceInfo();
+        deviceInfo.setDevice_ip(payReq.getIpAddress());
+
+        paymentReq.setDevice_info(deviceInfo);
+        paymentReq.setNotify_url("异步通知地址");
+
+        if (PayChannelEnum.wx_lite.equals(payReq.getPayChannel())) {
+            Map<String, Object> expend = new HashMap<>();
+            expend.put("open_id", payReq.getOpenId());
+            paymentReq.setExpend(expend);
+        }
+        //付款请求
+        Map<String, Object> res = paymentSdk.executePayment(paymentReq);
+
+        OrderPayRes orderPayRes = new OrderPayRes();
+        orderPayRes.setPay_amt(detail.getActualPrice().setScale(2).toString());
+
+        orderPayRes.setPay_info(
+                MapUtil.populateMap(new HashMap<>(), res.get("expend"))
+                        .get("pay_info").toString()
+        );
+        //insertOrderPayment();
+        //入订单付款表,同时修改订单状态
+        UserOrderPayment orderPayment = new UserOrderPayment();
+
+
+
+        return HttpResponseResult.succeed(orderPayRes);
+    }
+
+    /***
+     * 处理待支付中订单
+     * @author liweifan
+     * @param: payReq
+     * @param: detail
+     * @updateTime 2022/4/1 10:32
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+     */
+    private HttpResponseResult<OrderPayRes> orderPayPaying(OrderPayReq payReq, UserOrderVo detail) {
+        return null;
+    }
+
+    /***
+     * 订单入库
+     * @author liweifan
+     * @param: orderReq
+     * @updateTime 2022/3/31 16:15
+     * @return: com.yonge.cooleshow.biz.dal.entity.Order
+     */
+    private UserOrderVo insertOrder(OrderReq orderReq, OrderCheckRes data) {
+        UserOrder userOrder = new UserOrder();
+        //todo 订单号生产规则
+        userOrder.setOrderNo("123");
+        userOrder.setUserId(orderReq.getUserId());
+        userOrder.setMerchId(data.getMerchId());
+        userOrder.setOrderName(orderReq.getOrderName());
+        userOrder.setOrderDesc(orderReq.getOrderDesc());
+        userOrder.setStatus(OrderStatusEnum.WAIT_PAY);
+        userOrder.setOriginalPrice(orderReq.getOriginalPrice());
+        userOrder.setExpectPrice(orderReq.getExpectPrice());
+        userOrder.setActualPrice(orderReq.getActualPrice());
+        userOrder.setCouponAmount(orderReq.getCouponAmount());
+        //平台服务费
+        BigDecimal serviceFeeRate = getServiceFeeRate(orderReq.getOrderType());
+        userOrder.setPlantformFee(orderReq.getActualPrice().multiply(serviceFeeRate));
+        userOrder.setPlantformFeeRate(serviceFeeRate);
+        userOrder.setUserNote(orderReq.getUserNote());
+        userOrder.setOrderType(orderReq.getOrderType());
+        userOrder.setCreateTime(new Date());
+        int insert = baseMapper.insert(userOrder);
+
+        if (insert == 0 || null == userOrder.getId()) {
+            throw new BizException("插入失败");
+        }
+        UserOrderDetail orderDetail = new UserOrderDetail();
+        orderDetail.setOrderNo(userOrder.getOrderNo());
+        orderDetail.setBizId(orderReq.getBizId());
+        orderDetail.setBizContent(orderReq.getBizContent());
+        orderDetail.setCreateTime(new Date());
+        orderDetailService.save(orderDetail);
+
+        UserOrderVo vo = new UserOrderVo();
+        try {
+            BeanUtils.copyProperties(vo, userOrder);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BizException("对象转换失败");
+        }
+        vo.setOrderDetail(orderDetail);
+        return vo;
+    }
+
+    /***
+     * 获取平台服务费率
+     * @author liweifan
+     * @param: orderTypeEnum
+     * @updateTime 2022/3/31 16:49
+     * @return: java.math.BigDecimal
+     */
+    private BigDecimal getServiceFeeRate(OrderTypeEnum orderTypeEnum) {
+        String configValue = "0";
+        if (OrderTypeEnum.VIDEO.equals(orderTypeEnum)) {
+            configValue = sysConfigService.findConfigValue(SysConfigConstant.VIDEO_LESSON_SERVICE_FEE);
+        } else if (OrderTypeEnum.PRACTICE.equals(orderTypeEnum)) {
+            configValue = sysConfigService.findConfigValue(SysConfigConstant.PRACTICE_SERVICE_FEE);
+        } else if (OrderTypeEnum.LIVE.equals(orderTypeEnum)) {
+            configValue = sysConfigService.findConfigValue(SysConfigConstant.LIVE_SERVICE_RATE);
+        } else if (OrderTypeEnum.MUSIC.equals(orderTypeEnum)) {
+            configValue = sysConfigService.findConfigValue(SysConfigConstant.MUSIC_SHEET_SERVICE_FEE);
+        }
+        return new BigDecimal(configValue).divide(new BigDecimal(100));
+    }
+}

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

@@ -2,6 +2,10 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderCheckRes;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
@@ -23,5 +27,15 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
     public IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }
-	
+
+    @Override
+    public HttpResponseResult<OrderCheckRes> checkOrder(OrderReq orderReq) {
+        return HttpResponseResult.succeed();
+    }
+
+    @Override
+    public void orderAfter(UserOrderVo orderVo) {
+
+    }
+
 }

+ 0 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderDetailVo.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.OrderDetail;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
- */
-@ApiModel(value = "OrderDetailVo对象", description = "平台订单表查询视图对象")
-public class OrderDetailVo extends OrderDetail{
-	private static final long serialVersionUID = 1L;
-
-}

+ 0 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderRefundsVo.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.OrderRefunds;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
- */
-@ApiModel(value = "OrderRefundsVo对象", description = "用户退款表查询视图对象")
-public class OrderRefundsVo extends OrderRefunds{
-	private static final long serialVersionUID = 1L;
-
-}

+ 0 - 14
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/OrderVo.java

@@ -1,14 +0,0 @@
-package com.yonge.cooleshow.biz.dal.vo;
-
-import com.yonge.cooleshow.biz.dal.entity.Order;
-import io.swagger.annotations.ApiModel;
-
-/**
- * @Author: liweifan
- * @Data: 2022-03-30 13:53:51
- */
-@ApiModel(value = "OrderVo对象", description = "平台订单表查询视图对象")
-public class OrderVo extends Order{
-	private static final long serialVersionUID = 1L;
-
-}

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

@@ -39,6 +39,8 @@ public class TeacherVo extends Teacher {
     private Date birthdate;
     @ApiModelProperty(value = "审核人")
     private String verifyUser;
+    @ApiModelProperty(value = "0-正常,9-锁定")
+    private Integer lockFlag;
     @ApiModelProperty(value = "老师风采视频")
     private List<TeacherStyleVideo> styleVideo;
 
@@ -129,4 +131,12 @@ public class TeacherVo extends Teacher {
     public void setStyleVideo(List<TeacherStyleVideo> styleVideo) {
         this.styleVideo = styleVideo;
     }
+
+    public Integer getLockFlag() {
+        return lockFlag;
+    }
+
+    public void setLockFlag(Integer lockFlag) {
+        this.lockFlag = lockFlag;
+    }
 }

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderDetailVo.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-03-30 13:53:51
+ */
+@ApiModel(value = "UserOrderDetailVo对象", description = "平台订单表查询视图对象")
+public class UserOrderDetailVo extends UserOrderDetail {
+	private static final long serialVersionUID = 1L;
+
+}

+ 14 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderRefundsVo.java

@@ -0,0 +1,14 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-03-30 13:53:51
+ */
+@ApiModel(value = "UserOrderRefundsVo对象", description = "用户退款表查询视图对象")
+public class UserOrderRefundsVo extends UserOrderRefunds {
+	private static final long serialVersionUID = 1L;
+
+}

+ 24 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/UserOrderVo.java

@@ -0,0 +1,24 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.entity.UserOrderDetail;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022-03-30 13:53:51
+ */
+@ApiModel(value = "UserOrderVo对象", description = "平台订单表查询视图对象")
+public class UserOrderVo extends UserOrder {
+	private static final long serialVersionUID = 1L;
+
+	private UserOrderDetail orderDetail;
+
+	public UserOrderDetail getOrderDetail() {
+		return orderDetail;
+	}
+
+	public void setOrderDetail(UserOrderDetail orderDetail) {
+		this.orderDetail = orderDetail;
+	}
+}

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderCheckRes.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.biz.dal.vo.res;
+
+import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/3/31 16:18
+ */
+@ApiModel(value = "OrderCheckRes", description = "订单验证返回对象")
+public class OrderCheckRes {
+    @ApiModelProperty("验证结果")
+    private Boolean res;
+    @ApiModelProperty("商家id")
+    private Long merchId;
+
+    public Boolean getRes() {
+        return res;
+    }
+
+    public void setRes(Boolean res) {
+        this.res = res;
+    }
+
+    public Long getMerchId() {
+        return merchId;
+    }
+
+    public void setMerchId(Long merchId) {
+        this.merchId = merchId;
+    }
+}

+ 32 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/res/OrderPayRes.java

@@ -0,0 +1,32 @@
+package com.yonge.cooleshow.biz.dal.vo.res;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/4/1 15:35
+ */
+@ApiModel(value = "OrderPayRes", description = "订单支付请求返回对象")
+public class OrderPayRes {
+    @ApiModelProperty("支付金额")
+    private String pay_amt;
+    @ApiModelProperty("pay_info")
+    private String pay_info;
+
+    public String getPay_amt() {
+        return pay_amt;
+    }
+
+    public void setPay_amt(String pay_amt) {
+        this.pay_amt = pay_amt;
+    }
+
+    public String getPay_info() {
+        return pay_info;
+    }
+
+    public void setPay_info(String pay_info) {
+        this.pay_info = pay_info;
+    }
+}

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

@@ -52,10 +52,11 @@
             <include refid="baseColumns"/>,
             u.username_ as username,
             u.phone_ as phone,
+            u.lock_flag_ as lockFlag,
             (case when isnull(u.id_card_no_) then 0 else 1 end) as isReal,
             (case when isnull(b.user_id_) then 0 else 1 end) as isBank
         FROM teacher t
-        left join sys_user u on t.user_id_ = u.id
+        left join sys_user u on t.user_id_ = u.id_
         left join (
             select distinct user_id_ from user_bank_card where del_flag_ = 0
         ) b on t.user_id_ = b.user_id_
@@ -67,9 +68,6 @@
                 u.phone_ LIKE CONCAT('%', #{param.search}, '%')
                 )
             </if>
-            <if test="null != param.teacherType and '' != param.teacherType">
-                and find_in_set(#{param.teacherType},t.teacher_type_)
-            </if>
         </where>
     </select>
 

+ 3 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/OrderDetailMapper.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.yonge.cooleshow.biz.dal.dao.OrderDetailDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.OrderDetail">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderDetailDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderDetail">
             <result column="id_" property="id" />
 	        <result column="order_no_" property="orderNo" />
 	        <result column="biz_id_" property="bizId" />
@@ -20,7 +20,7 @@
         , t.update_time_
         </sql> 
     
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.OrderDetailVo">
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
             <include refid="baseColumns"/>
         FROM order_detail t

+ 13 - 16
cooleshow-user/user-biz/src/main/resources/config/mybatis/OrderMapper.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.yonge.cooleshow.biz.dal.dao.OrderDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.Order">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrder">
             <result column="id_" property="id" />
 	        <result column="order_no_" property="orderNo" />
 	        <result column="user_id_" property="userId" />
@@ -22,11 +22,6 @@
 	        <result column="pay_time_" property="payTime" />
 	        <result column="refund_time_" property="refundTime" />
 	        <result column="update_time_" property="updateTime" />
-	        <result column="trans_no_" property="transNo" />
-	        <result column="pay_channel_" property="payChannel" />
-	        <result column="pay_amt_" property="payAmt" />
-	        <result column="arrival_time_" property="arrivalTime" />
-	        <result column="pay_fail_msg_" property="payFailMsg" />
 		</resultMap>  
     
     <!-- 表字段 -->
@@ -51,23 +46,25 @@
         , t.pay_time_
         , t.refund_time_
         , t.update_time_
-        , t.trans_no_
-        , t.pay_channel_
-        , t.pay_amt_
-        , t.arrival_time_
-        , t.pay_fail_msg_
         </sql> 
     
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.OrderVo">
+    <select id="detailById" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
             <include refid="baseColumns"/>
-        FROM order t
+        FROM user_order t
         where t.id_ = #{id}
     </select>
-    
+
+    <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
+        SELECT
+        <include refid="baseColumns"/>
+        FROM user_order t
+        where t.order_no_ = #{orderNo}
+    </select>
+
     <select id="selectPage" resultMap="BaseResultMap">
 		SELECT         
         	<include refid="baseColumns" />
-		FROM order t
+		FROM user_order t
 	</select>
 </mapper>

+ 28 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderPaymentMapper.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderPaymentDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderPayment">
+            <result column="id_" property="id" />
+	        <result column="order_no_" property="orderNo" />
+	        <result column="trans_no_" property="transNo" />
+	        <result column="pay_channel_" property="payChannel" />
+	        <result column="pay_amt_" property="payAmt" />
+	        <result column="pay_info" property="payInfo" />
+	        <result column="invalid_time_" property="invalidTime" />
+	        <result column="arrival_time_" property="arrivalTime" />
+	        <result column="pay_fail_msg_" property="payFailMsg" />
+		</resultMap>  
+    
+    <!-- 表字段 -->
+    <sql id="baseColumns">
+         t.id_
+        , t.order_no_
+        , t.trans_no_
+        , t.pay_channel_
+        , t.pay_amt_
+        , t.pay_info
+        , t.invalid_time_
+        , t.arrival_time_
+        , t.pay_fail_msg_
+        </sql>
+</mapper>

+ 3 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/OrderRefundsMapper.xml → cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderRefundsMapper.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE  mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.yonge.cooleshow.biz.dal.dao.OrderRefundsDao">
-	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.OrderRefunds">
+<mapper namespace="com.yonge.cooleshow.biz.dal.dao.UserOrderRefundsDao">
+	<resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.UserOrderRefunds">
             <result column="id_" property="id" />
 	        <result column="user_id_" property="userId" />
 	        <result column="order_no_" property="orderNo" />
@@ -30,7 +30,7 @@
         , t.remark_
         </sql> 
     
-    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.OrderRefundsVo">
+    <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderRefundsVo">
         SELECT
             <include refid="baseColumns"/>
         FROM order_refunds t

+ 77 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/PaymentController.java

@@ -0,0 +1,77 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.huifu.adapay.core.AdapayCore;
+import com.huifu.adapay.core.util.AdapaySign;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.sdk.PaymentSdk;
+import com.yonge.cooleshow.biz.dal.sdk.req.PaymentReq;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+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.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.Map;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/3/11 18:16
+ */
+@RestController
+@RequestMapping("/payment")
+@Api(value = "付款接口", tags = "付款接口")
+public class PaymentController {
+    @Autowired
+    private PaymentSdk paymentSdk;
+
+    @ApiOperation(value = "订单付款")
+    @PostMapping("/orderPay")
+    public HttpResponseResult<Map<String, Object>> orderPay(@RequestBody PaymentReq param) {
+        return HttpResponseResult.succeed(paymentSdk.executePayment(param));
+    }
+
+    @ApiOperation(value = "查询订单")
+    @GetMapping("/queryPayment")
+    public HttpResponseResult<Map<String, Object>> queryPayment(String paymentId) throws Exception {
+        return HttpResponseResult.succeed(paymentSdk.queryPayment(paymentId));
+    }
+
+    /***
+     * 汇付回调
+     * 问题:1、成功失败需要回执什么信息 2、回调url地址是否需要加入白名单
+     * @author liweifan
+     * @param: request
+     * @updateTime 2022/3/11 18:35
+     */
+    @PostMapping("/callback")
+    public void callback(HttpServletRequest request) {
+        try {
+            //验签传参data
+            String data = request.getParameter("data");
+            //验签传参sign
+            String sign = request.getParameter("sign");
+            //验签标记
+            boolean checkSign;
+            //验签传参publicKey
+            String publicKey = AdapayCore.PUBLIC_KEY;
+            //验签
+            checkSign = AdapaySign.verifySign(data, sign, publicKey);
+            if (checkSign) {
+                //验签成功逻辑
+                System.out.println("成功返回数据data:" + data);
+            } else {
+                //验签失败逻辑
+            }
+        } catch (Exception e) {
+        }
+        return;
+    }
+}

+ 89 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -0,0 +1,89 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
+import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
+import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.support.DistributedLock;
+import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.utils.web.WebUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: liweifan
+ * @Data: 2022/3/11 18:16
+ */
+@RestController
+@RequestMapping("/userOrder")
+@Api(value = "订单接口", tags = "订单接口")
+public class UserOrderController extends BaseController {
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private UserOrderService userOrderService;
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @ApiOperation(value = "下单接口")
+    @PostMapping("/executeOrder")
+    public HttpResponseResult<UserOrder> executeOrder(@Valid @RequestBody OrderReq orderReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        orderReq.setUserId(user.getId());
+
+        Future<HttpResponseResult<UserOrder>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+                .callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
+                        , () -> userOrderService.executeOrder(orderReq), 60L, TimeUnit.SECONDS);
+
+        try {
+            return httpResponseResultFuture.get();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResponseResult.failed("下单失败");
+        }
+    }
+
+    @ApiOperation(value = "订单付款")
+    @PostMapping("/orderPay")
+    public HttpResponseResult<OrderPayRes> orderPay(@Valid @RequestBody OrderPayReq payReq, HttpServletRequest request) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        payReq.setUserId(user.getId());
+        payReq.setIpAddress(WebUtil.getRemoteIp(request));
+
+        Future<HttpResponseResult<OrderPayRes>> httpResponseResultFuture = DistributedLock.of(redissonClient)
+                .callIfLockCanGet(CacheNameEnum.LOCK_PAY_ORDER.getRedisKey(user.getId())
+                        , () -> userOrderService.orderPay(payReq), 60L, TimeUnit.SECONDS);
+
+        try {
+            return httpResponseResultFuture.get();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return HttpResponseResult.failed("付款失败");
+        }
+    }
+}

+ 0 - 1
pom.xml

@@ -355,7 +355,6 @@
 		<module>cooleshow-user</module>
 		<module>toolset</module>
 		<module>cooleshow-im</module>
-        <module>cooleshow-payment</module>
 	    <module>cooleshow-task</module>
   </modules>
 </project>