liujc 1 yıl önce
ebeveyn
işleme
2a6d68447d
15 değiştirilmiş dosya ile 474 ekleme ve 77 silme
  1. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  2. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseGroupServiceImpl.java
  3. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  4. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  5. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  6. 14 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java
  7. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PianoRoomBuyRecordServiceImpl.java
  8. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TenantAlbumServiceImpl.java
  9. 2 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java
  10. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VideoLessonPurchaseRecordServiceImpl.java
  11. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java
  12. 102 49
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java
  13. 110 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java
  14. 232 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/vo/UserPaymentOrderVo.java
  15. 1 1
      cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java

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

@@ -981,7 +981,7 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
         userOrderDetail.setOriginalPrice(activityPlan.getRegistrationPrice());
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(activityPlan.getRegistrationPrice());
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
     }

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

@@ -380,12 +380,12 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         userOrderDetail.setGoodUrl(userOrderService.getGoodUrlByType(orderGoodsInfo.getGoodType()));
         userOrderDetail.setMerchId(courseGroup.getTeacherId());
         userOrderDetail.setBizId(courseGroup.getId());
-        userOrderDetail.setBizContent(orderGoodsInfo.getBizContent());
+        userOrderDetail.setBizContent(JSON.toJSONString(orderGoodsInfo.getBizContent()));
         userOrderDetail.setGoodNum(orderGoodsInfo.getGoodNum());
         userOrderDetail.setOriginalPrice(courseGroup.getCoursePrice());
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(courseGroup.getCoursePrice());
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         log.info("buyLiveCourse  return {}", userOrderDetail);
 

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

@@ -2589,7 +2589,7 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
         userOrderDetail.setOriginalPrice(multiply);
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(multiply);
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         log.info("buyPracticeCourse  return {}", userOrderDetail);
         return userOrderDetail;

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

@@ -252,7 +252,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
     @Override
     public void orderCreate(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
-        MemberPriceSettingsVo detail = detail(Long.parseLong(orderGoodsInfo.getBizContent()));
+        MemberPriceSettingsVo detail = detail(Long.parseLong(orderGoodsInfo.getBizContent().toString()));
         if (null == detail) {
             throw new BizException("未找到会员卡信息");
         }
@@ -268,7 +268,7 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
             }
         }
 
-        UserOrderDetail userOrderDetail = JSON.parseObject(JSON.toJSONString(detail), UserOrderDetail.class);
+        UserOrderDetail userOrderDetail = JSON.parseObject(JSON.toJSONString(orderGoodsInfo), UserOrderDetail.class);
 
         userOrderDetail.setGoodUrl(userOrderService.getGoodUrlByType(orderGoodsInfo.getGoodType()));
         userOrderDetail.setMerchId(0l);

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

