Browse Source

会员卡购买

weifanli 2 years ago
parent
commit
f0dd293248
18 changed files with 336 additions and 35 deletions
  1. 8 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/StudentFeignService.java
  2. 5 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/fallback/StudentFeignServiceFallback.java
  3. 22 0
      cooleshow-task/src/main/java/com/yonge/cooleshow/task/jobs/PollingOrderTask.java
  4. 7 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java
  5. 8 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java
  6. 11 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java
  7. 6 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderDetailService.java
  8. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderPaymentService.java
  9. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java
  10. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/VipCardService.java
  11. 8 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderDetailServiceImpl.java
  12. 6 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderPaymentServiceImpl.java
  13. 161 8
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java
  14. 48 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardServiceImpl.java
  15. 9 3
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderDetailMapper.xml
  16. 5 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml
  17. 2 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml
  18. 15 1
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

+ 8 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/StudentFeignService.java

@@ -16,4 +16,12 @@ public interface StudentFeignService {
      */
     @GetMapping(value = "/task/queryStudentTotal")
     Object queryStudentTotal();
+    /***
+     * 轮询用户订单
+     * @author liweifan
+     * @updateTime 2022/3/28 15:34
+     * @return: java.lang.Object
+     */
+    @GetMapping(value = "/task/pollingOrder")
+    Object pollingOrder();
 }

+ 5 - 0
cooleshow-task/src/main/java/com/yonge/cooleshow/task/feign/fallback/StudentFeignServiceFallback.java

@@ -10,4 +10,9 @@ public class StudentFeignServiceFallback implements StudentFeignService {
     public Object queryStudentTotal() {
         return null;
     }
+
+    @Override
+    public Object pollingOrder() {
+        return null;
+    }
 }

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

@@ -0,0 +1,22 @@
+package com.yonge.cooleshow.task.jobs;
+
+import com.yonge.cooleshow.task.core.BaseTask;
+import com.yonge.cooleshow.task.core.TaskException;
+import com.yonge.cooleshow.task.feign.StudentFeignService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 订单轮询
+ * @Author: liweifan
+ * @Data: 2022/4/13 17:36
+ */
+public class PollingOrderTask extends BaseTask {
+
+    @Autowired
+    private StudentFeignService studentFeignService;
+
+    @Override
+    public void execute() throws TaskException {
+        Object o = studentFeignService.pollingOrder();
+    }
+}

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

@@ -32,5 +32,11 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderVo
 	 */
 	List<UserOrderVo> selectPage(@Param("page") IPage page, @Param("param") OrderSearch order);
-	
+	/***
+	 * 查询创建时间超过半小时还在交易中的订单
+	 * @author liweifan
+	 * @updateTime 2022/4/13 16:38
+	 * @return: java.util.List<com.yonge.cooleshow.biz.dal.entity.UserOrder>
+	 */
+	List<UserOrderVo> selectPendingList();
 }

+ 8 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDetailDao.java

@@ -18,7 +18,13 @@ public interface UserOrderDetailDao extends BaseMapper<UserOrderDetail>{
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
 	 */
 	UserOrderDetailVo detail(@Param("id") Long id);
-
+	/**
+	 * 查询详情
+	 * @author liweifan
+	 * @date 2022-03-30 13:53:51
+	 * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
+	 */
+	UserOrderDetailVo detailByOrderNo(@Param("orderNo") String orderNo);
 	/**
 	 * 分页查询
      * @author liweifan
@@ -26,5 +32,5 @@ public interface UserOrderDetailDao extends BaseMapper<UserOrderDetail>{
      * @return: com.yonge.cooleshow.biz.dal.vo.OrderDetailVo
 	 */
 	List<UserOrderDetailVo> selectPage(@Param("page") IPage page, @Param("param") OrderDetailSearch orderDetail);
-	
+
 }

+ 11 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/VipCardRecord.java

