Browse Source

Merge remote-tracking branch 'origin/master'

liweifan 3 years ago
parent
commit
5cc71df704

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

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

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

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

@@ -2132,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);
 

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

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