浏览代码

Merge remote-tracking branch 'origin/master'

zouxuan 3 年之前
父节点
当前提交
f63b470239
共有 26 个文件被更改,包括 449 次插入151 次删除
  1. 15 10
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java
  2. 76 45
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  3. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/MemberPriceSettingsDao.java
  4. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/VipCardRecordDao.java
  5. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/HotSearchSearch.java
  6. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/HotSearch.java
  7. 33 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/HotSearchEnum.java
  8. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/sdk/WithdrawSdk.java
  9. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderRefundService.java
  10. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardRecordService.java
  11. 17 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  12. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  13. 12 35
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MemberPriceSettingsServiceImpl.java
  14. 3 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/MusicAlbumServiceImpl.java
  15. 9 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SmsCodeServiceImpl.java
  16. 6 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  17. 105 24
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  18. 75 9
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java
  19. 3 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/HotSearchMapper.xml
  20. 9 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/MemberPriceSettingsMapper.xml
  21. 3 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMusicCompareRecordMapper.xml
  22. 6 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  23. 6 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml
  24. 4 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  25. 4 2
      cooleshow-user/user-website/src/main/java/com/yonge/cooleshow/website/controller/open/OpenMusicSheetController.java
  26. 13 0
      toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/Payment.java

+ 15 - 10
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -40,7 +40,6 @@ import com.yonge.cooleshow.auth.service.SysUserRoleService;
 import com.yonge.cooleshow.auth.service.SysUserService;
 import com.yonge.cooleshow.auth.web.controller.queryInfo.RoleQueryInfo;
 import com.yonge.cooleshow.common.constant.CommonConstants;
-import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.exception.BizException;
@@ -218,12 +217,26 @@ public class UserController extends BaseController {
             sysUser.setPassword(password);
             sysUser.setUpdateTime(new Date());
             sysUserService.update(sysUser);
+
+            loginOut(sysUser);
             return succeed();
         } else {
             return failed("验证码错误");
         }
     }
 
+    private void loginOut(SysUser sysUser) {
+        if(sysUser.getUserType().contains("STUDENT")){
+            tokenService.revokeToken("student", sysUser.getPhone());
+        }
+        if(sysUser.getUserType().contains("TEACHER")){
+            tokenService.revokeToken("teacher", sysUser.getPhone());
+        }
+        if(sysUser.getUserType().contains("SYSTEM")){
+            tokenService.revokeToken("system", sysUser.getPhone());
+        }
+    }
+
     @ApiOperation(value = "原密码修改密码")
     @PostMapping(value = "/updatePasswordByOldPassword")
     public Object updatePasswordByOldPassword(@RequestBody UpdatePasswordDto updatePasswordDto) {
@@ -317,15 +330,7 @@ public class UserController extends BaseController {
         sysUser.setLockFlag(lockFlag);
         
         if(lockFlag == 1){
-        	if(sysUser.getUserType().contains("STUDENT")){
-        		tokenService.revokeToken("student", sysUser.getPhone());
-        	}
-        	if(sysUser.getUserType().contains("TEACHER")){
-        		tokenService.revokeToken("teacher", sysUser.getPhone());
-        	}
-        	if(sysUser.getUserType().contains("SYSTEM")){
-        		tokenService.revokeToken("system", sysUser.getPhone());
-        	}
+            loginOut(sysUser);
         }
         sysUser.setUpdateTime(new Date());
         sysUserService.update(sysUser);

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

@@ -378,6 +378,24 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         }
         OmsOrder cancelOrder = cancelOrderList.get(0);
         if (cancelOrder != null && (cancelOrder.getStatus() == 0 || cancelOrder.getStatus() == 6)) {
+
+            // 查询订单是否为支付
+            UserOrderPayment orderPayment = userOrderPaymentService.getByOrderNoAndStatusPaying(cancelOrder.getOrderSn());
+
+            if (orderPayment != null) {
+                // 查询订单信息
+                BaseResult<Payment> res = getPaymentBaseResult(orderPayment);
+                //支付成功
+                if (res.getStatus() && TradeStatusEnum.succeeded.getCode().equals(res.getData().getStatus().getCode())
+                        && cancelOrder.getStatus() == 0) {
+                    orderSuccess(cancelOrder,null, res.getData());
+                    return;
+                }
+
+                //查询订单下支付中的付款单,取消支付
+                userOrderPaymentService.closePayment(orderPayment.getOrderNo(),  "用户发起了新的付款请求", null);
+            }
+
             //修改订单状态为取消
             cancelOrder.setStatus(4);
             orderMapper.updateByPrimaryKeySelective(cancelOrder);
@@ -539,17 +557,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 +647,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 +679,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         userOrderPayment.setCreateTime(new Date());
         userOrderPayment.setUpdateTime(new Date());
 
-        //查询订单下支付中的付款单,取消支付
-        userOrderPaymentService.closePayment(payment.getOrderNo(),  "用户发起了新的付款请求", null);
-
         userOrderPaymentService.save(userOrderPayment);
     }
 
@@ -695,19 +725,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 +747,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 +846,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 +868,6 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     }
 
 
-    void orderSuccess(OmsOrder detail, String tranId) {
-        orderSuccess(detail, null, tranId);
-    }
-
     /**
      * 订单完成
      *
@@ -854,7 +875,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 +883,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();

+ 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);

+ 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

+ 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);
 

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

@@ -285,7 +285,7 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     private void createRoomInfoCache(LiveRoom room, SysUser sysUser) {
         RoomInfoCache roomCache = new RoomInfoCache();
         roomCache.setSpeakerId(sysUser.getId());
-        roomCache.setSpeakerName(sysUser.getRealName());
+        roomCache.setSpeakerName(sysUser.getUsername());
         roomCache.setSpeakerPic(sysUser.getAvatar());
         roomCache.setSpeakerState(1);
         roomCache.setRoomUid(room.getRoomUid());

+ 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<>();

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

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

+ 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();

+ 75 - 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) {
@@ -39,13 +48,71 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
     @Override
     public VipCardRecordVo detail(Long orderDetilId, Long userId) {
         VipCardRecordVo detail = baseMapper.detail(orderDetilId, userId);
-        if(null == detail){
+        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
     public IPage<VipCardRecordVo> selectPage(IPage<VipCardRecordVo> page, VipCardRecordSearch query) {
         return page.setRecords(baseMapper.selectPage(page, query));
     }
@@ -92,7 +159,6 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     }
 
-
     // 发送会员到期3天消息推送
     private void temporary3DaysSend(Long userId, String phone) {
         Map<Long, String> receivers = new HashMap<>();

+ 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>
 

+ 6 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/VideoLessonGroupMapper.xml

@@ -113,6 +113,12 @@
 			<if	test="param.lessonSubject != null">
 				AND g.lesson_subject_ = #{param.lessonSubject}
 			</if>
+			<if test="null != param.search and '' != param.search">
+				AND (
+				g.lesson_name_ LIKE CONCAT('%', #{param.search}, '%') OR
+				s.username_ LIKE CONCAT('%', #{param.search}, '%')
+				)
+			</if>
 		</where>
 	</select>
 	<select id="selectStudentPage" resultType="com.yonge.cooleshow.biz.dal.vo.VideoLessonStudentDetailVo">

+ 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>

+ 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());

+ 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;
+    }
 }