From 0c877ca6f32edb146d15c4593a90b613a650eaed Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 19 七月 2023 11:08:25 +0800
Subject: [PATCH] 更新预约场地部分接口

---
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java |  230 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 205 insertions(+), 25 deletions(-)

diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
index 6a309f0..403a241 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -179,12 +179,6 @@
         Site site = this.getById(reservationSite.getId());
         AppUser appUser = appUserClient.queryAppUser(uid);
         String[] split = reservationSite.getTimes().split(";");
-        if(reservationSite.getPayType() == 3){
-            Integer playPaiCoin = site.getPlayPaiCoin() * split.length;
-            if(appUser.getPlayPaiCoins().compareTo(playPaiCoin) < 0){
-                return ResultUtil.error("玩湃币不足");
-            }
-        }
 
         for (String s : split) {
             String day = s.split(" ")[0];
@@ -197,7 +191,6 @@
             }
         }
 
-
         String s_time = split[0];
         String e_time = split[split.length - 1];
         s_time = s_time.substring(s_time.lastIndexOf("-"));
@@ -208,6 +201,9 @@
         Double payMoney = 0D;
         if(reservationSite.getPayType() == 3){
             payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            if(appUser.getPlayPaiCoins().compareTo(payMoney.intValue()) < 0){
+                return ResultUtil.error("玩湃币不足");
+            }
         }else{
             payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
         }
@@ -256,6 +252,7 @@
         siteBooking.setStoreId(site.getStoreId());
         siteBooking.setSiteId(reservationSite.getId());
         siteBooking.setAppUserId(uid);
+        siteBooking.setTimes(reservationSite.getTimes());
         siteBooking.setStartTime(sdf1.parse(s_time));
         siteBooking.setEndTime(sdf1.parse(e_time));
         siteBooking.setBooker(reservationSite.getBooker());
