From 7ab89c134470bd8931901e4aec839cd3a626716f Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 30 十月 2025 17:50:51 +0800
Subject: [PATCH] App预约场地操作

---
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java |  155 +++++++++++++++++++++++++++++++++++----------------
 1 files changed, 105 insertions(+), 50 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 8a573ef..a9a2e52 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
@@ -90,6 +90,7 @@
     private ISiteService siteService;
 
 
+
     /**
      * 获取场地列表
      *
@@ -137,7 +138,6 @@
             querySiteInfoVo.setTargetAudience(3);
         }
 
-        querySiteInfoVo.setTargetAudience(3);
         querySiteInfoVo.setId(site.getId());
         querySiteInfoVo.setTypeName(site.getTypeName());
         querySiteInfoVo.setName(site.getName());
@@ -817,17 +817,39 @@
         List<QueryMySiteVo> queryMySiteVos = this.baseMapper.queryMySite(uid, status, pageNo, pageSize);
         for (QueryMySiteVo queryMySiteVo : queryMySiteVos) {
             SiteBooking siteBooking = siteBookingService.getById(queryMySiteVo.getId());
-            Site site = this.getById(siteBooking.getSiteId());
             String[] split = siteBooking.getTimes().split(";");
-            if (site != null) {
-                if (queryMySiteVo.getIsHalf() == 1) {
-                    queryMySiteVo.setPlayPaiCoin((int) (site.getPlayPaiCoinOne() * split.length));
+            // 所选时间段 所需总计金额
+            BigDecimal money = BigDecimal.ZERO;
+            BigDecimal playCoin = BigDecimal.ZERO;
+            for (String s : split) {
 
-                } else {
-                    queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length);
-
+                String day = s.split(" ")[0];
+                String time = s.split(" ")[1];
+                String bookingStart = day + " " + time.split("-")[0];
+                String bookingEnd = day + " " + time.split("-")[1];
+                List<QuerySiteTimes> querySiteTimes = querySiteTimes(siteBooking.getId(), day, siteBooking.getHalfName(), siteBooking.getNextName(), siteBooking.getTargetAudience());
+                for (QuerySiteTimes querySiteTime : querySiteTimes) {
+                    String timePriceStart = day + " " + querySiteTime.getTime().split("-")[0];
+                    String timePriceEnd = day + " " + querySiteTime.getTime().split("-")[1];
+//                    if (!isTimePeriodsIntersect(timePriceStart, timePriceEnd, bookingStart, bookingEnd)) {
+//                        // 时间不相交
+//                    } else if (querySiteTime.getSelectable() == 0) {
+//                        if (querySiteTime.getIsReserve() == 1) {
+//                            return ResultUtil.error("【" + s + "】" +
+//                                    "时间段已被使用");
+//                        } else {
+//                            return ResultUtil.error("【" + s + "】" +
+//                                    "时间段散客人数已满");
+//                        }
+//                    }
+                    if (querySiteTime.getTime().equals(time)) {
+                        money = money.add(querySiteTime.getCashPrice());
+                        playCoin = playCoin.add(querySiteTime.getCoinPrice());
+                        break;
+                    }
                 }
             }
+            queryMySiteVo.setPlayPaiCoin(playCoin.setScale(0, RoundingMode.DOWN).intValue());
         }
         return queryMySiteVos;
     }
@@ -967,23 +989,34 @@
         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.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-            if (appUser.getPlayPaiCoins().compareTo(payMoney.intValue()) < 0) {
-                return ResultUtil.error("玩湃币不足");
-            }
-
-            if (siteBooking.getIsHalf() == 2) {
-                payMoney = new BigDecimal(site.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-            } else {
-                payMoney = new BigDecimal(site.getPlayPaiCoinOne()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-            }
-        } else {
-            if (siteBooking.getIsHalf() == 2) {
-                payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-            } else {
-                payMoney = new BigDecimal(site.getCashPriceOne()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+        // 所选时间段 所需总计金额
+        BigDecimal money = BigDecimal.ZERO;
+        BigDecimal playCoin = BigDecimal.ZERO;
+        for (String s : split) {
+            String day = s.split(" ")[0];
+            String time = s.split(" ")[1];
+            String bookingStart = day + " " + time.split("-")[0];
+            String bookingEnd = day + " " + time.split("-")[1];
+            List<QuerySiteTimes> querySiteTimes = querySiteTimes(siteBooking.getId(), day, siteBooking.getHalfName(), siteBooking.getNextName(), siteBooking.getTargetAudience());
+            for (QuerySiteTimes querySiteTime : querySiteTimes) {
+                String timePriceStart = day + " " + querySiteTime.getTime().split("-")[0];
+                String timePriceEnd = day + " " + querySiteTime.getTime().split("-")[1];
+                if (!isTimePeriodsIntersect(timePriceStart, timePriceEnd, bookingStart, bookingEnd)) {
+                    // 时间不相交
+                } else if (querySiteTime.getSelectable() == 0) {
+                    if (querySiteTime.getIsReserve() == 1) {
+                        return ResultUtil.error("【" + s + "】" +
+                                "时间段已被使用");
+                    } else {
+                        return ResultUtil.error("【" + s + "】" +
+                                "时间段散客人数已满");
+                    }
+                }
+                if (querySiteTime.getTime().equals(time)) {
+                    money = money.add(querySiteTime.getCashPrice());
+                    playCoin = playCoin.add(querySiteTime.getCoinPrice());
+                    break;
+                }
             }
         }
 
@@ -997,12 +1030,12 @@
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
                 Double num2 = jsonObject.getDouble("deductionAmount");
-                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                money = money.subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN);
             }
             if (coupon.getType() == 2) {//代金券
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
-                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                money = money.subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN);
             }
             userCoupon.setStatus(2);
             userCouponClient.updateUserCoupon(userCoupon);
@@ -1016,19 +1049,19 @@
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
         siteBooking.setOrderNo(sdf.format(new Date()) + UUIDUtil.getNumberRandom(3));
         siteBooking.setPayType(payType);
-        siteBooking.setPayMoney(payMoney);
+        siteBooking.setPayMoney(money.doubleValue());
         if (payType == 3) {
             siteBooking.setUserCouponId(null);
         }
         siteBookingService.updateById(siteBooking);
         if (payType == 1) {//微信支付
-            return weChatPaymentSite(payMoney, siteBooking);
+            return weChatPaymentSite(money.doubleValue(), siteBooking);
         }
         if (payType == 2) {//支付宝支付
-            return aliPaymentSite(payMoney, siteBooking);
+            return aliPaymentSite(money.doubleValue(), siteBooking);
         }
         if (payType == 3) {//玩湃币支付
-            return playPaiCoinPaymentSite(appUser, payMoney, siteBooking);
+            return playPaiCoinPaymentSite(appUser, playCoin.doubleValue(), siteBooking);
         }
         return ResultUtil.success();
     }
@@ -1050,22 +1083,35 @@
         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();
-
-
-        if (siteBooking.getIsHalf() == 2) {
-            payMoney = new BigDecimal(site.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-        } else {
-            payMoney = new BigDecimal(site.getPlayPaiCoinOne()).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();
-
-        if (siteBooking.getIsHalf() == 2) {
-            payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
-        } else {
-            payMoney = new BigDecimal(site.getCashPriceOne()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+        // 所选时间段 所需总计金额
+        BigDecimal money = BigDecimal.ZERO;
+        BigDecimal playCoin = BigDecimal.ZERO;
+        for (String s : split) {
+            String day = s.split(" ")[0];
+            String time = s.split(" ")[1];
+            String bookingStart = day + " " + time.split("-")[0];
+            String bookingEnd = day + " " + time.split("-")[1];
+            List<QuerySiteTimes> querySiteTimes = querySiteTimes(siteBooking.getId(), day, siteBooking.getHalfName(), siteBooking.getNextName(), siteBooking.getTargetAudience());
+            for (QuerySiteTimes querySiteTime : querySiteTimes) {
+                String timePriceStart = day + " " + querySiteTime.getTime().split("-")[0];
+                String timePriceEnd = day + " " + querySiteTime.getTime().split("-")[1];
+                if (!isTimePeriodsIntersect(timePriceStart, timePriceEnd, bookingStart, bookingEnd)) {
+                    // 时间不相交
+                } else if (querySiteTime.getSelectable() == 0) {
+                    if (querySiteTime.getIsReserve() == 1) {
+                        return ResultUtil.error("【" + s + "】" +
+                                "时间段已被使用");
+                    } else {
+                        return ResultUtil.error("【" + s + "】" +
+                                "时间段散客人数已满");
+                    }
+                }
+                if (querySiteTime.getTime().equals(time)) {
+                    money = money.add(querySiteTime.getCashPrice());
+                    playCoin = playCoin.add(querySiteTime.getCoinPrice());
+                    break;
+                }
+            }
         }
 
         //校验优惠券
@@ -1078,15 +1124,24 @@
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
                 Double num2 = jsonObject.getDouble("deductionAmount");
-                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                money = money.subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN);
             }
             if (coupon.getType() == 2) {//代金券
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
-                payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+                money = money.subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN);
             }
         }
-        map.put("cash", payMoney);
+        switch (siteBooking.getPayType()){
+            case 1:
+                map.put("cash", money.doubleValue());
+                break;
+            case 2:
+                map.put("cash", money.doubleValue());
+                break;
+            case 3:
+                map.put("playPaiCoin", money.doubleValue());
+        }
         return ResultUtil.success(map);
     }
 

--
Gitblit v1.7.1