@@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 @ApiModel(value = "VipCardRecord对象", description = "购买会员卡记录表")
 public class VipCardRecord implements Serializable {
 	private static final long serialVersionUID = 1L;
-    @ApiModelProperty("会员id ")
+    @ApiModelProperty("会员记录id ")
     @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
     @ApiModelProperty("用户id ")
@@ -28,9 +28,9 @@ public class VipCardRecord implements Serializable {
     @ApiModelProperty("订单id ")
 	@TableField(value = "order_id_")
     private Long orderId;
-    @ApiModelProperty("时长类型:1、月卡 2、季卡 3、年卡 ")
-	@TableField(value = "time_type_")
-    private Integer timeType;
+    @ApiModelProperty("会员卡id ")
+	@TableField(value = "vip_card_id_")
+    private Long vipCardId;
     @ApiModelProperty("会员卡开始时间 ")
 	@TableField(value = "start_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -75,16 +75,16 @@ public class VipCardRecord implements Serializable {
     public void setOrderId(Long orderId) {
         this.orderId = orderId;
     }
-    
-	public Integer getTimeType() {
-        return timeType;
+
+    public Long getVipCardId() {
+        return vipCardId;
     }
 
-    public void setTimeType(Integer timeType) {
-        this.timeType = timeType;
+    public void setVipCardId(Long vipCardId) {
+        this.vipCardId = vipCardId;
     }
-    
-	public Date getStartTime() {
+
+    public Date getStartTime() {
         return startTime;
     }
 

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

@@ -19,7 +19,12 @@ public interface UserOrderDetailService extends IService<UserOrderDetail>  {
  	 * @date 2022-03-30
      */
 	UserOrderDetailVo detail(Long id);
-
+	/**
+	 * 查询详情
+	 * @author liweifan
+	 * @date 2022-03-30
+	 */
+	UserOrderDetailVo detail(String orderNo);
     /**
      * 分页查询
      * @author liweifan

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

@@ -10,5 +10,13 @@ import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
  * @date 2022-04-01
  */
 public interface UserOrderPaymentService extends IService<UserOrderPayment> {
+    /***
+     * 通过订单号查询付款单
+     * @author liweifan
+     * @param: orderNo
+     * @updateTime 2022/4/13 16:09
+     * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
+     */
+    UserOrderPayment detailByOrderNo(String orderNo);
 
 }

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

@@ -58,4 +58,10 @@ public interface UserOrderService extends IService<UserOrder>  {
 	 * @updateTime 2022/4/8 18:24
 	 */
 	void orderCallback(String data);
+	/***
+	 * 轮询用户订单
+	 * @author liweifan
+	 * @updateTime 2022/4/13 16:27
+	 */
+    void pollingOrder();
 }

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

@@ -44,5 +44,5 @@ public interface VipCardService extends IService<VipCard>  {
 	 * @param: orderVo
 	 * @updateTime 2022/3/31 17:24
 	 */
-	void orderAfter(UserOrderVo orderVo);
+	void orderSuccess(UserOrderVo orderVo);
 }

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

@@ -18,8 +18,14 @@ public class UserOrderDetailServiceImpl extends ServiceImpl<UserOrderDetailDao,
         UserOrderDetailVo detail = baseMapper.detail(id);
         return detail;
     }
-    
-     @Override
+
+    @Override
+    public UserOrderDetailVo detail(String orderNo) {
+        UserOrderDetailVo detail = baseMapper.detailByOrderNo(orderNo);
+        return detail;
+    }
+
+    @Override
     public IPage<UserOrderDetailVo> selectPage(IPage<UserOrderDetailVo> page, OrderDetailSearch query){
         return page.setRecords(baseMapper.selectPage(page, query));
     }

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
@@ -10,4 +11,9 @@ import com.yonge.cooleshow.biz.dal.service.UserOrderPaymentService;
 @Service
 public class UserOrderPaymentServiceImpl extends ServiceImpl<UserOrderPaymentDao, UserOrderPayment> implements UserOrderPaymentService {
 
+    @Override
+    public UserOrderPayment detailByOrderNo(String orderNo) {
+        return baseMapper.selectOne(Wrappers.<UserOrderPayment>lambdaQuery()
+                .eq(UserOrderPayment::getOrderNo,orderNo));
+    }
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.config.HuifuConfiguration;
+import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
@@ -61,24 +62,45 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
     private static final Map<OrderTypeEnum, Function<OrderReq, HttpResponseResult<OrderCreateRes>>> orderCreate = new HashMap<>();
     //插入订单后执行
     private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderAfter = new HashMap<>();
+    //订单完成后执行
+    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderSuccess = new HashMap<>();
+    //订单取消后执行
+    private static final Map<OrderTypeEnum, Consumer<UserOrderVo>> orderCancel = new HashMap<>();
 
     @PostConstruct
     private void init() {
+        /**********订单生成前******************/
         //vip开通缴费
         orderCreate.put(OrderTypeEnum.VIP, vipCardService::orderCreate);
 
+        /**********订单生成后******************/
+        //orderAfter.put(OrderTypeEnum.VIP, vipCardService::orderAfter);
+
+        /**********订单完成后******************/
         //vip开通缴费
-        orderAfter.put(OrderTypeEnum.VIP, vipCardService::orderAfter);
+        orderSuccess.put(OrderTypeEnum.VIP, vipCardService::orderSuccess);
+
+
+        /**********订单取消后******************/
+        //orderCancel.put();
     }
 
     @Override
     public UserOrderVo detail(Long id) {
-        return baseMapper.detailById(id);
+        UserOrderVo userOrderVo = baseMapper.detailById(id);
+        if(null != userOrderVo){
+            userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
+        }
+        return userOrderVo;
     }
 
     @Override
     public UserOrderVo detail(String orderNo) {
-        return baseMapper.detailByOrderNo(orderNo);
+        UserOrderVo userOrderVo = baseMapper.detailByOrderNo(orderNo);
+        if(null != userOrderVo){
+            userOrderVo.setOrderDetail(orderDetailService.detail(userOrderVo.getOrderNo()));
+        }
+        return userOrderVo;
     }
 
     @Override
@@ -138,7 +160,75 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
 
     @Override
     public void orderCallback(String data) {
+        JSONObject jsonObject = JSONObject.parseObject(data);
+        if (PayStatusEnum.succeeded.getCode().equals(jsonObject.getString("status"))) {
+            //订单完成
+            UserOrderVo detail = detail(jsonObject.getString("order_no"));
+            if (null == detail) {
+                log.error("汇付支付回调,订单未找到。 req is {}", data);
+                return;
+            }
+            if (detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+                orderSuccess(detail);
+            } else {
+                log.error("汇付支付回调,订单状态异常。 req is {}", data);
+            }
+        }
+    }
 
+
+    @Override
+    public void pollingOrder() {
+        //查询创建时间超过半小时还在交易中的订单
+        List<UserOrderVo> orderList = baseMapper.selectPendingList();
+        for (UserOrderVo userOrder : orderList) {
+            //待支付订单直接取消
+            if (OrderStatusEnum.WAIT_PAY.equals(userOrder.getStatus())) {
+                waitPayOrderHandle(userOrder);
+            }
+            if (OrderStatusEnum.PAYING.equals(userOrder.getStatus())) {
+                payingOrderHandle(userOrder);
+            }
+        }
+    }
+
+    /***
+     * 处理待支付订单
+     * @author liweifan
+     * @param: userOrder
+     * @updateTime 2022/4/13 16:51
+     */
+    private void waitPayOrderHandle(UserOrderVo userOrder) {
+        orderCancel(userOrder);
+    }
+
+    /***
+     * 处理支付中订单
+     * @author liweifan
+     * @param: userOrder
+     * @updateTime 2022/4/13 16:51
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void payingOrderHandle(UserOrderVo userOrder) {
+        //判断汇付订单状态
+        UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(userOrder.getOrderNo());
+        if (null == orderPayment) {
+            return;
+        }
+        try {
+            Map<String, Object> resMap = paymentSdk.queryPayment(orderPayment.getTransNo());
+            //支付失败
+            if (PayStatusEnum.failed.getCode().equals(resMap.get("status").toString())) {
+                orderCancel(userOrder);
+            }
+            //支付成功
+            if (PayStatusEnum.succeeded.getCode().equals(resMap.get("status").toString())) {
+                orderSuccess(userOrder);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("轮询处理支付中订单异常,异常参数: {}", JSONObject.toJSONString(userOrder));
+        }
     }
 
     /***
@@ -146,8 +236,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @author liweifan
      * @param: payReq
      * @param: detail
-     * @updateTime 2022/4/1 10:32
-     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
+     * @updateTime 2022/4/13 16:59
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes>
      */
     private HttpResponseResult<OrderPayRes> orderPayWaitPay(OrderPayReq payReq, UserOrderVo detail) {
         PaymentReq paymentReq = new PaymentReq();
@@ -177,10 +267,17 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         String pay_info = ((JSONObject) res.get("expend")).getString("pay_info");
         orderPayRes.setPay_info(pay_info);
         //入订单付款表,同时修改订单状态
-        UserOrderPayment orderPayment = insertOrderPayment(res, payReq);
+        insertOrderPayment(res, payReq);
         return HttpResponseResult.succeed(orderPayRes);
     }
-
+    /***
+     * 插入订单付款单
+     * @author liweifan
+     * @param: res
+     * @param: payReq
+     * @updateTime 2022/4/13 17:56
+     * @return: com.yonge.cooleshow.biz.dal.entity.UserOrderPayment
+     */
     private UserOrderPayment insertOrderPayment(Map<String, Object> res, OrderPayReq payReq) {
         UserOrderPayment orderPayment = new UserOrderPayment();
         orderPayment.setOrderNo(payReq.getOrderNo());
@@ -207,7 +304,15 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.lang.Boolean>
      */
     private HttpResponseResult<OrderPayRes> orderPayPaying(OrderPayReq payReq, UserOrderVo detail) {
-        return null;
+        UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(payReq.getOrderNo());
+        if (PayStatusEnum.pending.equals(orderPayment.getStatus())) {
+            OrderPayRes orderPayRes = new OrderPayRes();
+            orderPayRes.setPay_info(orderPayment.getPayInfo());
+            orderPayRes.setPay_amt(orderPayment.getPayAmt().toString());
+            return HttpResponseResult.succeed(orderPayRes);
+        } else {
+            return HttpResponseResult.failed("未找到订单信息");
+        }
     }
 
     /***
@@ -291,4 +396,52 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         }
         return true;
     }
+
+    /***
+     * 取消订单
+     * @author liweifan
+     * @param: userOrder
+     * @updateTime 2022/4/13 17:23
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void orderCancel(UserOrderVo userOrder) {
+        userOrder.setStatus(OrderStatusEnum.CLOSE);
+        baseMapper.updateById(userOrder);
+
+        UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(userOrder.getOrderNo());
+        if (null != orderPayment) {
+            //更新付款单
+            orderPayment.setStatus(PayStatusEnum.failed);
+            orderPaymentService.updateById(orderPayment);
+        }
+        //调用业务
+        Consumer<UserOrderVo> userOrderVoConsumer = orderCancel.get(userOrder.getOrderType());
+        if (!Objects.isNull(userOrderVoConsumer)) {
+            userOrderVoConsumer.accept(userOrder);
+        }
+    }
+
+    /**
+     * 订单完成
+     *
+     * @author liweifan
+     * @param: detail
+     * @updateTime 2022/4/13 17:17
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void orderSuccess(UserOrderVo detail) {
+        detail.setStatus(OrderStatusEnum.PAID);
+        detail.setPayTime(new Date());
+        updateById(detail);
+        //更新付款单
+        UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(detail.getOrderNo());
+        orderPayment.setStatus(PayStatusEnum.succeeded);
+        orderPayment.setArrivalTime(new Date());
+        orderPaymentService.updateById(orderPayment);
+        //调用业务
+        Consumer<UserOrderVo> userOrderVoConsumer = orderSuccess.get(detail.getOrderType());
+        if (!Objects.isNull(userOrderVoConsumer)) {
+            userOrderVoConsumer.accept(detail);
+        }
+    }
 }

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

@@ -1,13 +1,20 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
+import com.yonge.cooleshow.biz.dal.entity.VipCardRecord;
+import com.yonge.cooleshow.biz.dal.enums.VipTimeTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
+import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.ApiModelProperty;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -17,6 +24,8 @@ import com.yonge.cooleshow.biz.dal.dao.VipCardDao;
 import com.yonge.cooleshow.biz.dal.service.VipCardService;
 
 import java.math.BigDecimal;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 
@@ -25,6 +34,8 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
     private final static Logger log = LoggerFactory.getLogger(VipCardServiceImpl.class);
     @Autowired
     private VipCardRecordService vipCardRecordService;
+    @Autowired
+    private StudentService studentService;
 
     @Override
     public VipCardVo detail(Long id) {
@@ -43,14 +54,14 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
     @Override
     public HttpResponseResult<OrderCreateRes> orderCreate(OrderReq orderReq) {
         VipCardVo detail = detail(Long.parseLong(orderReq.getBizContent()));
-        if(null == detail){
+        if (null == detail) {
             return HttpResponseResult.failed("未找到会员卡信息");
         }
         //插入会员卡信息到会员卡记录表
         OrderCreateRes orderCreateRes = new OrderCreateRes();
         orderCreateRes.setRes(true);
         orderCreateRes.setBizId(detail.getId());
-        orderCreateRes.setBizContent("会员卡购买-"+detail.getTimeTypeName());
+        orderCreateRes.setBizContent("会员卡购买-" + detail.getTimeTypeName());
 
         orderCreateRes.setOriginalPrice(detail.getOriginalPrice());
         orderCreateRes.setExpectPrice(detail.getActualPrice());
@@ -61,8 +72,42 @@ public class VipCardServiceImpl extends ServiceImpl<VipCardDao, VipCard> impleme
 
 
     @Override
-    public void orderAfter(UserOrderVo orderVo) {
+    public void orderSuccess(UserOrderVo orderVo) {
+        VipCardVo detail = detail(orderVo.getOrderDetail().getBizId());
+        if (null == detail) {
+            return;
+        }
+        StudentVo studentVo = studentService.detail(orderVo.getUserId());
+        //修改用户会员时长
+        Date membershipEndTime = studentVo.getMembershipEndTime();
+        Calendar now = Calendar.getInstance();
+
+        VipCardRecord vipCardRecord = new VipCardRecord();
+        vipCardRecord.setUserId(orderVo.getUserId());
+        vipCardRecord.setOrderId(orderVo.getId());
+        vipCardRecord.setVipCardId(detail.getId());
 
+
+        if (null == membershipEndTime || membershipEndTime.before(new Date())) {
+            //没有会员、会员已过期
+            studentVo.setMembershipStartTime(now.getTime());
+        } else {
+            now.setTime(studentVo.getMembershipEndTime());
+        }
+        vipCardRecord.setStartTime(now.getTime());
+        if (VipTimeTypeEnum.MONTH.equals(detail.getTimeType())) {
+            now.add(Calendar.MONTH, 1);
+        } else if (VipTimeTypeEnum.QUARTER.equals(detail.getTimeType())) {
+            now.add(Calendar.MONTH, 3);
+        } else if (VipTimeTypeEnum.YEAR.equals(detail.getTimeType())) {
+            now.add(Calendar.YEAR, 1);
+        }
+        vipCardRecord.setEndTime(now.getTime());
+        studentVo.setMembershipEndTime(now.getTime());
+        studentVo.setMemberRankSettingId(1l);
+        studentService.updateById(studentVo);
+        //会员购买记录入库
+        vipCardRecordService.save(vipCardRecord);
     }
 
 

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

@@ -23,13 +23,19 @@
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
         SELECT
             <include refid="baseColumns"/>
-        FROM order_detail t
+        FROM user_order_detail t
         where t.id_ = #{id}
     </select>
-    
+    <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo">
+        SELECT
+            <include refid="baseColumns"/>
+        FROM user_order_detail t
+        where t.order_no_ = #{orderNo}
+    </select>
+
     <select id="selectPage" resultMap="BaseResultMap">
 		SELECT         
         	<include refid="baseColumns" />
-		FROM order_detail t
+		FROM user_order_detail t
 	</select>
 </mapper>

+ 5 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -67,4 +67,9 @@
         	<include refid="baseColumns" />
 		FROM user_order t
 	</select>
+    <select id="selectPendingList" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
+        SELECT * FROM user_order t
+        where (t.status_ = 'WAIT_PAY' or t.status_ = 'PAYING')
+        and t.create_time_ &lt;= date_sub(now(),interval 30 minute)
+    </select>
 </mapper>

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

@@ -5,7 +5,7 @@
             <result column="id_" property="id" />
 	        <result column="user_id_" property="userId" />
 	        <result column="order_id_" property="orderId" />
-	        <result column="time_type_" property="timeType" />
+	        <result column="vip_card_id_" property="vipCardId" />
 	        <result column="start_time_" property="startTime" />
 	        <result column="create_time_" property="createTime" />
 	        <result column="update_time_" property="updateTime" />
@@ -17,7 +17,7 @@
          t.id_ as id
         , t.user_id_ as userId
         , t.order_id_ as orderId
-        , t.time_type_ as timeType
+        , t.vip_card_id_ as vipCardId
         , t.start_time_ as startTime
         , t.create_time_ as createTime
         , t.update_time_ as updateTime

+ 15 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/task/TaskController.java

@@ -4,6 +4,7 @@ import com.yonge.cooleshow.biz.dal.entity.StudentTotal;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 import com.yonge.cooleshow.biz.dal.service.StudentTotalService;
 import com.yonge.cooleshow.biz.dal.service.TeacherService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.vo.StudentTotalVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherTotalVo;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -24,7 +25,8 @@ import java.util.List;
 public class TaskController extends BaseController {
     @Autowired
     private StudentTotalService studentTotalService;
-
+    @Autowired
+    private UserOrderService userOrderService;
     /***
      * 查询所有学生统计数据
      * @author liweifan
@@ -35,4 +37,16 @@ public class TaskController extends BaseController {
     public HttpResponseResult<List<StudentTotal>> queryStudentTotal() {
         return succeed(studentTotalService.queryStudentTotal());
     }
+
+    /***
+     * 轮询用户订单
+     * @author liweifan
+     * @updateTime 2022/3/29 11:58
+     * @return: com.yonge.cooleshow.common.entity.HttpResponseResult<java.util.List<com.yonge.cooleshow.biz.dal.vo.StudentTotalVo>>
+     */
+    @GetMapping("/pollingOrder")
+    public HttpResponseResult pollingOrder() {
+        userOrderService.pollingOrder();
+        return succeed();
+    }
 }