Browse Source

订单查询接口

weifanli 3 years ago
parent
commit
74140077f6

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

@@ -16,7 +16,7 @@ public class OrderSearch extends QueryInfo{
 	private static final long serialVersionUID = 1L;
 	@ApiModelProperty("交易流水号/订单号")
 	private String searchNo;
-	@ApiModelProperty("订单类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 (多选用,分割)")
+	@ApiModelProperty("交易类型:  VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 (多选用,分割)")
 	private String orderType;
 	@ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败 (多选用,分割)")
 	private String status;

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

@@ -36,6 +36,9 @@ public class UserOrderPayment implements Serializable {
     @ApiModelProperty("交易金额,必须大于0,保留两位小数点,如0.10、100.05等 ")
 	@TableField(value = "pay_amt_")
     private BigDecimal payAmt;
+    @ApiModelProperty("回调交易金额 ")
+    @TableField(value = "back_pay_amt_")
+    private BigDecimal backPayAmt;
     @ApiModelProperty("汇付收取的服务费 ")
     @TableField(value = "fee_amt_")
     private BigDecimal feeAmt;
@@ -181,4 +184,12 @@ public class UserOrderPayment implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
+
+    public BigDecimal getBackPayAmt() {
+        return backPayAmt;
+    }
+
+    public void setBackPayAmt(BigDecimal backPayAmt) {
+        this.backPayAmt = backPayAmt;
+    }
 }

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

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.dto.req.OrderReq;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentCourseSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.LiveCourseGroupStudentSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.entity.*;
 import com.yonge.cooleshow.biz.dal.enums.*;
 import com.yonge.cooleshow.biz.dal.service.*;
@@ -81,7 +82,8 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
     private ImGroupService imGroupService;
-
+    @Autowired
+    private UserOrderService orderService;
     @Override
     public CourseGroupDao getDao() {
         return this.baseMapper;
@@ -123,12 +125,23 @@ public class CourseGroupServiceImpl extends ServiceImpl<CourseGroupDao, CourseGr
         result.setStudentList(courseScheduleStudentPaymentService.queryStudentInfoByGroupId(groupId));
         //查询是否购买过该课程组
         Long id = getSysUser().getId();
-        List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
+
+        //这里修改为,订单完成后才算购买过,待支付和支付中订单不算
+        //因为页面再点击购买按钮时,会请求/userOrder/getPendingOrder接口,如果有支付中的订单,用户选择继续支付或取消订单
+        OrderSearch query = new OrderSearch();
+        query.setUserId(id);
+        query.setGoodType(GoodTypeEnum.LIVE.getCode());
+        query.setBizId(groupId);
+        query.setStatus(OrderStatusEnum.PAID.getCode());
+        List<UserOrderVo> userOrderVos = orderService.selectList(query);
+
+        /*List<CourseScheduleStudentPayment> paymentList = courseScheduleStudentPaymentService.list(Wrappers.<CourseScheduleStudentPayment>lambdaQuery()
                 .eq(CourseScheduleStudentPayment::getUserId, id)
                 .eq(CourseScheduleStudentPayment::getCourseGroupId, groupId)
-        );
+        );*/
+
         result.setExistBuy(0);
-        if (CollectionUtils.isNotEmpty(paymentList)) {
+        if (CollectionUtils.isNotEmpty(userOrderVos)) {
             result.setExistBuy(1);
         }
         return result;

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

@@ -171,6 +171,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (null == detail) {
             return HttpResponseResult.failed("未找到订单信息");
         }
+        if(!OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())
+            && !OrderStatusEnum.PAYING.equals(detail.getStatus())){
+            return HttpResponseResult.failed("订单已完成");
+        }
         if (!StringUtil.isEmpty(detail.getTransNo())) {
             try {
                 Map<String, Object> resMap = paymentSdk.queryPayment(detail.getTransNo());
@@ -179,14 +183,14 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                     orderSuccess(detail);
                     return HttpResponseResult.failed("订单已经交易完成");
                 }
-                //关闭订单
-                doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
             } catch (Exception e) {
                 e.printStackTrace();
                 log.error("轮询处理支付中订单异常,异常参数: {}", JSONObject.toJSONString(payReq));
                 return HttpResponseResult.failed("取消订单失败");
             }
         }
+        //关闭订单
+        doOrderCancel(detail, OrderStatusEnum.CLOSE, StringUtil.isEmpty(payReq.getReason()) ? "用户取消订单" : payReq.getReason());
         return HttpResponseResult.succeed(true);
 
     }
@@ -346,9 +350,8 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
             return;
         }
