无关风月
20 小时以前 106c40f6f2e864754ac84fb92f1eb5c530d9396d
App预约场地操作
2个文件已修改
103 ■■■■ 已修改文件
cloud-server-other/src/main/java/com/dsh/other/entity/SiteBooking.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java 99 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/entity/SiteBooking.java
@@ -208,7 +208,7 @@
    // 分账回退流水号
    @TableField("fenzhangRefundNo")
    private String fenzhangRefundNo;
    // 分账回退流水号
    @TableField("面向人群 1订场 2散客")
    // 面向人群 1订场 2散客
    @TableField("targetAudience")
    private Integer targetAudience;
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -4,6 +4,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.config.filter.IFilterConfig;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeOrderSettleRequest;
@@ -126,6 +127,17 @@
        SiteType siteType = siteTypeService.getById(site.getSiteTypeId());
        Store store = storeService.getById(site.getStoreId());
        QuerySiteInfoVo querySiteInfoVo = new QuerySiteInfoVo();
        if (site.getTargetAudience().contains("1")) {
            querySiteInfoVo.setTargetAudience(1);
        }
        if (site.getTargetAudience().contains("2")) {
            querySiteInfoVo.setTargetAudience(2);
        }
        if (site.getTargetAudience().contains("1") && site.getTargetAudience().contains("2")) {
            querySiteInfoVo.setTargetAudience(3);
        }
        querySiteInfoVo.setTargetAudience(3);
        querySiteInfoVo.setId(site.getId());
        querySiteInfoVo.setTypeName(site.getTypeName());
        querySiteInfoVo.setName(site.getName());
