소스 검색

Merge remote-tracking branch 'origin/master'

hgw 3 년 전
부모
커밋
4ed5c51163
40개의 변경된 파일483개의 추가작업 그리고 166개의 파일을 삭제
  1. 2 2
      cooleshow-auth/auth-server/src/main/resources/bootstrap-prod.yml
  2. 2 2
      cooleshow-bbs/src/main/resources/bootstrap-prod.yml
  3. 2 2
      cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml
  4. 58 45
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  5. 11 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java
  6. 2 2
      cooleshow-user/user-admin/src/main/resources/bootstrap-prod.yml
  7. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MemberPriceSettingsDao.java
  8. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java
  9. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HotSearchSearch.java
  10. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/HotSearch.java
  11. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HotSearchEnum.java
  12. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java
  13. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AlbumMusicRelateService.java
  14. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  15. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  16. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/AlbumMusicRelateServiceImpl.java
  17. 1 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java
  18. 17 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  19. 0 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java
  20. 12 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  21. 1 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  22. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicSheetServiceImpl.java
  23. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  24. 6 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  25. 105 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  26. 79 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  27. 1 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  28. 1 1
      cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseScheduleRecordMapper.xml
  29. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HotSearchMapper.xml
  30. 9 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml
  31. 3 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  32. 6 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  33. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  34. 2 2
      cooleshow-user/user-classroom/src/main/resources/bootstrap-prod.yml
  35. 2 2
      cooleshow-user/user-student/src/main/resources/bootstrap-prod.yml
  36. 2 2
      cooleshow-user/user-teacher/src/main/resources/bootstrap-prod.yml
  37. 4 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicSheetController.java
  38. 2 2
      cooleshow-user/user-website/src/main/resources/bootstrap-prod.yml
  39. 2 2
      cooleshow-websocket/src/main/resources/bootstrap-prod.yml
  40. 13 0
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/Payment.java

+ 2 - 2
cooleshow-auth/auth-server/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: auth
         file-extension: yaml

+ 2 - 2
cooleshow-bbs/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: bbs
         file-extension: yaml

+ 2 - 2
cooleshow-gateway/gateway-web/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: teacher
         file-extension: yaml

+ 58 - 45
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -539,17 +539,23 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             orderPayRes.setMessage("订单已付款或已关闭");
             return orderPayRes;
         }
-        // UserOrderPayment userOrderPayment = userOrderPaymentService.getByOrderNo(detail.getOrderSn(),
-        //                                              payReq.getPayChannel(),TradeStatusEnum.pending);
-        //
-        // if (userOrderPayment != null) {
-        //     // 拉起原有的支付
-        //     orderPayRes = new OrderPayRes();
-        //     orderPayRes.setPay_info(userOrderPayment.getPayInfo());
-        //     orderPayRes.setPayChannel(userOrderPayment.getPayChannel());
-        //     orderPayRes.setPay_amt(userOrderPayment.getPayAmt().setScale(2, RoundingMode.HALF_UP).toString());
-        //     return orderPayRes;
-        // }
+        UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
+
+        if (orderPayment != null) {
+            // 查询订单信息
+            BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
+            //支付成功
+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus().getCode())
+                    && detail.getStatus() == 0) {
+                orderSuccess(detail,null, res.getData());
+                orderPayRes.setStatus(false);
+                orderPayRes.setMessage("订单已付款或已关闭");
+                return orderPayRes;
+            }
+
+            //查询订单下支付中的付款单,取消支付
+            userOrderPaymentService.closePayment(orderPayment.getOrderNo(),  "用户发起了新的付款请求", null);
+        }
 
         //构建汇付统一下单请求
         OpenEnum openType = OpenEnum.valueOf(paymentProperties.getOpenType());
@@ -623,6 +629,15 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         return orderPayRes;
     }
 
+    private BaseResult<Payment> getPaymentBaseResult(UserOrderPayment orderPayment) {
+        Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()),
+                                    PaymentClientEnum.valueOf(orderPayment.getPaymentClient()),
+                                    PayChannelEnum.valueOf(orderPayment.getPayChannel()));
+        param.setId(orderPayment.getTransNo());
+        param.setPaymentNo(orderPayment.getAdapayNo());
+        return paymentClient.queryPayment(param);
+    }
+
 
     private void saveOrderPayment(Payment payment, OmsOrderDetail detail, String paymentClient) {
         UserOrderPayment userOrderPayment;
@@ -646,9 +661,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         userOrderPayment.setCreateTime(new Date());
         userOrderPayment.setUpdateTime(new Date());
 
-        //查询订单下支付中的付款单,取消支付
-        userOrderPaymentService.closePayment(payment.getOrderNo(),  "用户发起了新的付款请求", null);
-
         userOrderPaymentService.save(userOrderPayment);
     }
 
@@ -695,19 +707,19 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         }
         OmsOrderDetail detail = detail(userOrderPayment.getOrderNo());
         if (detail.getStatus() == 0) {
-            orderSuccess(detail, data, data.getId());
+            orderSuccess(detail, data, null);
         } else {
             LOG.error("汇付支付回调,订单状态异常。 req is {}", detail.getOrderSn());
             LOG.warn("支付金额原路退回 {}", detail.getOrderSn());
-            orderRefund(userOrderPayment,data,detail);
+            orderRefund(userOrderPayment,data.getExecutePaymentCallBack().getPayAmt(),data.getId(),detail);
         }
     }
 
     /**
      * 支付成功,业务退款
      */