@@ -1612,7 +1612,7 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao, MusicSheet
             default:
                 break;
         }
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         // 检查已经购买,抛出已购买异常
         checkoutPay(orderGoodsInfo.getUserId(), musicSheetPayDto.getMusicSheetId(), musicSheetPayDto.getClientType(),

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

@@ -217,7 +217,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
      * @param userPaymentOrder 订单
      */
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void tenantAlbum(UserOrderDetailVo userPaymentOrder) {
 
 
@@ -260,7 +260,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
      * 曲目分账
      */
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void musicSheet(UserOrderDetailVo userPaymentOrder) {
 
         // 先计算分账金额,写入流水,最后执行分账,在写入分账数据
@@ -312,6 +312,8 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
             } else {
                 serviceFeeAmount = actualPrice;
             }
+        } else {
+            serviceFeeAmount = actualPrice;
         }
 
         // 消息通知
@@ -326,7 +328,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void practiceCourse(UserOrderDetailVo userPaymentOrder) {
 
 
@@ -431,7 +433,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void liveCourse(UserOrderDetailVo userPaymentOrder) {
 
 
@@ -539,7 +541,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void videoCourse(UserOrderDetailVo userPaymentOrder) {
 
 
@@ -658,7 +660,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void vip(UserOrderDetailVo userPaymentOrder) {
 
         // 先计算分账金额,写入流水,最后执行分账,在写入分账数据
@@ -680,7 +682,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    @Transactional(rollbackFor = Exception.class)
     public void activity(UserOrderDetailVo userPaymentOrder) {
 
         // 先计算分账金额,写入流水,最后执行分账,在写入分账数据
@@ -710,9 +712,9 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
         // 判断金额是否和支付金额一致
         BigDecimal totalAmount = tenantdivMap.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add);
-        if (!totalAmount.equals(userPaymentOrder.getActualPrice())) {
+        if (totalAmount.compareTo(userPaymentOrder.getActualPrice()) != 0) {
             log.error("分账金额不一致 orderNo:{} totalAmount:{} actualPrice:{}", userPaymentOrder.getOrderNo(), totalAmount, userPaymentOrder.getActualPrice());
-            return;
+//            return;
         }
 
 
@@ -780,7 +782,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
                 String divideOrderNo = IdWorker.getIdStr();
                 BigDecimal feeAmt = BigDecimal.ZERO;
                 if (merchantConfig != null && newestPayment != null) {
-                    paymentDivMember = paymentDivMemberService.getByAppIdAndTenantId(merchantConfig.getAppId(), userPaymentOrder.getTenantId());
+                    paymentDivMember = paymentDivMemberService.getByAppIdAndTenantId(merchantConfig.getAppId(), k);
                     if (paymentDivMember != null) {
                         // 执行分账逻辑
                         BasePaymentService paymentService = paymentServiceContext.getPaymentService(merchantConfig.getPaymentVendor());
@@ -809,7 +811,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
                 // 写入机构分账记录表
                 PaymentDivMemberRecord paymentDivMemberRecord = PaymentDivMemberRecord.builder()
-                        .tenantId(userPaymentOrder.getTenantId())
+                        .tenantId(k)
                         .appId(merchantConfig != null ? merchantConfig.getAppId() : null)
                         .memberId(paymentDivMember != null ? paymentDivMember.getMemberId() : null)
                         .orderNo(userPaymentOrder.getOrderNo())
@@ -866,7 +868,7 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
 
             // 写入机构流水表
             TenantAccountRecord tenantAccountRecord = TenantAccountRecord.builder()
-                    .tenantId(userPaymentOrder.getTenantId())
+                    .tenantId(tenantId)
                     .transAmount(amount)
                     .inOrOut(InOrOutEnum.IN.getCode())
                     .postStatus(PostStatusEnum.RECORDED.getCode())

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

@@ -129,7 +129,7 @@ public class PianoRoomBuyRecordServiceImpl extends ServiceImpl<PianoRoomBuyRecor
      */
     @Override
     public void orderCreate(UserPaymentOrderWrapper.OrderGoodsInfo orderGoodsInfo) {
-        PianoRoomSettingsVo detail = pianoRoomSettingsService.detail(Long.parseLong(orderGoodsInfo.getBizContent()));
+        PianoRoomSettingsVo detail = pianoRoomSettingsService.detail(Long.parseLong(orderGoodsInfo.getBizContent().toString()));
         if (null == detail) {
            throw new BizException("未找到时长包");
         }
@@ -145,7 +145,7 @@ public class PianoRoomBuyRecordServiceImpl extends ServiceImpl<PianoRoomBuyRecor
         userOrderDetail.setBizContent("琴房时长包购买-" + detail.getTimes() + "分");
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(detail.getSalePrice());
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
     }

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

@@ -127,7 +127,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
 
 
         TenantAlbumWrapper.TenantAlbumContent tenantAlbumContent = JSON
-                .parseObject(orderGoodsInfo.getBizContent(), TenantAlbumWrapper.TenantAlbumContent.class);
+                .parseObject(JSON.toJSONString(orderGoodsInfo.getBizContent()), TenantAlbumWrapper.TenantAlbumContent.class);
         if (tenantAlbumContent == null) {
             log.error("订单创建前检测,订单商品信息为空");
             throw new BizException("订单商品信息为空");
@@ -211,7 +211,7 @@ public class TenantAlbumServiceImpl extends ServiceImpl<TenantAlbumMapper, Tenan
                 .multiply(new BigDecimal(tenantAlbumContent.getBuyMultiple())));
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(userOrderDetail.getOriginalPrice());
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         orderGoodsInfo.setUserOrderDetail(userOrderDetail);
 

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

@@ -619,9 +619,9 @@ public class UserPaymentCoreServiceImpl implements UserPaymentCoreService {
         redisCacheService.saveUserOrderConfig(String.valueOf(orderReq.getUserId()), orderReq.getOrderType().getCode(), reqConfig.jsonString());
 
         // 若订单无需支付,直接完成订单,VIP购买
-        if (BigDecimal.ZERO.compareTo(orderReq.getPaymentCashAmount()) == 0) {
+//        if (BigDecimal.ZERO.compareTo(orderReq.getPaymentCashAmount()) == 0) {
             executePaymentSuccess(orderReq, null);
-        }
+//        }
 
         return UserPaymentOrderWrapper.PaymentConfig.builder()
             .orderNo(orderReq.getOrderNo())

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

@@ -324,7 +324,7 @@ public class VideoLessonPurchaseRecordServiceImpl extends ServiceImpl<VideoLesso
         userOrderDetail.setOriginalPrice(lessonGroup.getLessonPrice());
         userOrderDetail.setCouponAmount(BigDecimal.ZERO);
         userOrderDetail.setExpectPrice(lessonGroup.getLessonPrice());
-        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice().subtract(userOrderDetail.getCouponAmount()));
+        userOrderDetail.setActualPrice(userOrderDetail.getExpectPrice());
 
         log.info("buyVideoCourse  return {}", userOrderDetail);
 

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/UserPaymentOrderWrapper.java

@@ -827,7 +827,7 @@ public class UserPaymentOrderWrapper {
         @ApiModelProperty("业务id ")
         private Long bizId;
         @ApiModelProperty("业务内容 ")
-        private String bizContent;
+        private Object bizContent;
 
 
         @ApiModelProperty("商品数量 ")

+ 102 - 49
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderController.java

@@ -9,8 +9,10 @@ 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.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
 import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
@@ -50,6 +52,8 @@ import java.util.Date;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
+import static com.yonge.cooleshow.common.entity.HttpResponseResult.failed;
+
 /**
  * @Author: liweifan
  * @Data: 2022/3/11 18:16
@@ -126,55 +130,6 @@ public class UserOrderController extends BaseController {
         }
     }
 
-
-
-    @ApiOperation(value = "用户下单", notes = "用户下单")
-    @PostMapping("/executeOrder/v2")
-    public R<UserPaymentOrderWrapper.PaymentConfig> executeOrder(@Validated @RequestBody UserPaymentOrderVo.OrderReq orderReq) {
-
-        // 设置下单用户信息
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (Objects.isNull(sysUser)) {
-            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
-        }
-        orderReq.setUserId(sysUser.getId());
-        orderReq.setPaymentClient(ClientEnum.STUDENT.name());
-
-
-        // 用户下单请求
-        UserPaymentOrderWrapper.UserPaymentOrder order = JSON.parseObject(orderReq.jsonString(), UserPaymentOrderWrapper.UserPaymentOrder.class);
-        // 新增数据
-        UserPaymentOrderWrapper.PaymentConfig paymentConfig = userPaymentCoreService.executeOrderCreate(order);
-        if (Objects.isNull(paymentConfig)) {
-            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("下单失败");
-        }
-
-        return R.from(paymentConfig);
-    }
-
-    @ApiOperation(value = "用户付款", notes = "用户付款")
-    @PostMapping("/orderPay/v2")
-    public R<UserPaymentOrderWrapper.PaymentReq> executePayment(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config) {
-        // 设置下单用户信息
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (Objects.isNull(sysUser)) {
-            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
-        }
-
-
-        // 用户下单请求
-        UserPaymentOrderWrapper.PaymentOrderReqConfig reqConfig = UserPaymentOrderWrapper.PaymentOrderReqConfig.from(config.jsonString());
-
-        // 创建用户支付数据
-        UserPaymentOrderWrapper.PaymentReq paymentConfig = userPaymentCoreService.executePayment(JwtUserInfo.builder()
-                .userId(sysUser.getId().toString()).clientType(ClientEnum.STUDENT.getCode()).build(), reqConfig);
-        if (Objects.isNull(paymentConfig)) {
-            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("付款失败");
-        }
-
-        return R.from(paymentConfig);
-    }
-
     @ApiOperation(value = "通过业务id查询用户正在交易中的订单")
     @PostMapping("/getPendingOrder")
     @ApiImplicitParams({
@@ -313,4 +268,102 @@ public class UserOrderController extends BaseController {
     }
 
 
+    @Autowired
+    private TenantStaffService tenantStaffService;
+
+    @ApiOperation(value = "用户下单", notes = "用户下单")
+    @PostMapping("/executeOrder/v2")
+    public R<UserPaymentOrderWrapper.PaymentConfig> executeOrderV2(@Validated @RequestBody UserPaymentOrderVo.OrderReq orderReq) {
+
+        // 设置下单用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+        orderReq.setUserId(sysUser.getId());
+        orderReq.setPaymentClient(ClientEnum.STUDENT.name());
+
+
+        // 用户下单请求
+        UserPaymentOrderWrapper.UserPaymentOrder order = JSON.parseObject(orderReq.jsonString(), UserPaymentOrderWrapper.UserPaymentOrder.class);
+
+        TenantStaff tenantStaff = tenantStaffService.getByUserId(sysUser.getId());
+        if (Objects.isNull(tenantStaff)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+
+        order.setTenantId(tenantStaff.getTenantId());
+        // 新增数据
+        UserPaymentOrderWrapper.PaymentConfig paymentConfig = userPaymentCoreService.executeOrderCreate(order);
+        if (Objects.isNull(paymentConfig)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("下单失败");
+        }
+
+        return R.from(paymentConfig);
+    }
+
+    @ApiOperation(value = "用户付款", notes = "用户付款")
+    @PostMapping("/orderPay/v2")
+    public R<UserPaymentOrderWrapper.PaymentReq> executePaymentV2(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config) {
+        // 设置下单用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+
+
+        // 用户下单请求
+        UserPaymentOrderWrapper.PaymentOrderReqConfig reqConfig = UserPaymentOrderWrapper.PaymentOrderReqConfig.from(config.jsonString());
+
+        // 创建用户支付数据
+        UserPaymentOrderWrapper.PaymentReq paymentConfig = userPaymentCoreService.executePayment(JwtUserInfo.builder()
+                .userId(sysUser.getId().toString()).clientType(ClientEnum.STUDENT.getCode()).build(), reqConfig);
+        if (Objects.isNull(paymentConfig)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("付款失败");
+        }
+
+        return R.from(paymentConfig);
+    }
+
+    @ApiOperation(value = "取消订单")
+    @PostMapping("/orderCancel/v2")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderNo", value = "订单号", paramType = "query", dataType = "String", required = true),
+            @ApiImplicitParam(name = "reason", value = "取消说明", paramType = "query", dataType = "String")
+    })
+    public HttpResponseResult<Boolean> orderCancelV2(@ApiIgnore @RequestBody OrderPayReq payReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (StringUtil.isEmpty(payReq.getOrderNo())) {
+            return failed("订单号不能为空");
+        }
+        payReq.setUserId(user.getId());
+
+        // 用户取消支付
+        userPaymentCoreService.cancelPayment(JwtUserInfo.builder().userId(user.getId().toString()).clientType(ClientEnum.STUDENT.getCode()).build(), payReq.getOrderNo());
+
+        return HttpResponseResult.status(true);
+    }
+
+
+    @ApiOperation(value = "检测订单应该使用哪种支付方式")
+    @PostMapping("/orderPayType")
+    public HttpResponseResult<UserPaymentOrderWrapper.OrderPayTypeResp> orderPayType(@ApiIgnore @RequestBody UserPaymentOrderWrapper.OrderPayTypeReq payTypeReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        payTypeReq.setBuyId(user.getId());
+        payTypeReq.setClientType(ClientEnum.STUDENT);
+
+        // 用户取消支付
+
+
+        return HttpResponseResult.succeed(userPaymentCoreService.orderPayType(payTypeReq));
+    }
+
+
 }

+ 110 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/UserOrderController.java

@@ -1,15 +1,23 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 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.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.entity.TenantStaff;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.TenantStaffService;
+import com.yonge.cooleshow.biz.dal.service.UserPaymentCoreService;
+import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.teacher.vo.UserPaymentOrderVo;
 import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -31,6 +39,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -41,6 +50,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.Date;
+import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -59,6 +69,12 @@ public class UserOrderController extends BaseController {
     @Autowired
     private RedissonClient redissonClient;
 
+    @Autowired
+    private TenantStaffService tenantStaffService;
+
+    @Autowired
+    private UserPaymentCoreService userPaymentCoreService;
+
     @ApiOperation(value = "下单接口")
     @PostMapping("/executeOrder")
     public HttpResponseResult<UserOrder> executeOrder(@Valid @RequestBody OrderReq orderReq) {
@@ -213,4 +229,98 @@ public class UserOrderController extends BaseController {
         UserOrderVo detail = userOrderService.detailApp(param);
         return succeed(detail);
     }
+
+
+    @ApiOperation(value = "用户下单", notes = "用户下单")
+    @PostMapping("/executeOrder/v2")
+    public R<UserPaymentOrderWrapper.PaymentConfig> executeOrderV2(@Validated @RequestBody UserPaymentOrderVo.OrderReq orderReq) {
+
+        // 设置下单用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+        orderReq.setUserId(sysUser.getId());
+        orderReq.setPaymentClient(ClientEnum.TEACHER.name());
+
+
+        // 用户下单请求
+        UserPaymentOrderWrapper.UserPaymentOrder order = JSON.parseObject(orderReq.jsonString(), UserPaymentOrderWrapper.UserPaymentOrder.class);
+
+        TenantStaff tenantStaff = tenantStaffService.getByUserId(sysUser.getId());
+        if (Objects.isNull(tenantStaff)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+
+        order.setTenantId(tenantStaff.getTenantId());
+        // 新增数据
+        UserPaymentOrderWrapper.PaymentConfig paymentConfig = userPaymentCoreService.executeOrderCreate(order);
+        if (Objects.isNull(paymentConfig)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("下单失败");
+        }
+
+        return R.from(paymentConfig);
+    }
+
+    @ApiOperation(value = "用户付款", notes = "用户付款")
+    @PostMapping("/orderPay/v2")
+    public R<UserPaymentOrderWrapper.PaymentReq> executePaymentV2(@Validated @RequestBody UserPaymentOrderVo.PaymentReqConfig config) {
+        // 设置下单用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("用户信息不存在");
+        }
+
+
+        // 用户下单请求
+        UserPaymentOrderWrapper.PaymentOrderReqConfig reqConfig = UserPaymentOrderWrapper.PaymentOrderReqConfig.from(config.jsonString());
+
+        // 创建用户支付数据
+        UserPaymentOrderWrapper.PaymentReq paymentConfig = userPaymentCoreService.executePayment(JwtUserInfo.builder()
+                .userId(sysUser.getId().toString()).clientType(ClientEnum.TEACHER.getCode()).build(), reqConfig);
+        if (Objects.isNull(paymentConfig)) {
+            throw com.microsvc.toolkit.common.webportal.exception.BizException.from("付款失败");
+        }
+
+        return R.from(paymentConfig);
+    }
+
+    @ApiOperation(value = "取消订单")
+    @PostMapping("/orderCancel/v2")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderNo", value = "订单号", paramType = "query", dataType = "String", required = true),
+            @ApiImplicitParam(name = "reason", value = "取消说明", paramType = "query", dataType = "String")
+    })
+    public HttpResponseResult<Boolean> orderCancelV2(@ApiIgnore @RequestBody OrderPayReq payReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (StringUtil.isEmpty(payReq.getOrderNo())) {
+            return failed("订单号不能为空");
+        }
+        payReq.setUserId(user.getId());
+
+        // 用户取消支付
+        userPaymentCoreService.cancelPayment(JwtUserInfo.builder().userId(user.getId().toString()).clientType(ClientEnum.TEACHER.getCode()).build(), payReq.getOrderNo());
+
+        return HttpResponseResult.status(true);
+    }
+
+
+    @ApiOperation(value = "检测订单应该使用哪种支付方式")
+    @PostMapping("/orderPayType")
+    public HttpResponseResult<UserPaymentOrderWrapper.OrderPayTypeResp> orderPayType(@ApiIgnore @RequestBody UserPaymentOrderWrapper.OrderPayTypeReq payTypeReq) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+
+        payTypeReq.setBuyId(user.getId());
+        payTypeReq.setClientType(ClientEnum.TEACHER);
+
+        return HttpResponseResult.succeed(userPaymentCoreService.orderPayType(payTypeReq));
+    }
+
+
 }

+ 232 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/vo/UserPaymentOrderVo.java

@@ -0,0 +1,232 @@
+package com.yonge.cooleshow.teacher.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 平台订单表
+ * 2022-12-20 19:09:34
+ */
+@ApiModel(value = "UserPaymentOrderVo对象", description = "平台订单表查询视图对象")
+public class UserPaymentOrderVo {
+
+    @Data
+    @ApiModel(" UserPaymentOrder-平台订单表")
+    public static class UserPaymentOrder {
+
+
+		@ApiModelProperty("主键")
+        private Long id;
+
+		@ApiModelProperty("支付厂商")
+        private String paymentVender;
+
+		@ApiModelProperty("支付渠道")
+        private String paymentChannel;
+
+		@ApiModelProperty("用户身份")
+        private String paymentClient;
+
+		@ApiModelProperty("用户编号")
+        private Long userId;
+
+		@ApiModelProperty("商户订单号")
+        private String orderNo;
+
+		@ApiModelProperty("交易流水号")
+        private String transNo;
+
+		@ApiModelProperty("业务类型Id")
+        private String bizId;
+
+		@ApiModelProperty("订单支付类型")
+        private String orderType;
+
+		@ApiModelProperty("订单状态")
+        private String status;
+
+		@ApiModelProperty("原价")
+        private BigDecimal originalPrice;
+
+		@ApiModelProperty("现价")
+        private BigDecimal currentPrice;
+
+		@ApiModelProperty("支付现金金额")
+        private BigDecimal paymentCashAmount;
+
+		@ApiModelProperty("支付优惠金额")
+        private BigDecimal paymentCouponAmount;
+
+		@ApiModelProperty("支付通道费用")
+        private BigDecimal paymentChannelFee;
+
+		@ApiModelProperty("订单名称")
+        private String orderName;
+
+		@ApiModelProperty("订单描述信息")
+        private String orderDesc;
+
+		@ApiModelProperty("用户备注")
+        private String userNote;
+
+		@ApiModelProperty("支付时间")
+        private Date payTime;
+
+		@ApiModelProperty("原因")
+        private String errorMsg;
+
+		@ApiModelProperty("收货地址")
+        private Long receiveAddress;
+
+		@ApiModelProperty("更新时间")
+        private Date updateTime;
+
+		@ApiModelProperty("下单时间")
+        private Date createTime;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static UserPaymentOrder from(String json) {
+            return JSON.parseObject(json, UserPaymentOrder.class);
+        }
+
+
+        public UserPaymentOrder userId(String userId) {
+            this.userId = Long.parseLong(userId);
+            return this;
+        }
+
+        public UserPaymentOrder paymentClient(String paymentClient) {
+            this.paymentClient = String.valueOf(paymentClient);
+            return this;
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("下单请求对象")
+    public static class OrderReq implements Serializable {
+
+        @ApiModelProperty("支付类型: adapay")
+        private String paymentType;
+
+        @ApiModelProperty("业务类型Id")
+        private String bizId;
+
+        @NotNull(message = "订单类型不能为空")
+        @ApiModelProperty(value = "订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 ) 老师端(VIP、开通会员 PIANO_ROOM、琴房时长 ACTI_REGIST 活动报名)", required = true)
+        private OrderTypeEnum orderType;
+
+        @ApiModelProperty("现价")
+        private BigDecimal currentPrice;
+
+        @ApiModelProperty("支付现金金额")
+        private BigDecimal paymentCashAmount;
+
+        @ApiModelProperty("支付优惠金额")
+        private BigDecimal paymentCouponAmount;
+
+        @ApiModelProperty("订单名称")
+        private String orderName;
+
+        @ApiModelProperty("订单描述信息")
+        private String orderDesc;
+
+        @ApiModelProperty("用户备注")
+        private String userNote;
+
+        @ApiModelProperty("优惠券Id;多个使用,隔开")
+        private String couponIds;
+
+        @ApiModelProperty("订单商品信息")
+        private List<UserPaymentOrderWrapper.OrderGoodsInfo> goodsInfos;
+
+        @ApiModelProperty(value = "用户身份", hidden = true)
+        private String paymentClient;
+
+        @ApiModelProperty(value = "用户编号", hidden = true)
+        private Long userId;
+
+        @ApiModelProperty(value = "推荐用户id(有推荐人的情况)")
+        private Long recomUserId;
+
+        @ApiModelProperty(value = "活动id")
+        private Long activityId;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public OrderReq paymentClient(String paymentClient) {
+            this.paymentClient = String.valueOf(paymentClient);
+            return this;
+        }
+
+        public OrderReq userId(String userId) {
+            this.userId = Long.parseLong(userId);
+            return this;
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("订单支付参数配置")
+    public static class PaymentReqConfig implements Serializable {
+
+        @ApiModelProperty("支付渠道")
+        private String paymentChannel;
+
+        @ApiModelProperty("商户订单号")
+        private String merOrderNo;
+
+        @ApiModelProperty("商品名称")
+        private String subject;
+
+        @ApiModelProperty("商品描述")
+        private String body;
+
+        @ApiModelProperty("附加信息")
+        private String addition;
+
+        @ApiModelProperty("价格")
+        private BigDecimal price;
+
+        @ApiModelProperty("银行卡类型")
+        private String bankType;
+
+        @ApiModelProperty("微信授权code")
+        private String code;
+
+        @ApiModelProperty("订单过期时间")
+        private Date expirationTime;
+
+        @ApiModelProperty("微信支付公众号")
+        private String wxAppId;
+
+        @ApiModelProperty(value = "支付用户Id", hidden = true)
+        private String userId;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+    }
+}

+ 1 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/UserOrderController.java

@@ -106,7 +106,7 @@ public class UserOrderController {
     }
 
     @ApiOperation(value = "取消订单")
-    @PostMapping("/orderCancel")
+    @PostMapping("/orderCancel/v2")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "orderNo", value = "订单号", paramType = "query", dataType = "String", required = true),
             @ApiImplicitParam(name = "reason", value = "取消说明", paramType = "query", dataType = "String")