@@ -227,12 +239,14 @@
        Site site = siteService.getById(id);
        List<QuerySiteTimes> timeRanges = new ArrayList<>();
        day = day.split(";")[0].split(" ")[0];
        LocalDate date = LocalDate.parse(day);
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        // 通过日期 确定周X 查询设置的可以约时间段和金额 封装基础时间段数据
        LambdaQueryWrapper<TSitePrice> tSitePriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
        tSitePriceLambdaQueryWrapper.eq(TSitePrice::getSiteId, id);
        tSitePriceLambdaQueryWrapper.orderByAsc(TSitePrice::getStartTime);
        tSitePriceLambdaQueryWrapper.eq(TSitePrice::getTargetAudience, targetAudience);
        tSitePriceLambdaQueryWrapper.eq(TSitePrice::getDayOfWeek, dayOfWeek.getValue());
        if (StringUtils.hasLength(halfName)) {
            tSitePriceLambdaQueryWrapper.eq(TSitePrice::getFieldType, 2);
@@ -243,22 +257,30 @@
        for (TSitePrice tSitePrice : sitePrice) {
            QuerySiteTimes querySiteTimes = new QuerySiteTimes();
            querySiteTimes.setTime(tSitePrice.getStartTime() + "-" + tSitePrice.getEndTime());
            querySiteTimes.setTime(tSitePrice.getStartTime().substring(0, tSitePrice.getStartTime().length() - 3) + "-" + tSitePrice.getEndTime().substring(0, tSitePrice.getEndTime().length() - 3));
            querySiteTimes.setSelectable(1);
            querySiteTimes.setSelectCount(0);
            querySiteTimes.setSelectMaxCount(site.getWalkinCapacity());
            querySiteTimes.setIsReserve(1);
            querySiteTimes.setIsReserve(0);
            querySiteTimes.setCashPrice(tSitePrice.getCashPrice());
            querySiteTimes.setCoinPrice(tSitePrice.getCoinPrice());
            String temp = tSitePrice.getStartTime() + "-" + tSitePrice.getEndTime();
            List<String> booking = strings.stream().filter(e -> e.split(",")[0].equals(temp)).collect(Collectors.toList());
            if (!booking.isEmpty()) {
                // 已经预约了 判断是散客模式还是订场模式
                Integer flag = 0;
                // 散客预约人数
                Integer count = 0;
                for (String time : booking) {
                    String s = time.split(",")[1];
            String temp = tSitePrice.getStartTime().substring(0, tSitePrice.getStartTime().length() - 3) + "-" + tSitePrice.getEndTime().substring(0, tSitePrice.getEndTime().length() - 3);
            String timePriceStart = day + " " + tSitePrice.getStartTime().substring(0, tSitePrice.getStartTime().length() - 3);
            String timePriceEnd = day + " " + tSitePrice.getEndTime().substring(0, tSitePrice.getEndTime().length() - 3);
            // 已经预约了 判断是散客模式还是订场模式
            Integer flag = 0;
            // 散客预约人数
            Integer count = 0;
            for (String time : strings) {
                // 先判断时间是否和预约时间有交集
                String s = time.split(",")[1];
                String timeRange = time.split(",")[0];
                String[] split = timeRange.split("-");
                String bookingStart = day + " " + split[0];
                String bookingEnd = day + " " + split[1];
                if (!isTimePeriodsIntersect(timePriceStart, timePriceEnd, bookingStart, bookingEnd)) {
                    // 不相交
                } else {
                    if (s.equals("1")) {
                        // 订场 不可再预约了
                        querySiteTimes.setIsReserve(1);
@@ -268,26 +290,26 @@
                    }
                    count++;
                }
                querySiteTimes.setSelectCount(count);
                if (flag == 0) {
                    // 当前时间段还没有预约
                    Integer walkinCapacity = site.getWalkinCapacity();
                    // 计算散客预约人数和最大散客容纳数
                    System.err.println("预约人数" + count);
                    System.err.println("最大散客容纳数" + walkinCapacity);
                    if (walkinCapacity <= count) {
                        // 不可预约 也不能散客
                        System.err.println("不可预约 也不能散客");
                        querySiteTimes.setSelectable(0);
                        querySiteTimes.setIsReserve(0);
                    }
            }
            querySiteTimes.setSelectCount(count);
            if (flag == 0) {
                // 当前时间段还没有预约
                Integer walkinCapacity = site.getWalkinCapacity();
                // 计算散客预约人数和最大散客容纳数
                System.err.println("预约人数" + count);
                System.err.println("最大散客容纳数" + walkinCapacity);
                if (walkinCapacity <= count) {
                    // 不可预约 也不能散客
                    System.err.println("不可预约 也不能散客");
                    querySiteTimes.setSelectable(0);
                    querySiteTimes.setIsReserve(0);
                }
            }
            // 查出lock
            List<SiteLock> list = siteLockService.list(new LambdaQueryWrapper<SiteLock>().eq(SiteLock::getSiteId, id));
            for (SiteLock siteLock : list) {
                String stime = day + " " + tSitePrice.getStartTime();
                String etime = day + " " + tSitePrice.getEndTime();
                String stime = day + " " + tSitePrice.getStartTime().substring(0, tSitePrice.getStartTime().length() - 3);
                String etime = day + " " + tSitePrice.getEndTime().substring(0, tSitePrice.getEndTime().length() - 3);
                boolean stringDateBetween = DateComparisonExample.isStringDateBetween(stime + " - " + etime, siteLock.getStartTime(), siteLock.getEndTime());
                if (stringDateBetween) {
                    System.err.println("11111预约开始" + stime + "预约结束" + etime);
@@ -373,7 +395,24 @@
    }
    /**
     * 判断两个时间段是否有交集
     * @param start1 第一个时间段开始时间
     * @param end1 第一个时间段结束时间
     * @param start2 第二个时间段开始时间
     * @param end2 第二个时间段结束时间
     * @return 如果有交集返回true,否则返回false
     */
    private boolean isTimePeriodsIntersect(String start1, String end1, String start2, String end2) {
        // 首先判断是否有任何形式的重叠(包括端点)
        boolean hasOverlap = start1.compareTo(end2) <= 0 && end1.compareTo(start2) >= 0;
        // 判断是否仅仅是端点相接
        boolean onlyTouching = start1.compareTo(end2) == 0 || end1.compareTo(start2) == 0;
        // 有重叠且不是仅仅端点相接才算真正的交集
        return hasOverlap && !onlyTouching;
    }
//    public static void main(String[] args) {
//        String temp = "09:00-09:30";
//        List<String> strings = new ArrayList<>();
@@ -440,9 +479,15 @@
        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(reservationSite.getId(), day, reservationSite.getHalfName(), reservationSite.getNextName(), reservationSite.getTargetAudience());
            for (QuerySiteTimes querySiteTime : querySiteTimes) {
                if (querySiteTime.getTime().equals(time) && querySiteTime.getSelectable() == 0) {
                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 + "】" +
                                "时间段已被使用");