-    private void orderRefund(UserOrderPayment userOrderPayment,PaymentCallBack data,OmsOrder order) {
-        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayOrderNo(userOrderPayment.getOrderNo());
+    private void orderRefund(UserOrderPayment userOrderPayment,String refundAmount,String payTransNo,OmsOrder order) {
+        UserOrderRefund userOrderRefund = userOrderRefundMapper.selectByPayOrderNo(userOrderPayment.getAdapayNo());
         if (userOrderRefund != null && userOrderRefund.getStatus().equals("succeeded")) {
             LOG.warn("支付金额已退回");
             return;
@@ -717,17 +729,17 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
         RefundBill refundReq = new RefundBill(OpenEnum.valueOf(userOrderPayment.getOpenType()), PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), PayChannelEnum.valueOf(userOrderPayment.getPayChannel()));
         refundReq.setRefundNo(orderSn);
-        refundReq.setRefundAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
+        refundReq.setRefundAmt(new BigDecimal(refundAmount));
 
         refundReq.setReason("支付超时,全额退回");
         refundReq.setPaymentNo(userOrderPayment.getAdapayNo());
-        refundReq.setTradeNo(data.getId());
+        refundReq.setTradeNo(payTransNo);
         refundReq.setOrderAmt(userOrderPayment.getPayAmt());
         BaseResult<RefundBill> refundBillBaseResult = paymentClient.refundPayment(refundReq);
         userOrderRefund = new UserOrderRefund();
         userOrderRefund.setOrderNo(orderSn);
-        userOrderRefund.setPayTransNo(data.getId());
-        userOrderRefund.setRefundAmt(userOrderPayment.getPayAmt());
+        userOrderRefund.setPayTransNo(payTransNo);
+        userOrderRefund.setRefundAmt(new BigDecimal(refundAmount));
         userOrderRefund.setPayOrderNo(userOrderPayment.getOrderNo());
         if (refundBillBaseResult.getStatus()) {
             RefundBill refundBill = refundBillBaseResult.getData();
@@ -816,18 +828,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         }
         OmsOrderDetail detail = detail(orderPayment.getOrderNo());
         try {
-            Payment param = new Payment(OpenEnum.valueOf(orderPayment.getOpenType()),
-                                        PaymentClientEnum.valueOf(orderPayment.getPaymentClient()),
-                                        PayChannelEnum.valueOf(orderPayment.getPayChannel()));
-            param.setId(orderPayment.getTransNo());
-            param.setPaymentNo(orderPayment.getAdapayNo());
-            BaseResult<Payment> res = paymentClient.queryPayment(param);
+            BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
             //支付成功
             if (res.getStatus() && TradeStatusEnum.succeeded.getCode()
                                                             .equals(res.getData()
                                                                        .getStatus()
-                                                                       .getCode()) && (detail.getStatus() == 0 || detail.getStatus() == 1)) {
-                orderSuccess(detail, res.getData().getId());
+                                                                       .getCode()) && detail.getStatus() == 0) {
+                orderSuccess(detail,null, res.getData());
                 return;
             }
             //支付失败
@@ -843,10 +850,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     }
 
 
-    void orderSuccess(OmsOrder detail, String tranId) {
-        orderSuccess(detail, null, tranId);
-    }
-
     /**
      * 订单完成
      *
@@ -854,7 +857,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * @updateTime 2022/4/13 17:17
      */
     @Transactional(rollbackFor = Exception.class)
-    public void orderSuccess(OmsOrder detail, PaymentCallBack data, String tranId) {
+    public void orderSuccess(OmsOrder detail, PaymentCallBack data,Payment payment) {
         //更新订单
         UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(detail.getOrderSn());
 
@@ -862,26 +865,36 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             LOG.error("支付回调,支付中订单未找到。 orderNo is {}", detail.getOrderSn());
             return;
         }
+
+        // 判断支付金额 是否正确
+        BigDecimal pay_amt;
         if (data != null) {
-            String pay_amt = data.getExecutePaymentCallBack().getPayAmt();
-            if (!pay_amt.equals(detail.getPayAmount().setScale(2, RoundingMode.HALF_UP).toString())) {
-                orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
-            }
+            pay_amt = new BigDecimal(data.getExecutePaymentCallBack().getPayAmt());
+
+            orderPayment.setTransNo(data.getId());
+        } else {
+            pay_amt = new BigDecimal(payment.getPayAmt());
+            orderPayment.setTransNo(payment.getId());
         }
-        if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) {
-            paySuccess(detail.getId(), 1);
-        } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) {
-            paySuccess(detail.getId(), 2);
+        if (pay_amt.compareTo(detail.getPayAmount()) != 0) {
+            orderPayment.setPayFailMsg("订单金额和实际支付金额不符");
+            orderRefund(orderPayment,pay_amt.setScale(2, RoundingMode.HALF_UP).toString(),orderPayment.getTransNo(),detail);
+        } else {
+
+            if (orderPayment.getPayChannel().equals("alipay") || orderPayment.getPayChannel().equals("ali_app")) {
+                paySuccess(detail.getId(), 1);
+            } else if (orderPayment.getPayChannel().equals("wx_lite") || orderPayment.getPayChannel().equals("wx_app")) {
+                paySuccess(detail.getId(), 2);
+            }
         }
 
         orderPayment.setStatus(TradeStatusEnum.succeeded.getCode());
         orderPayment.setArrivalTime(new Date());
-        orderPayment.setTransNo(tranId);
+        orderPayment.setPayAmt(pay_amt);
         if (null != data) {
             try {
                 orderPayment.setArrivalTime(data.getExecutePaymentCallBack().getTradeTime());
                 orderPayment.setTransNo(data.getId());
-                orderPayment.setPayAmt(new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
                 orderPayment.setFeeAmt(new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt()));
             } catch (Exception e) {
                 e.printStackTrace();

+ 11 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/TeacherController.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.admin.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.entity.TeacherStyleVideo;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
@@ -9,6 +11,7 @@ import com.yonge.toolset.mybatis.support.PageUtil;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
@@ -18,6 +21,9 @@ import com.yonge.cooleshow.biz.dal.dto.search.TeacherSearch;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 @RestController
 @RequestMapping("/teacher")
 @Api(value = "教师表", tags = "教师表")
@@ -37,6 +43,11 @@ public class TeacherController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('teacher/detail')")
     public HttpResponseResult<TeacherVo> detail(@PathVariable("id") Long userId) {
         TeacherVo detail = teacherService.detail(userId);
+        if (null != detail && !CollectionUtils.isEmpty(detail.getStyleVideo())) {
+            List<TeacherStyleVideo> styleVideo = detail.getStyleVideo();
+            List<TeacherStyleVideo> collect = styleVideo.stream().filter(o -> AuthStatusEnum.PASS.equals(o.getAuthStatus())).collect(Collectors.toList());
+            detail.setStyleVideo(collect);
+        }
         return succeed(detail);
     }
 

+ 2 - 2
cooleshow-user/user-admin/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: admin
         file-extension: yaml

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

@@ -34,4 +34,12 @@ public interface MemberPriceSettingsDao extends BaseMapper<MemberPriceSettings>{
      * @return: java.util.List<com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo>
      */
     List<MemberPriceSettingsVo> selectList(@Param("param") MemberPriceSettingsSearch param);
+
+    /**
+     * 根据订单详情id查询会员卡
+     *
+     * @param orderDetilId
+     * @return
+     */
+    MemberPriceSettings getMemberPriceByOrderDetilId(@Param("orderDetilId") Long orderDetilId);
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java

@@ -4,6 +4,7 @@ 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.MemberPriceSettings;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
@@ -46,4 +47,5 @@ public interface VipCardRecordDao extends BaseMapper<VipCardRecord> {
      */
     List<VipCardRecordVo> selectExpireRecord();
 
+
 }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.dto.search;
 
+import com.yonge.cooleshow.biz.dal.enums.HotSearchEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.toolset.base.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
@@ -20,6 +21,17 @@ public class HotSearchSearch extends QueryInfo {
     @ApiModelProperty(value = "状态  0:停用,1:启用",dataType = "int")
     private YesOrNoEnum status;
 
+    @ApiModelProperty("类型 MUSIC:曲目和专辑 COURSE:课程")
+    private HotSearchEnum type;
+
+    public HotSearchEnum getType() {
+        return type;
+    }
+
+    public void setType(HotSearchEnum type) {
+        this.type = type;
+    }
+
     @Override
     public String getSearch() {
         return search;

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/HotSearch.java

@@ -4,6 +4,7 @@ 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.HotSearchEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -32,6 +33,11 @@ public class HotSearch implements Serializable {
     @NotBlank(message = "关键词不能为空")
     private String key;
 
+    @ApiModelProperty("MUSIC:曲目和专辑 COURSE:课程 ")
+    @TableField(value = "type_")
+    @NotNull(message = "类型不能为空")
+    private HotSearchEnum type;
+
     @ApiModelProperty("状态 1启用 0禁用 ")
     @TableField(value = "status_")
     private YesOrNoEnum status;
@@ -61,6 +67,15 @@ public class HotSearch implements Serializable {
     @TableField(value = "update_by_")
     private Long updateBy;
 
+
+    public HotSearchEnum getType() {
+        return type;
+    }
+
+    public void setType(HotSearchEnum type) {
+        this.type = type;
+    }
+
     public Long getId() {
         return id;
     }

+ 33 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HotSearchEnum.java

@@ -0,0 +1,33 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-07-05
+ */
+public enum HotSearchEnum implements BaseEnum<String,HotSearchEnum> {
+
+    MUSIC("曲目和专辑"),
+    COURSE("课程");
+    @EnumValue
+    private String code;
+    private String name;
+
+    HotSearchEnum(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 3 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java

@@ -101,7 +101,7 @@ public class WithdrawSdk {
             if (StringUtils.equals(jsonObject.getString("return_code"), "T")) {
                 return true;
             }
-            throw new ThirdpartyException("合同签署失败:{}", jsonObject.getString("content"));
+            throw new ThirdpartyException("合同签署失败:{}", jsonObject.getString("return_message"));
         } catch (IOException e) {
             logger.error("请求[合同签署]接口报错", e);
             throw new ThirdpartyException("请求[合同签署]接口报错:{}", e.getMessage());
@@ -203,6 +203,8 @@ public class WithdrawSdk {
             String returnCode = String.valueOf(mapTypes.get("return_code"));
             if (returnCode.equals("T")){
                 return HttpResponseResult.succeed(true);
+            }else{
+                return HttpResponseResult.failed(String.valueOf(mapTypes.get("return_message")));
             }
         } catch (IOException e) {
             logger.info("发送失败:{}", e);

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/AlbumMusicRelateService.java

@@ -32,4 +32,10 @@ public interface AlbumMusicRelateService extends IService<AlbumMusicRelate> {
      */
     boolean addMusicSheet(Long albumId, List<Long> musicSheetIdList, Long userId);
 
+    /**
+     * 删除曲目与专辑关联
+     *
+     * @param musicSheetId 曲目id
+     */
+    void delByMusicSheet(Long musicSheetId);
 }

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

@@ -64,7 +64,7 @@ public interface UserOrderRefundService extends IService<UserOrderRefund>  {
 	HttpResponseResult<UserOrderRefundBill> orderRefund(String orderNo, String reason);
 
 	/**
-	 * 交易失败退款(退已完成的订单)
+	 * 交易失败退款(交易原路退还)
 	 * @param data
 	 * @param reason
 	 * @return

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

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
@@ -34,6 +35,13 @@ public interface VipCardRecordService extends IService<VipCardRecord> {
     VipCardRecordVo detail(Long orderDetilId, Long userId);
 
     /**
+     * 构建VipCardRecord对象
+     * @param orderDetailVo
+     * @return
+     */
+    VipCardRecord buildVipCardRecordByOrderDetail(UserOrderDetailVo orderDetailVo);
+
+    /**
      * 分页查询
      *
      * @author liweifan

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

@@ -70,4 +70,11 @@ public class AlbumMusicRelateServiceImpl extends ServiceImpl<AlbumMusicRelateDao
 
         return this.saveBatch(albumMusicRelateList);
     }
+
+    @Override
+    public void delByMusicSheet(Long musicSheetId) {
+        this.lambdaUpdate()
+                .eq(AlbumMusicRelate::getMusicSheetId,musicSheetId)
+                .remove();
+    }
 }

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

@@ -413,6 +413,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
         IPage<StudentHomeworkVo> studentHomeworkList = baseMapper
                 .selectStudentHomeworkByCourseId(PageUtil.getPage(query),query.getCourseId());
 
+        courseScheduleHomeworkVo.setCourseGroupName(courseScheduleHomeworkVo.getCourseGroupName() + "-第" + courseScheduleHomeworkVo.getClassNum() + "课");
 
         courseScheduleHomeworkVo.setStudentHomeworkList(studentHomeworkList);
         courseScheduleHomeworkVo.setStudentNum(studentHomeworkList.getTotal());

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

@@ -1668,14 +1668,6 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 List<Long> ids = practiceList.stream().map(CourseScheduleStudentVo::getCourseId).collect(Collectors.toList());
                 repliedDao.deleteBatch(ids);
                 repliedDao.insertBatch(practiceList);
-
-                //清除缓存
-                for (CourseScheduleStudentVo practice : practiceList) {
-                    //清除学生统计缓存
-                    redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(practice.getStudentId())).delete();
-                    //清除老师统计缓存
-                    redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(practice.getTeacherId())).delete();
-                }
             }
 
             //更新琴房课学生最近结课时间
@@ -1717,6 +1709,17 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
                 pianoRoomTimeDao.updateBatch(roomTimeList);
             }
 
+            List<CourseScheduleStudentVo> courseList = userList.stream()
+                    .filter(s -> (s.getType().equals(CourseScheduleEnum.PRACTICE.getCode()) || s.getType().equals(CourseScheduleEnum.PIANO_ROOM_CLASS.getCode()) ))
+                    .collect(Collectors.toList());
+
+            //清除缓存
+            for (CourseScheduleStudentVo practice : courseList) {
+                //清除学生统计缓存
+                redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(practice.getStudentId())).delete();
+                //清除老师统计缓存
+                redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(practice.getTeacherId())).delete();
+            }
             //课程状态更新为COMPLETE
             baseMapper.updateEndTime(userList);
         }
@@ -2129,6 +2132,12 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
             throw new BizException("课程结束时间计算错误");
         }
 
+        //课程改为过去式避免校验时报错
+        baseMapper.update(null, Wrappers.<CourseSchedule>lambdaUpdate()
+                .eq(CourseSchedule::getId, courseId)
+                .set(CourseSchedule::getStartTime, DateUtil.getYesterday())
+                .set(CourseSchedule::getEndTime, DateUtil.getYesterday()));
+
         //批量检查老师课时在数据库是否重复
         this.batchCheckTeacherCourseTime(teacherId, timeList, CourseTimeEntity::getStartTime, CourseTimeEntity::getEndTime);
 

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

@@ -114,10 +114,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             //获取节拍器信息
             joinRoomResult.setMidiJson(courseScheduleStudentPaymentService.getMemberMidi(courseScheduleId,sysUser.getUserId()));
         }
-//        //获取用户已下载的伴奏列表
-//        List<CourseScheduleStudentMusicSheetResult> musicSheetResults = courseScheduleStudentMusicSheetService.getDao().
-//                queryBySheetIdAndCourseId(null,courseScheduleId,sysUser.getUserId(),null,null);
-//        joinRoomResult.setMusicSheetResults(musicSheetResults);
         //课程结束后关闭教室的时间
         joinRoomResult.setAutoCloseNetworkRoomTime(sysConfigDao.findConfigValue(SysConfigConstant.DESTROY_EXPIRED_PRACTICE_ROOM_MINUTE));
         //创建、加入群聊
@@ -604,7 +600,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
             room.setUpdateTime(now);
             room.setDisplay(display);
             baseMapper.insert(room);
-            this.sendDisplay(userId,room);
             IMApiResultInfo resultInfo = imHelper.createGroup(new String[]{userId.toString()}, roomId, roomId);
             if(resultInfo.getCode() != 200){
                 log.error("创建群聊失败 resultInfo:{}",resultInfo);

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

@@ -25,6 +25,7 @@ import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo;
 import com.yonge.cooleshow.biz.dal.dto.search.MemberPriceSettingsSearch;
 import com.yonge.cooleshow.biz.dal.dao.MemberPriceSettingsDao;
 import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -75,55 +76,31 @@ public class MemberPriceSettingsServiceImpl extends ServiceImpl<MemberPriceSetti
 
     @Override
     public void orderSuccess(UserOrderDetailVo orderDetailVo) {
-        MemberPriceSettingsVo detail = detail(orderDetailVo.getBizId());
-        if (null == detail) {
+        StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
+        if (null == studentVo) {
             return;
         }
-        StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
-        //修改用户会员时长
-        Date membershipEndTime = studentVo.getMembershipEndTime();
-        Calendar now = Calendar.getInstance();
-
-        VipCardRecord vipCardRecord = new VipCardRecord();
-        vipCardRecord.setUserId(orderDetailVo.getUserId());
-        vipCardRecord.setOrderNo(orderDetailVo.getOrderNo());
-        vipCardRecord.setSubOrderNo(orderDetailVo.getSubOrderNo());
-        vipCardRecord.setVipCardId(detail.getId());
-        vipCardRecord.setMsgStatus(0);
-
-        if (null == membershipEndTime || membershipEndTime.before(new Date())) {
-            //没有会员、会员已过期
-            studentVo.setMembershipStartTime(now.getTime());
+        VipCardRecord vipCardRecord = vipCardRecordService.buildVipCardRecordByOrderDetail(orderDetailVo);
+
+        if (null == studentVo.getMembershipEndTime() || studentVo.getMembershipEndTime().before(new Date())) {
+            //没有会员、会员已过期 会员卡生效时间为当前时间
+            studentVo.setMembershipStartTime(vipCardRecord.getStartTime());
+            studentVo.setMembershipEndTime(vipCardRecord.getEndTime());
         } else {
-            now.setTime(studentVo.getMembershipEndTime());
-        }
-        vipCardRecord.setStartTime(now.getTime());
-
-        if (PeriodEnum.DAY.equals(detail.getPeriod())) {
-            now.add(Calendar.DAY_OF_MONTH, 1);
-        } else if (PeriodEnum.MONTH.equals(detail.getPeriod())) {
-            now.add(Calendar.MONTH, 1);
-        } else if (PeriodEnum.QUARTERLY.equals(detail.getPeriod())) {
-            now.add(Calendar.MONTH, 3);
-        } else if (PeriodEnum.YEAR_HALF.equals(detail.getPeriod())) {
-            now.add(Calendar.MONTH, 6);
-        } else if (PeriodEnum.YEAR.equals(detail.getPeriod())) {
-            now.add(Calendar.YEAR, 1);
+            studentVo.setMembershipEndTime(vipCardRecord.getEndTime());
         }
-
-        vipCardRecord.setEndTime(now.getTime());
-        studentVo.setMembershipEndTime(now.getTime());
         studentVo.setMemberRankSettingId(1l);
         studentVo.setUpdateTime(new Date());
         studentService.updateById(studentVo);
         //会员购买记录入库
         vipCardRecordService.save(vipCardRecord);
-
         //会员购买消息推送
         authSend(studentVo.getUserId(), studentVo.getPhone(), DateUtil.format(vipCardRecord.getEndTime(), DateUtil.DEFAULT_PATTERN));
     }
 
 
+
+
     // 发送会员购买消息推送
     private void authSend(Long userId, String phone, String param1) {
         Map<Long, String> receivers = new HashMap<>();

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

@@ -94,9 +94,7 @@ public class MusicAlbumServiceImpl extends ServiceImpl<MusicAlbumDao,MusicAlbum>
         albumDetailVo.setAlbumFavoriteCount(musicAlbum.getAlbumFavoriteCount());
         albumDetailVo.setMusicTagNames(musicTagService.getMusicTagNames(StringUtil.toLongList(musicAlbum.getAlbumTag())));
 
-        if(query.getType() == 1) {
-            query.setSubjectIds(musicAlbum.getSubjectId());
-        }
+        query.setSubjectIds(musicAlbum.getSubjectId());
 
         IPage<MusicSheetVo> musicSheetVoIPage = musicSheetService.selectAlbumDetailPage(page,query);
         albumDetailVo.setMusicSheetList(PageUtil.pageInfo(musicSheetVoIPage));

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

@@ -78,6 +78,9 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
     private MusicSheetAuthRecordService musicSheetAuthRecordService;
 
     @Autowired
+    private AlbumMusicRelateService albumMusicRelateService;
+
+    @Autowired
     private SysUserFeignService sysUserFeignService;
 
     @Autowired
@@ -392,6 +395,10 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         if (musicSheetDto.getAuditVersion() == null) {
             musicSheetDto.setAuditVersion(YesOrNoEnum.NO);
         }
+
+        // 删除曲目专辑关联
+        delAlbumSheetRef(musicSheetDto.getId(),musicSheetDto.getMusicSubject());
+
         List<MusicSheetAccompaniment> list;
         if (!AudioTypeEnum.MIDI.getCode().equals(musicSheetDto.getAudioType().getCode())){
             list = musicSheetDto.getBackground();
@@ -414,6 +421,26 @@ public class MusicSheetServiceImpl extends ServiceImpl<MusicSheetDao,MusicSheet>
         }
     }
 
+    /**
+     * 删除专辑曲目关联
+     *
+     * @param id 曲目id
+     * @param subjectId 声部id
+     */
+    private void delAlbumSheetRef(Long id,String subjectId) {
+
+        if (id == null ) {
+            return;
+        }
+        MusicSheet musicSheet = this.getById(id);
+        if (musicSheet.getMusicSubject().equals(subjectId)) {
+            return;
+        }
+        albumMusicRelateService.delByMusicSheet(musicSheet.getId());
+
+
+    }
+
     @Override
     public HttpResponseResult<OrderCreateRes> buyMusicSheetCheck(OrderReq.OrderReqInfo orderReqInfo) {
 

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

@@ -55,9 +55,18 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 	@Override
 	public boolean sendValidCode(String mobile, String type, ClientEnum platform) {
 		SysUser sysUser = sysUserFeignService.queryUserByMobile(mobile);
+		// 修改手机号 有用户了不许修改
+		if ("PHONE".equals(type) && sysUser != null) {
+			throw new BizException("手机号已经注册过账号");
+		}
 		Long userId = null;
 		if (sysUser != null) {
 			userId = sysUser.getId();
+		} else {
+			sysUser = sysUserFeignService.queryUserInfo();
+			if (sysUser != null) {
+				userId = sysUser.getId();
+			}
 		}
 		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.SMS_MAX_TIMES);
 		int times = 3;

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

@@ -23,6 +23,7 @@ import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
 import com.yonge.toolset.payment.base.enums.TradeStatusEnum;
 import com.yonge.toolset.payment.base.model.*;
+import com.yonge.toolset.payment.base.model.callback.ExecutePaymentCallBack;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
 import com.yonge.toolset.payment.core.props.PaymentProperties;
 import com.yonge.toolset.payment.core.service.PaymentClient;
@@ -95,7 +96,6 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         if (null == orderPayment) {
             return true;
         }
-
         //更新付款单
         orderPayment.setStatus(TradeStatusEnum.close);
         orderPayment.setPayFailMsg(StringUtil.isEmpty(reason) ? "交易取消" : reason);
@@ -129,9 +129,8 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         return true;
     }
 
-
     @Override
-    public HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail) throws Exception {
+    public HttpResponseResult<OrderPayRes> createOrderPayment(OrderPayReq payReq, UserOrderVo detail) {
         OrderPayRes orderPayRes = new OrderPayRes();
         //支付订单号生成
         Long paymentNo = idGeneratorService.generatorId("paymentNo");
@@ -173,6 +172,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
                 payment.setExpend(expend);
             }
         }
+        closePaymentAndReqOpen(payment.getOrderNo(), "用户发起了新的付款请求");
 
         //付款请求
         BaseResult<Payment> paymentResBaseResult = paymentClient.executePayment(payment);
@@ -205,7 +205,7 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
             } else if (TradeStatusEnum.failed.equals(data.getStatus())) {//支付失败
                 paymentFailedHandle(data, data.getErrMsg());
             }
-        }else if (!userOrderVo.getStatus().equals(OrderStatusEnum.PAID)) {
+        } else if (!userOrderVo.getStatus().equals(OrderStatusEnum.PAID)) {
             //原路退还
             orderRefundService.orderFailRefund(data, userOrderVo.getOrderNo(), "订单已超时,金额原路退回");
         }
@@ -271,9 +271,6 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         }
         if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY) || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             userOrderService.orderSuccess(detail, data);
-        } else if (!detail.getStatus().equals(OrderStatusEnum.PAID)) {
-            //原路退还
-            orderRefundService.orderFailRefund(data, detail.getOrderNo(), "订单已超时,金额原路退回");
         }
 
         //处理支付完成签署协议
@@ -349,8 +346,8 @@ public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao
         if (null == orderPayment) {
             return;
         }
-        orderPayment.setStatus(TradeStatusEnum.failed);
-        orderPayment.setPayFailMsg("支付关单回调失败-" + data.getErrMsg());
+        orderPayment.setCloseStatus(TradeStatusEnum.failed);
+        orderPayment.setCloseFailMsg("支付关单回调失败-" + data.getErrMsg());
         orderPayment.setUpdateTime(new Date());
         updateById(orderPayment);
     }

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

@@ -2,8 +2,10 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.enums.*;
+import com.yonge.toolset.payment.base.model.callback.ExecutePaymentCallBack;
 import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
@@ -120,7 +122,6 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         //视频课购买
         orderSuccess.put(GoodTypeEnum.VIDEO, recordService::buyVideoCourseSuccess);
 
-
         //曲目购买
         orderSuccess.put(GoodTypeEnum.MUSIC, musicSheetService::buyMusicSheetSuccess);
 
@@ -192,11 +193,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                 && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
             return HttpResponseResult.failed("订单已关闭");
         }
-        Boolean close = orderPaymentService.closePaymentAndReqOpen(payReq.getOrderNo(), "用户取消订单");
-        if (close) {
-            //关闭订单
-            doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
-        }
+        //关闭或完成订单
+        closeOrSuccessOrder(payReq.getOrderNo());
         return HttpResponseResult.succeed(true);
     }
 
@@ -259,6 +257,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         Long orderNo = idGeneratorService.generatorId("orderNo");
         orderReq.setOrderNo(Long.toString(orderNo));
         //验证参数,必须验证参数
+        BigDecimal actualPrice = BigDecimal.ZERO;
         for (OrderReq.OrderReqInfo info : orderReq.getOrderInfos()) {
             Function<OrderReq.OrderReqInfo, HttpResponseResult<OrderCreateRes>> createFunction = orderCreate.get(info.getGoodType());
             if (Objects.isNull(createFunction)) {
@@ -280,10 +279,18 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             BigDecimal couponAmount = BigDecimal.ZERO;
             createRes.setActualPrice(createRes.getExpectPrice().subtract(couponAmount).setScale(2, RoundingMode.HALF_UP));
             createRes.setCouponAmount(couponAmount);
+            //累计实际支付金额
+            actualPrice = actualPrice.add(createRes.getActualPrice());
 
             info.setCreateRes(createRes);
         }
 
+        //验证金额
+        if (actualPrice.setScale(2, RoundingMode.HALF_UP)
+                .compareTo(orderReq.getActualPrice().setScale(2, RoundingMode.HALF_UP)) != 0) {
+            return HttpResponseResult.failed("订单金额校验不通过");
+        }
+
         //验证成功后,订单入库
         UserOrderVo orderVo = insertOrder(orderReq);
 
@@ -322,12 +329,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         try {
             return doOrderPay(payReq, detail);
         } catch (BizException e) {
-            //入订单付款表,同时修改订单状态
-            doOrderCancel(detail, OrderStatusEnum.FAIL, e.getMessage());
             return HttpResponseResult.failed(e.getMessage());
         } catch (Exception e) {
-            //入订单付款表,同时修改订单状态
-            doOrderCancel(detail, OrderStatusEnum.FAIL, e.getMessage());
             return HttpResponseResult.failed("付款失败");
         }
     }
@@ -370,6 +373,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Transactional(rollbackFor = Exception.class)
     void pollingCancelOrder(String orderNo) {
+        closeOrSuccessOrder(orderNo);
+    }
+
+    private void closeOrSuccessOrder(String orderNo) {
         UserOrderVo detail = detail(orderNo, null);
         if (null == detail) {
             return;
@@ -388,11 +395,29 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             param.setId(detail.getTransNo());
             param.setPaymentNo(detail.getPaymentNo());
             BaseResult<Payment> res = paymentClient.queryPayment(param);
+            Payment queryPaymentData = res.getData();
+
             //支付成功
-            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus())
+            if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(queryPaymentData.getStatus())
                     && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))) {
                 //订单已经完成,则完成订单
                 orderSuccess(detail);
+                //付款单改为已完成状态
+                userOrderPayment.setTransNo(queryPaymentData.getId());
+                userOrderPayment.setStatus(TradeStatusEnum.succeeded);
+                userOrderPayment.setUpdateTime(new Date());
+                userOrderPayment.setArrivalTime(new Date());
+                userOrderPayment.setBackPayAmt(
+                        new BigDecimal(queryPaymentData.getPayAmt()));
+
+                ExecutePaymentCallBack executePaymentCallBack = queryPaymentData.getExecutePaymentCallBack();
+                if (null != executePaymentCallBack) {
+                    userOrderPayment.setArrivalTime(executePaymentCallBack.getTradeTime());
+                    userOrderPayment.setBackPayAmt(
+                            new BigDecimal(executePaymentCallBack.getPayAmt()));
+                    userOrderPayment.setFeeAmt(new BigDecimal(executePaymentCallBack.getFeeAmt()));
+                }
+                orderPaymentService.updateById(userOrderPayment);
             } else {
                 //关闭订单付款单
                 Boolean close = orderPaymentService.closePaymentAndReqOpen(orderNo, "订单超时");
@@ -401,21 +426,79 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                     doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
                 }
             }
+        } else if (TradeStatusEnum.succeeded.equals(userOrderPayment.getStatus())) {
+            //订单已经完成,则完成订单
+            orderSuccess(detail);
+        } else if (TradeStatusEnum.failed.equals(userOrderPayment.getStatus())) {
+            //入订单付款表,同时修改订单状态
+            doOrderCancel(detail, OrderStatusEnum.FAIL, userOrderPayment.getPayFailMsg());
+        } else if (TradeStatusEnum.close.equals(userOrderPayment.getStatus())) {
+            //关闭订单
+            doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
+        }
+    }
+
+    /**
+     * 判断订单是否完成,若订单已完成则完成订单
+     *
+     * @param orderNo
+     * @return 可以继续支付 true
+     */
+    private Boolean checkAndSuccessOrder(String orderNo) {
+        UserOrderVo detail = detail(orderNo, null);
+        if (null == detail) {
+            return true;
+        }
+        if (!OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())
+                && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
+            return false;
+        }
+        UserOrderPayment userOrderPayment = orderPaymentService.detailByTransNoOrPaymentNo(detail.getTransNo(), detail.getPaymentNo());
+        if (null == userOrderPayment) {
+            return true;
+        }
+
+        Payment param = new Payment(detail.getOpenType(),
+                PaymentClientEnum.valueOf(userOrderPayment.getPaymentClient()), detail.getPayChannel());
+        param.setId(detail.getTransNo());
+        param.setPaymentNo(detail.getPaymentNo());
+        BaseResult<Payment> res = paymentClient.queryPayment(param);
+        Payment queryPaymentData = res.getData();
+
+        //支付成功
+        if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(queryPaymentData.getStatus())
+                && (OrderStatusEnum.WAIT_PAY.equals(detail.getStatus()) || OrderStatusEnum.PAYING.equals(detail.getStatus()))) {
+            //订单已经完成,则完成订单
+            orderSuccess(detail, null);
+            //付款单改为已完成状态
+            userOrderPayment.setTransNo(queryPaymentData.getId());
+            userOrderPayment.setStatus(TradeStatusEnum.succeeded);
+            userOrderPayment.setUpdateTime(new Date());
+            userOrderPayment.setArrivalTime(new Date());
+            userOrderPayment.setBackPayAmt(
+                    new BigDecimal(queryPaymentData.getPayAmt()));
+
+            ExecutePaymentCallBack executePaymentCallBack = queryPaymentData.getExecutePaymentCallBack();
+            if (null != executePaymentCallBack) {
+                userOrderPayment.setArrivalTime(executePaymentCallBack.getTradeTime());
+                userOrderPayment.setBackPayAmt(
+                        new BigDecimal(executePaymentCallBack.getPayAmt()));
+                userOrderPayment.setFeeAmt(new BigDecimal(executePaymentCallBack.getFeeAmt()));
+            }
+            orderPaymentService.updateById(userOrderPayment);
+            return false;
         }