-        if (!detail.getStatus().equals(OrderStatusEnum.PAID)
-                && !detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                && !detail.getStatus().equals(OrderStatusEnum.CLOSE)) {
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
+                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
             orderSuccess(detail, hfRes);
         } else {
             log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
@@ -362,27 +365,14 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      * @updateTime 2022/4/27 15:09
      */
     private void paymentFailedHandle(JSONObject hfRes) {
-        //订单完成
         UserOrderVo detail = detail(hfRes.getString("order_no"));
-
         if (null == detail) {
             log.error("汇付支付回调,订单未找到。 req is {}", hfRes.toJSONString());
             return;
         }
-        if (!detail.getStatus().equals(OrderStatusEnum.PAID)
-                && !detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
-                && !detail.getStatus().equals(OrderStatusEnum.CLOSE)) {
-
-            doOrderCancel(detail, OrderStatusEnum.FAIL, "支付失败");
-            //查询
-            UserOrderPayment orderPayment = orderPaymentService.detailByOrderNo(hfRes.getString("order_no"));
-            if (null == orderPayment) {
-                return;
-            }
-            orderPayment.setPayFailMsg("支付回调失败");
-            orderPayment.setStatus(TradeStatusEnum.failed);
-            orderPayment.setUpdateTime(new Date());
-            orderPaymentService.updateById(orderPayment);
+        if (detail.getStatus().equals(OrderStatusEnum.WAIT_PAY)
+                || detail.getStatus().equals(OrderStatusEnum.PAYING)) {
+            doOrderCancel(detail, OrderStatusEnum.FAIL, "支付回调失败");
         } else {
             log.error("汇付支付回调,订单状态异常。 req is {}", hfRes.toJSONString());
         }
@@ -454,6 +444,10 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         if (null == detail) {
             return;
         }
+        if(!OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())
+                && !OrderStatusEnum.PAYING.equals(detail.getStatus())){
+            return;
+        }
         if (!StringUtil.isEmpty(detail.getTransNo())) {
             try {
                 Map<String, Object> resMap = paymentSdk.queryPayment(detail.getTransNo());
@@ -464,13 +458,13 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                     orderSuccess(detail);
                     return;
                 }
-                //关闭订单
-                doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
             } catch (Exception e) {
                 e.printStackTrace();
                 return;
             }
         }
+        //关闭订单
+        doOrderCancel(detail, OrderStatusEnum.CLOSE, "订单超时");
     }
 
     /***
@@ -754,7 +748,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      */
     @Transactional(rollbackFor = Exception.class)
     void doOrderCancel(UserOrderVo userOrder, OrderStatusEnum orderStatus, String reason) {
-        //已经取消过的订单,不能再取消
+        //已经完成过的订单,不能再取消
         if (!OrderStatusEnum.WAIT_PAY.equals(userOrder.getStatus())
                 && !OrderStatusEnum.PAYING.equals(userOrder.getStatus())) {
             return;
@@ -814,6 +808,11 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
      */
     @Transactional(rollbackFor = Exception.class)
     void orderSuccess(UserOrderVo detail, JSONObject hfRes) {
+        //订单已完成
+        if (!OrderStatusEnum.WAIT_PAY.equals(detail.getStatus())
+                && !OrderStatusEnum.PAYING.equals(detail.getStatus())) {
+            return;
+        }
         Date now = new Date();
         detail.setStatus(OrderStatusEnum.PAID);
         detail.setPayTime(now);
@@ -827,7 +826,7 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
             orderPayment.setUpdateTime(now);
             if (null != hfRes) {
                 try {
-                    orderPayment.setPayAmt(new BigDecimal(hfRes.getString("pay_amt")));
+                    orderPayment.setBackPayAmt(new BigDecimal(hfRes.getString("pay_amt")));
                     orderPayment.setFeeAmt(new BigDecimal(hfRes.getString("fee_amt")));
                 } catch (Exception e) {
                     e.printStackTrace();

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

@@ -1,10 +1,12 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDao;
 import com.yonge.cooleshow.biz.dal.dao.VideoLessonPurchaseRecordDao;
+import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonGroupSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.VideoLessonSearch;
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonGroup;
@@ -13,6 +15,9 @@ import com.yonge.cooleshow.biz.dal.dao.VideoLessonGroupDetailDao;
 
 import com.yonge.cooleshow.biz.dal.entity.VideoLessonPurchaseRecord;
 import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.service.VideoLessonGroupDetailService;
 import com.yonge.cooleshow.biz.dal.vo.*;
 import com.yonge.cooleshow.common.exception.BizException;
@@ -24,10 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * VideoLessonGroupDetailService服务实现类
@@ -46,6 +48,8 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
     private VideoLessonGroupDao videoLessonGroupDao;
     @Autowired
     private VideoLessonPurchaseRecordDao videoLessonPurchaseRecordDao;
+    @Autowired
+    private UserOrderService orderService;
 
     public VideoLessonGroupDetailDao getDao() {
         return videoLessonGroupDetailDao;
@@ -142,10 +146,20 @@ public class VideoLessonGroupDetailServiceImpl extends ServiceImpl<VideoLessonGr
         VideoLessonStudentVo lessonStudentVo = new VideoLessonStudentVo();
 
         //校验课程是否购买
-        VideoLessonPurchaseRecord isAlreadyBuy= videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
+
+        //这里修改为,订单完成后才算购买过,待支付和支付中订单不算
+        //因为页面再点击购买按钮时,会请求/userOrder/getPendingOrder接口,如果有支付中的订单,用户选择继续支付或取消订单
+        OrderSearch param = new OrderSearch();
+        param.setUserId(userId);
+        param.setGoodType(GoodTypeEnum.VIDEO.getCode());
+        param.setBizId(groupId);
+        param.setStatus(OrderStatusEnum.PAID.getCode());
+        List<UserOrderVo> userOrderVos = orderService.selectList(param);
+
+        /*VideoLessonPurchaseRecord isAlreadyBuy= videoLessonPurchaseRecordDao.selectOne(Wrappers.<VideoLessonPurchaseRecord>lambdaQuery()
                 .eq(VideoLessonPurchaseRecord::getStudentId, userId)
-                .eq(VideoLessonPurchaseRecord::getVideoLessonGroupId, groupId));
-        lessonStudentVo.setAlreadyBuy(!ObjectUtil.isEmpty(isAlreadyBuy));
+                .eq(VideoLessonPurchaseRecord::getVideoLessonGroupId, groupId));*/
+        lessonStudentVo.setAlreadyBuy(!CollectionUtils.isEmpty(userOrderVos));
 
         VideoLessonGroupSearch query = new VideoLessonGroupSearch();
         //筛选已审核的视频课

+ 37 - 23
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -44,11 +44,11 @@
 
     <select id="detailById" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.fee_amt_ as feeAmt,
-        u.username_ as username,
-        u.phone_ as phone
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         left join sys_user u on t.user_id_ = u.id_
@@ -57,9 +57,9 @@
 
     <select id="detailApp" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.pay_channel_ as payChannel
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.pay_channel_ as payChannel
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         where t.user_id_ = #{param.userId}
@@ -73,11 +73,11 @@
 
     <select id="detailByOrderNo" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.fee_amt_ as feeAmt,
-        u.username_ as username,
-        u.phone_ as phone
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         left join sys_user u on t.user_id_ = u.id_
@@ -87,11 +87,11 @@
 
     <sql id="selectSql">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.fee_amt_ as feeAmt,
-        u.username_ as username,
-        u.phone_ as phone
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.fee_amt_ as feeAmt,
+            u.username_ as username,
+            u.phone_ as phone
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         left join sys_user u on t.user_id_ = u.id_
@@ -105,8 +105,8 @@
             </if>
             <if test="null != param.searchNo and '' != param.searchNo">
                 AND (
-                t.order_no_ LIKE CONCAT('%', #{param.search}, '%') or
-                p.trans_no_ LIKE CONCAT('%', #{param.search}, '%')
+                t.order_no_ LIKE CONCAT('%', #{param.searchNo}, '%') or
+                p.trans_no_ LIKE CONCAT('%', #{param.searchNo}, '%')
                 )
             </if>
             <if test="null != param.orderType and '' != param.orderType">
@@ -124,6 +124,20 @@
             <if test="param.userId !=null">
                 AND t.user_id_ = #{param.userId}
             </if>
+            <if test="param.merchId !=null or (param.goodType !=null and param.goodType !='') or param.bizId !=null">
+                AND exists(
+                    select 1 from user_order_detail d where t.order_no_ = d.order_no_
+                    <if test="param.merchId !=null ">
+                        and d.merch_id_ = #{param.merchId}
+                    </if>
+                    <if test="param.goodType !=null and param.goodType !=''">
+                        and d.good_type_ = #{param.goodType}
+                    </if>
+                    <if test="param.bizId !=null">
+                        and d.biz_id_ = #{param.bizId}
+                    </if>
+                )
+            </if>
         </where>
         order by t.create_time_ desc
     </sql>
@@ -146,9 +160,9 @@
     </select>
     <select id="getPendingOrder" resultType="com.yonge.cooleshow.biz.dal.vo.UserOrderVo">
         SELECT
-        <include refid="baseColumns"/>,
-        p.trans_no_ as transNo,
-        p.pay_channel_ as payChannel
+            <include refid="baseColumns"/>,
+            p.trans_no_ as transNo,
+            p.pay_channel_ as payChannel
         FROM user_order t
         left join user_order_payment p on t.order_no_ = p.order_no_
         where t.status_ in ('WAIT_PAY','PAYING')

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

@@ -7,6 +7,7 @@
         <result column="trans_no_" property="transNo" />
         <result column="pay_channel_" property="payChannel" />
         <result column="pay_amt_" property="payAmt" />
+        <result column="back_pay_amt_" property="backPayAmt" />
         <result column="fee_amt_" property="feeAmt" />
         <result column="pay_info_" property="payInfo" />
         <result column="status_" property="status" />
@@ -25,6 +26,7 @@
         , t.trans_no_ as transNo
         , t.pay_channel_ as payChannel
         , t.pay_amt_ as payAmt
+        , t.back_pay_amt_ as backPayAmt
         , t.fee_amt_ as feeAmt
         , t.pay_info_ as payInfo
         , t.status_ as status