@@ -269,7 +266,7 @@
         siteBookingService.save(siteBooking);
 
         if(reservationSite.getPayType() == 1){//微信支付
-            return weChatPaymentSite(uid, payMoney, siteBooking);
+            return weChatPaymentSite(payMoney, siteBooking);
         }
         if(reservationSite.getPayType() == 2){//支付宝支付
             return aliPaymentSite(payMoney, siteBooking);
@@ -283,12 +280,11 @@
 
     /**
      * 课程微信支付
-     * @param uid
      * @param paymentPrice
      * @return
      * @throws Exception
      */
-    public ResultUtil weChatPaymentSite(Integer uid, Double paymentPrice, SiteBooking siteBooking) throws Exception{
+    public ResultUtil weChatPaymentSite(Double paymentPrice, SiteBooking siteBooking) throws Exception{
         String code = siteBooking.getOrderNo();
         Integer id = siteBooking.getId();
         ResultUtil weixinpay = payMoneyUtil.weixinpay("预约场地", "", code, paymentPrice.toString(), "/base/site/weChatPaymentSiteCallback", "APP", "");
@@ -322,13 +318,6 @@
                                 String s = data1.get("trade_state");
                                 String transaction_id = data1.get("transaction_id");
                                 if("REFUND".equals(s) || "NOTPAY".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10){
-                                    siteBooking.setState(3);
-                                    siteBookingService.updateById(siteBooking);
-                                    if(null != siteBooking.getUserCouponId()){
-                                        UserCoupon userCoupon = userCouponClient.queryUserCouponById(siteBooking.getUserCouponId());
-                                        userCoupon.setStatus(1);
-                                        userCouponClient.updateUserCoupon(userCoupon);
-                                    }
                                     break;
                                 }
                                 if("SUCCESS".equals(s)){
@@ -390,13 +379,6 @@
                                 String s = data1.get("tradeStatus");
                                 String tradeNo = data1.get("tradeNo");
                                 if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){
-                                    siteBooking.setState(3);
-                                    siteBookingService.updateById(siteBooking);
-                                    if(null != siteBooking.getUserCouponId()){
-                                        UserCoupon userCoupon = userCouponClient.queryUserCouponById(siteBooking.getUserCouponId());
-                                        userCoupon.setStatus(1);
-                                        userCouponClient.updateUserCoupon(userCoupon);
-                                    }
                                     break;
                                 }
                                 if("TRADE_SUCCESS".equals(s)){
@@ -422,7 +404,7 @@
 
 
     /**
-     * 玩湃币支付课程
+     * 玩湃币支付
      * @param appUser
      * @param paymentPrice
      * @return
@@ -437,4 +419,202 @@
         siteBookingService.updateById(siteBooking);
         return ResultUtil.success();
     }
+
+
+    /**
+     * 获取我的场地预约
+     * @param uid
+     * @param status
+     * @param pageNo
+     * @param pageSize
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public List<QueryMySiteVo> queryMySite(Integer uid, Integer status, Integer pageNo, Integer pageSize) throws Exception {
+        pageNo = (pageNo - 1) * pageSize;
+        return this.baseMapper.queryMySite(uid, status, pageNo, pageSize);
+    }
+
+
+    /**
+     * 取消我的预约场地
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil cancelMySite(Integer uid, Integer id) throws Exception {
+        SiteBooking siteBooking = siteBookingService.getById(id);
+        if(siteBooking.getStatus() == 0){
+            return ResultUtil.error("请先进行支付");
+        }
+        if(siteBooking.getStatus() != 1 && siteBooking.getStatus() != 2){
+            return ResultUtil.error("不能进行取消操作");
+        }
+        if(siteBooking.getPayType() == 1){//微信支付
+            Map<String, String> map = payMoneyUtil.wxRefund(siteBooking.getPayOrderNo(), siteBooking.getOrderNo(), siteBooking.getPayMoney().toString(), siteBooking.getPayMoney().toString(), "/base/site/cancelMySiteCallback");
+            if(null == map){
+                return ResultUtil.error("取消退款异常");
+            }
+            String result_code = map.get("result_code");
+            if(!"SUCCESS".equals(result_code)){
+                return ResultUtil.error(map.get("return_msg"));
+            }
+            siteBooking.setCancelUserId(uid);
+            siteBookingService.updateById(siteBooking);
+        }
+        if(siteBooking.getPayType() == 2){//支付宝
+            Map<String, String> map = payMoneyUtil.aliRefund(siteBooking.getPayOrderNo(), siteBooking.getPayMoney().toString());
+            if(null == map){
+                return ResultUtil.error("取消退款异常");
+            }
+            String code = map.get("code");
+            if(!"10000".equals(code)){
+                return ResultUtil.error(map.get("return_msg"));
+            }
+            String trade_no = map.get("trade_no");
+            siteBooking.setStatus(5);
+            siteBooking.setCancelUserId(uid);
+            siteBooking.setCancelTime(new Date());
+            siteBooking.setRefundOrderNo(trade_no);
+            siteBookingService.updateById(siteBooking);
+            if(null != siteBooking.getUserCouponId()){
+                UserCoupon userCoupon = userCouponClient.queryUserCouponById(siteBooking.getUserCouponId());
+                userCoupon.setStatus(1);
+                userCouponClient.updateUserCoupon(userCoupon);
+            }
+        }
+
+        if(siteBooking.getPayType() == 3){//玩湃币
+            AppUser appUser = appUserClient.queryAppUser(siteBooking.getAppUserId());
+            appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() + siteBooking.getPayMoney().intValue());
+            appUserClient.updateAppUser(appUser);
+
+            siteBooking.setStatus(5);
+            siteBooking.setCancelUserId(uid);
+            siteBooking.setCancelTime(new Date());
+            siteBookingService.updateById(siteBooking);
+            if(null != siteBooking.getUserCouponId()){
+                UserCoupon userCoupon = userCouponClient.queryUserCouponById(siteBooking.getUserCouponId());
+                userCoupon.setStatus(1);
+                userCouponClient.updateUserCoupon(userCoupon);
+            }
+        }
+
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 继续支付我预约的场地
+     * @param id
+     * @param payType
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil continuePaymentMySite(Integer uid, Integer id, Integer payType) throws Exception {
+        SiteBooking siteBooking = siteBookingService.getById(id);
+        if(siteBooking.getStatus() != 0){
+            return ResultUtil.error("不能继续支付");
+        }
+        Site site = this.getById(siteBooking.getSiteId());
+        AppUser appUser = appUserClient.queryAppUser(uid);
+        String[] split = siteBooking.getTimes().split(";");
+        Double payMoney = 0D;
+        if(payType == 3){
+            payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            if(appUser.getPlayPaiCoins().compareTo(payMoney.intValue()) < 0){
+                return ResultUtil.error("玩湃币不足");
+            }
+        }else{
+            payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+        }
+
+        //校验优惠券
+        Long couponId = siteBooking.getUserCouponId();
+        if(null != couponId && payType != 3){
+            UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId);
+            Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
+            if(coupon.getType() == 1){//满减
+                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+                Double num1 = jsonObject.getDouble("num1");
+                Double num2 = jsonObject.getDouble("num2");
+                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            }
+            if(coupon.getType() == 2){//代金券
+                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+                Double num1 = jsonObject.getDouble("num1");
+                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            }
+            userCoupon.setStatus(2);
+            userCouponClient.updateUserCoupon(userCoupon);
+        }
+        if(null != couponId && payType == 3){
+            UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId);
+            userCoupon.setStatus(1);
+            userCouponClient.updateUserCoupon(userCoupon);
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        siteBooking.setOrderNo(sdf.format(new Date()) + UUIDUtil.getNumberRandom(3));
+        siteBooking.setPayType(payType);
+        siteBooking.setPayMoney(payMoney);
+        if(payType == 3){
+            siteBooking.setUserCouponId(null);
+        }
+        siteBookingService.updateById(siteBooking);
+        if(payType == 1){//微信支付
+            return weChatPaymentSite(payMoney, siteBooking);
+        }
+        if(payType == 2){//支付宝支付
+            return aliPaymentSite(payMoney, siteBooking);
+        }
+        if(payType == 3){//玩湃币支付
+            return playPaiCoinPaymentSite(appUser, payMoney, siteBooking);
+        }
+        return ResultUtil.success();
+    }
+
+
+    /**
+     * 获取继续支付金额
+     * @param id
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil<Map<String, Double>> queryContinuePaymentMySitePrice(Integer id) throws Exception {
+        SiteBooking siteBooking = siteBookingService.getById(id);
+        if(siteBooking.getStatus() != 0){
+            return ResultUtil.error("不能继续支付");
+        }
+        Site site = this.getById(siteBooking.getSiteId());
+        String[] split = siteBooking.getTimes().split(";");
+        Map<String, Double> map = new HashMap<>();
+        Double payMoney = new BigDecimal(site.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+        map.put("playPaiCoin", payMoney);
+        payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+
+        //校验优惠券
+        Long couponId = siteBooking.getUserCouponId();
+        if(null != couponId){
+            UserCoupon userCoupon = userCouponClient.queryUserCouponById(couponId);
+            Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
+            if(coupon.getType() == 1){//满减
+                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+                Double num1 = jsonObject.getDouble("num1");
+                Double num2 = jsonObject.getDouble("num2");
+                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            }
+            if(coupon.getType() == 2){//代金券
+                JSONObject jsonObject = JSON.parseObject(coupon.getContent());
+                Double num1 = jsonObject.getDouble("num1");
+                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            }
+        }
+        map.put("cash", payMoney);
+        return ResultUtil.success(map);
+    }
 }

--
Gitblit v1.7.1