+        return true;
     }
 
     private HttpResponseResult<OrderPayRes> doOrderPay(OrderPayReq payReq, UserOrderVo detail) throws Exception {
-        /*UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(payReq.getOrderNo(), payReq.getPayChannel(), TradeStatusEnum.pending);
-        //当前渠道已经有创建支付请求
-        if (null != orderPayment && !StringUtil.isEmpty(orderPayment.getPayInfo())) {
-            OrderPayRes orderPayRes = new OrderPayRes();
-            orderPayRes.setPay_amt(orderPayment.getPayAmt().toString());
-            orderPayRes.setPay_info(orderPayment.getPayInfo());
-            orderPayRes.setPayChannel(orderPayment.getPayChannel());
-            orderPayRes.setPaymentNo(orderPayment.getPaymentNo());
-            return HttpResponseResult.succeed(orderPayRes);
-        }*/
-        return orderPaymentService.createOrderPayment(payReq, detail);
+        Boolean aBoolean = checkAndSuccessOrder(payReq.getOrderNo());
+        if (aBoolean) {
+            return orderPaymentService.createOrderPayment(payReq, detail);
+        } else {
+            return HttpResponseResult.failed("订单状态异常");
+        }
+
     }
 
     /***
@@ -679,13 +762,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             //清除商家统计缓存
             Long merchId = orderDetailVo.getMerchId();
             if (merchId != null && merchId != 0) {
-                //redissonClient.getBucket(CacheNameEnum.TEACHER_SUBJECT_ITEM.getRedisKey(merchId)).delete();
                 redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(merchId)).delete();
             }
         }
         //清除买家统计缓存
         if (ClientEnum.STUDENT.getCode().equals(detail.getPaymentClient())) {
-            //redissonClient.getBucket(CacheNameEnum.STUDENT_SUBJECT_ITEM.getRedisKey(detail.getUserId())).delete();
             redissonClient.getBucket(CacheNameEnum.STUDENT_TOTAL.getRedisKey(detail.getUserId())).delete();
         } else if (ClientEnum.TEACHER.getCode().equals(detail.getPaymentClient())) {
             redissonClient.getBucket(CacheNameEnum.TEACHER_TOTAL.getRedisKey(detail.getUserId())).delete();

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

@@ -2,10 +2,15 @@ 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.dao.MemberPriceSettingsDao;
+import com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
-import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.enums.PeriodEnum;
+import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -16,12 +21,8 @@ import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
 import com.yonge.cooleshow.biz.dal.vo.VipCardRecordVo;
 import com.yonge.cooleshow.biz.dal.dto.search.VipCardRecordSearch;
 import com.yonge.cooleshow.biz.dal.dao.VipCardRecordDao;
-import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 @Service
@@ -30,6 +31,14 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     @Autowired
     private SysMessageService sysMessageService;
+    @Autowired
+    private MemberPriceSettingsDao memberPriceSettingsDao;
+    @Autowired
+    private StudentService studentService;
+    @Autowired
+    private MemberPriceSettingsService memberPriceSettingsService;
+    @Autowired
+    private UserOrderDetailService orderDetailService;
 
     @Override
     public VipCardRecordVo detail(Long orderDetilId) {
@@ -38,7 +47,69 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     @Override
     public VipCardRecordVo detail(Long orderDetilId, Long userId) {
-        return baseMapper.detail(orderDetilId, userId);
+        VipCardRecordVo detail = baseMapper.detail(orderDetilId, userId);
+        if (null == detail && null != userId) {
+            detail = new VipCardRecordVo();
+
+            UserOrderDetailVo orderDetailVo = orderDetailService.detail(orderDetilId);
+            VipCardRecord vipCardRecord = buildVipCardRecordByOrderDetail(orderDetailVo);
+            if (null == vipCardRecord) {
+                return detail;
+            }
+            BeanUtils.copyProperties(vipCardRecord, detail);
+            MemberPriceSettings memberPrice = memberPriceSettingsDao.getMemberPriceByOrderDetilId(orderDetilId);
+            detail.setOriginalPrice(memberPrice.getOriginalPrice());
+            detail.setSalePrice(memberPrice.getSalePrice());
+            detail.setPeriod(memberPrice.getPeriod());
+        }
+        return detail;
+    }
+
+    @Override
+    public VipCardRecord buildVipCardRecordByOrderDetail(UserOrderDetailVo orderDetailVo) {
+        if (null == orderDetailVo) {
+            return null;
+        }
+        MemberPriceSettingsVo detail = memberPriceSettingsService.detail(orderDetailVo.getBizId());
+        if (null == detail) {
+            return null;
+        }
+        StudentVo studentVo = studentService.detail(orderDetailVo.getUserId());
+        if (null == studentVo) {
+            return null;
+        }
+        //修改用户会员时长
+        Date membershipEndTime = studentVo.getMembershipEndTime();
+
+        VipCardRecord vipCardRecord = new VipCardRecord();
+        vipCardRecord.setUserId(orderDetailVo.getUserId());
+        vipCardRecord.setOrderNo(orderDetailVo.getOrderNo());
+        vipCardRecord.setSubOrderNo(orderDetailVo.getSubOrderNo());
+        vipCardRecord.setVipCardId(detail.getId());
+        vipCardRecord.setMsgStatus(0);
+
+        if (null == membershipEndTime || membershipEndTime.before(new Date())) {
+            //没有会员、会员已过期 会员卡生效时间为当前时间
+            vipCardRecord.setStartTime(new Date());
+        } else {
+            vipCardRecord.setStartTime(membershipEndTime);
+        }
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(vipCardRecord.getStartTime());
+
+        if (PeriodEnum.DAY.equals(detail.getPeriod())) {
+            cal.add(Calendar.DAY_OF_MONTH, 1);
+        } else if (PeriodEnum.MONTH.equals(detail.getPeriod())) {
+            cal.add(Calendar.MONTH, 1);
+        } else if (PeriodEnum.QUARTERLY.equals(detail.getPeriod())) {
+            cal.add(Calendar.MONTH, 3);
+        } else if (PeriodEnum.YEAR_HALF.equals(detail.getPeriod())) {
+            cal.add(Calendar.MONTH, 6);
+        } else if (PeriodEnum.YEAR.equals(detail.getPeriod())) {
+            cal.add(Calendar.YEAR, 1);
+        }
+        vipCardRecord.setEndTime(cal.getTime());
+        return vipCardRecord;
     }
 
     @Override
@@ -88,7 +159,6 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     }
 
-
     // 发送会员到期3天消息推送
     private void temporary3DaysSend(Long userId, String phone) {
         Map<Long, String> receivers = new HashMap<>();

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

@@ -875,6 +875,7 @@
             <![CDATA[ AND s.class_date_ >= #{param.startDate} ]]>
             <![CDATA[ AND s.class_date_ <= #{param.endDate} ]]>
         </if>
+        ORDER BY s.start_time_
     </select>
     <select id="selectWaitCourse" resultType="com.yonge.cooleshow.biz.dal.dto.UserAccountRecordDto">
         SELECT DISTINCT

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

@@ -65,7 +65,7 @@
     <select id="selectCourseList" resultType="com.yonge.cooleshow.biz.dal.vo.CourseScheduleRecordVo">
         SELECT
         s.id_ AS courseId,
-        g.name_ AS groupName,
+        CONCAT(g.name_,'-第',s.class_num_,'课') AS groupName,
         g.subject_id_ AS subjectId,
         sb.name_ AS subjectName,
         s.status_ AS `status`,

+ 3 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/HotSearchMapper.xml

@@ -15,6 +15,9 @@
             <if test="query.search != null and query.search != ''">
                 and (hs.key_ like concat('%',#{query.search},'%') or hs.id_ like concat('%',#{query.search},'%'))
             </if>
+            <if test="query.type != null">
+                and hs.type_ = #{query.type}
+            </if>
         </where>
     order by  hs.order_ ,hs.id_ desc
     </select>

+ 9 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml

@@ -48,4 +48,13 @@
 	<select id="selectList" resultType="com.yonge.cooleshow.biz.dal.vo.MemberPriceSettingsVo">
 		<include refid="selectSql"/>
 	</select>
+
+    <select id="getMemberPriceByOrderDetilId"
+            resultType="com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings">
+		SELECT
+			<include refid="baseColumns"/>
+		FROM user_order_detail d
+		left join member_price_settings t on d.biz_id_ = t.id_
+		where d.good_type_ = 'VIP' and  d.id_ = #{orderDetilId}
+	</select>
 </mapper>

+ 3 - 3
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml

@@ -174,7 +174,7 @@
 			COUNT(DISTINCT DATE(smcr.create_time_)) trainDays,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
-		WHERE smcr.user_id_=#{userId}
+		WHERE smcr.user_id_=#{userId} and smcr.client_id_ = 'student'
 	</select>
 
 	<select id="getUserTrainChartData" resultType="com.yonge.cooleshow.biz.dal.dto.StudentTrainChartDto">
@@ -183,7 +183,7 @@
 			COUNT(DISTINCT smcr.behavior_id_) trainNum,
 			SUM(smcr.play_time_) trainTime
 		FROM sys_music_compare_record smcr
-		WHERE smcr.user_id_=#{userId}
+		WHERE smcr.user_id_=#{userId}  and smcr.client_id_ = 'student'
 		  AND DATE_FORMAT(smcr.create_time_, '%Y-%m-%d') BETWEEN #{startTime} AND #{endTime}
 		GROUP BY DATE_FORMAT(smcr.create_time_, '%Y-%m-%d')
 		ORDER BY trainDate;
@@ -293,7 +293,7 @@
 	</select>
 
     <select id="getUserLastEvaluationData" resultMap="SysMusicCompareRecord">
-		SELECT * FROM sys_music_compare_record WHERE user_id_=#{userId} AND feature_ = 'CLOUD_STUDY_EVALUATION' ORDER BY create_time_ DESC LIMIT 1
+		SELECT * FROM sys_music_compare_record WHERE user_id_=#{userId} AND feature_ = 'CLOUD_STUDY_EVALUATION' and  client_id_ = 'student' ORDER BY create_time_ DESC LIMIT 1
 	</select>
 
 	<select id="getUserWeekMaxMusicScoreId" resultType="java.lang.Integer">

+ 6 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml

@@ -48,14 +48,18 @@
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
-            <include refid="baseColumns"/>
+            <include refid="baseColumns"/>,
+               o.user_id_ as userId
         FROM user_order_detail t
+        left join user_order o on t.order_no_ = o.order_no_
         where t.id_ = #{id}
     </select>
     <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
-            <include refid="baseColumns"/>
+            <include refid="baseColumns"/>,
+            o.user_id_ as userId
         FROM user_order_detail t
+        left join user_order o on t.order_no_ = o.order_no_
         where t.order_no_ = #{orderNo}
     </select>
 

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -80,4 +80,8 @@
         and msg_status_ in (0,1)
         order by end_time_ desc
     </select>
+    <select id="getMemberPriceByOrderDetilId"
+            resultType="com.yonge.cooleshow.biz.dal.entity.MemberPriceSettings">
+
+    </select>
 </mapper>

+ 2 - 2
cooleshow-user/user-classroom/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
 
         group: DEFAULT_GROUP
         prefix: classroom

+ 2 - 2
cooleshow-user/user-student/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: student
         file-extension: yaml

+ 2 - 2
cooleshow-user/user-teacher/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: teacher
         file-extension: yaml

+ 4 - 2
cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicSheetController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.dto.search.HotSearchSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicAlbumSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentMusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.HotSearchEnum;
 import com.yonge.cooleshow.biz.dal.enums.YesOrNoEnum;
 import com.yonge.cooleshow.biz.dal.service.HotSearchService;
 import com.yonge.cooleshow.biz.dal.service.MusicAlbumService;
@@ -110,12 +111,13 @@ public class OpenMusicSheetController extends BaseController {
     }
 
     @ApiOperation(value = "热门搜索")
-    @GetMapping(value="/hotTag")
-    public HttpResponseResult<List<HotSearchVo>> hotTag() {
+    @GetMapping(value="/hotTag/{type}")
+    public HttpResponseResult<List<HotSearchVo>> hotTag(@PathVariable String type) {
         HotSearchSearch query = new HotSearchSearch();
         query.setPage(1);
         query.setRows(10);
         query.setStatus(YesOrNoEnum.YES);
+        query.setType(HotSearchEnum.valueOf(type));
         IPage<HotSearchVo> pages = hotSearchService.selectPage(PageUtil.getPage(query), query);
 
         return succeed(pages.getRecords());

+ 2 - 2
cooleshow-user/user-website/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: website
         file-extension: yaml

+ 2 - 2
cooleshow-websocket/src/main/resources/bootstrap-prod.yml

@@ -2,8 +2,8 @@ spring:
   cloud:
     nacos:
       config:
-        server-addr: 47.114.1.200:8848
-        namespace: 6f8374a9-598f-4889-bb17-476070ffb8de
+        server-addr: 47.96.80.97:8848
+        namespace: dba505ee-020c-4c2b-bab2-e91d89cf248e
         group: DEFAULT_GROUP
         prefix: websocket
         file-extension: yaml

+ 13 - 0
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/Payment.java

@@ -3,6 +3,7 @@ package com.yonge.toolset.payment.base.model;
 import com.yonge.toolset.payment.base.enums.OpenEnum;
 import com.yonge.toolset.payment.base.enums.PayChannelEnum;
 import com.yonge.toolset.payment.base.enums.PaymentClientEnum;
+import com.yonge.toolset.payment.base.model.callback.ExecutePaymentCallBack;
 
 import java.util.List;
 import java.util.Map;
@@ -86,6 +87,10 @@ public class Payment extends Base {
      * @updateTime 2022/5/11 19:27
      */
     private String payInfo;
+    /**
+     * 支付方法回调对象
+     */
+    private ExecutePaymentCallBack executePaymentCallBack;
 
     public Payment(OpenEnum openType, PaymentClientEnum paymentClient, PayChannelEnum payChannel) {
         super(openType, paymentClient, payChannel);
@@ -186,4 +191,12 @@ public class Payment extends Base {
     public void setOrderDetils(List<OrderDetil> orderDetils) {
         this.orderDetils = orderDetils;
     }
+
+    public ExecutePaymentCallBack getExecutePaymentCallBack() {
+        return executePaymentCallBack;
+    }
+
+    public void setExecutePaymentCallBack(ExecutePaymentCallBack executePaymentCallBack) {
+        this.executePaymentCallBack = executePaymentCallBack;
+    }
 }