无关风月
2025-10-30 7ab89c134470bd8931901e4aec839cd3a626716f
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());
@@ -255,6 +255,7 @@
        }
        List<TSitePrice> sitePrice = sitePriceService.list(tSitePriceLambdaQueryWrapper);
        for (TSitePrice tSitePrice : sitePrice) {
            QuerySiteTimes querySiteTimes = new QuerySiteTimes();
            querySiteTimes.setTime(tSitePrice.getStartTime().substring(0, tSitePrice.getStartTime().length() - 3) + "-" + tSitePrice.getEndTime().substring(0, tSitePrice.getEndTime().length() - 3));
@@ -303,6 +304,19 @@
                    System.err.println("不可预约 也不能散客");
                    querySiteTimes.setSelectable(0);
                    querySiteTimes.setIsReserve(0);
                }else{
                    if (targetAudience==2){
                        // 散客只能预约当前时间段
                        Date now = new Date();
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
                        String nowStr = simpleDateFormat.format(now);
                        // 判断当前时间有没有在timePriceStart和timePriceEnd之间
                        if (DateComparisonExample.isStringWithinTimeRange(nowStr, simpleDateFormat.parse(timePriceStart),  simpleDateFormat.parse(timePriceEnd))) {
                            querySiteTimes.setSelectable(1);
                        }else{
                            querySiteTimes.setSelectable(0);
                        }
                    }
                }
            }
            // 查出lock
@@ -803,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;
    }
@@ -953,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;
                }
            }
        }
@@ -983,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);
@@ -1002,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();
    }
@@ -1036,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;
                }
            }
        }
        //校验优惠券
@@ -1064,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);
    }