nickchange
2023-10-18 783b9ee7a8caa508d123d34bfbbf294716211dd7
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -28,6 +28,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalTime;
import java.util.*;
/**
@@ -62,6 +63,9 @@
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private SiteMapper siteMapper;
    @Autowired
    private TBackRecordService backRecordService;
@@ -102,6 +106,7 @@
        Store store = storeService.getById(site.getStoreId());
        QuerySiteInfoVo querySiteInfoVo = new QuerySiteInfoVo();
        querySiteInfoVo.setId(site.getId());
        querySiteInfoVo.setTypeName(site.getTypeName());
        querySiteInfoVo.setName(site.getName());
        querySiteInfoVo.setSiteTypeName(siteType.getName());
        querySiteInfoVo.setStoreName(store.getName());
@@ -111,13 +116,21 @@
        querySiteInfoVo.setStoreLat(store.getLat());
        querySiteInfoVo.setStorePhone(store.getPhone());
        querySiteInfoVo.setImgs(site.getImgs());
        querySiteInfoVo.setDistance(0D);
        querySiteInfoVo.setCashPriceOne(site.getCashPriceOne());
        if(site.getPlayPaiCoinOne()!=null){
            querySiteInfoVo.setPlayPaiCoinOne(site.getPlayPaiCoinOne().intValue());
        }
        querySiteInfoVo.setIntroduce(site.getIntroduce());
        ArrayList<String> nextName = new ArrayList<>();
        ArrayList<String> halfName = new ArrayList<>();
        String nextName1 = site.getNextName();
        String halfName1 = site.getHalfName();
        querySiteInfoVo.setIshalf(site.getIshalf());
        String[] split = nextName1.split(",");
        for (String s : split) {
            nextName.add(s);
@@ -139,6 +152,13 @@
    }
    @Autowired
    private ISiteBookingService iSiteBookingService;
    @Autowired
    private ISiteService siteService;
    /**
     * 获取场地预约日期数据
     * @param id
@@ -147,47 +167,168 @@
     * @throws Exception
     */
    @Override
    public List<QuerySiteTimes> querySiteTimes(Integer id, String day) throws Exception {
        Site site = this.getById(id);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Calendar s = Calendar.getInstance();
        s.setTime(sdf.parse(day + " " + site.getAppointmentStartTime()));
        Calendar e = Calendar.getInstance();
        e.setTime(sdf.parse(day + " " + site.getAppointmentEndTime()));
    public List<QuerySiteTimes> querySiteTimes(Integer id, String day,String halfName,String siteName) throws Exception {
//        Site site = this.getById(id);
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//        Calendar s = Calendar.getInstance();
//        s.setTime(sdf.parse(day + " " + site.getAppointmentStartTime()));
//        Calendar e = Calendar.getInstance();
//        e.setTime(sdf.parse(day + " " + site.getAppointmentEndTime()));
//
//        int hour = e.get(Calendar.HOUR_OF_DAY);
//
//        int minute = e.get(Calendar.MINUTE);
//
//        List<QuerySiteTimes> list = new ArrayList<>();
//
//        SimpleDateFormat sdfs = new SimpleDateFormat("HH:mm");
//
//        while (true){
//
//            String start = sdfs.format(s.getTime());
//
//            s.set(Calendar.MINUTE, s.get(Calendar.MINUTE) + 30);
//
//            int e_hour = s.get(Calendar.HOUR_OF_DAY);
//
//            int e_minute = s.get(Calendar.MINUTE);
//
//            String end = sdfs.format(s.getTime());
//
//            QuerySiteTimes querySiteTimes = new QuerySiteTimes();
//
//            querySiteTimes.setTime(start + "-" + end);
//
//            querySiteTimes.setSelectable(1);
//
//            SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>().eq("siteId", id).eq("state", 1)
//                    .in("status", Arrays.asList(3, 4, 5)).last(" and DATE_FORMAT(startTime, '%Y-%m-%d %H:%i') <= '" + day + " " + start + "' and DATE_FORMAT(endTime, '%Y-%m-%d %H:%i') >= '" + day + " " + end + "'"));
//            if(null != siteBooking){
//                querySiteTimes.setSelectable(0);
//            }
//            int count = siteLockService.count(new QueryWrapper<SiteLock>().eq("siteId", id).last(" and DATE_FORMAT(startTime, '%Y-%m-%d %H:%i') <= '" + day + " " + start + "' and DATE_FORMAT(endTime, '%Y-%m-%d %H:%i') >= '" + day + " " + end + "'"));
//            if(count > 0){
//                querySiteTimes.setSelectable(0);
//            }
//
//            list.add(querySiteTimes);
//
//            if(e_hour == hour && minute == e_minute){
//                break;
//            }
//        }
//        return list;
        int hour = e.get(Calendar.HOUR_OF_DAY);
        int minute = e.get(Calendar.MINUTE);
        List<QuerySiteTimes> list = new ArrayList<>();
        SimpleDateFormat sdfs = new SimpleDateFormat("HH:mm");
        while (true){
            String start = sdfs.format(s.getTime());
        System.out.println("=======date======"+day);
            s.set(Calendar.MINUTE, s.get(Calendar.MINUTE) + 30);
            int e_hour = s.get(Calendar.HOUR_OF_DAY);
            int e_minute = s.get(Calendar.MINUTE);
            String end = sdfs.format(s.getTime());
        List<String> strings = new ArrayList<>();
            QuerySiteTimes querySiteTimes = new QuerySiteTimes();
            querySiteTimes.setTime(start + "-" + end);
            querySiteTimes.setSelectable(1);
//        List<SiteBooking> siteBookings = siteClient.listBooks(id);
        List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).eq("nextName",siteName).like("times",day));
        System.out.println("=======siteBookings======"+siteBookings);
        for (SiteBooking siteBooking : siteBookings) {
            SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>().eq("siteId", id).eq("state", 1)
                    .in("status", Arrays.asList(3, 4, 5)).last(" and DATE_FORMAT(startTime, '%Y-%m-%d %H:%i') <= '" + day + " " + start + "' and DATE_FORMAT(endTime, '%Y-%m-%d %H:%i') >= '" + day + " " + end + "'"));
            if(null != siteBooking){
                querySiteTimes.setSelectable(0);
            }
            int count = siteLockService.count(new QueryWrapper<SiteLock>().eq("siteId", id).last(" and DATE_FORMAT(startTime, '%Y-%m-%d %H:%i') <= '" + day + " " + start + "' and DATE_FORMAT(endTime, '%Y-%m-%d %H:%i') >= '" + day + " " + end + "'"));
            if(count > 0){
                querySiteTimes.setSelectable(0);
            String[] split = siteBooking.getTimes().split(";");
            if (siteBooking.getIsHalf() == 2) {
                for (String s : split) {
                    String convertedValue = s.substring(11);
                    strings.add(convertedValue);
                }
            }else {
                if (siteBooking.getHalfName().equals(halfName)){
                    for (String s : split) {
                        String convertedValue = s.substring(11);
                        strings.add(convertedValue);
                    }
                }
            }
            list.add(querySiteTimes);
            if(e_hour == hour && minute == e_minute){
                break;
            }
        }
        return list;
        System.out.println("======strings======="+strings);
        List<QuerySiteTimes> timeRanges = new ArrayList<>();
        Site site =  siteService.getById(id);
        System.out.println("================"+site);
        String appointmentStartTime = site.getAppointmentStartTime();
        String appointmentEndTime = site.getAppointmentEndTime();
        String currentTime = appointmentStartTime;
        while (currentTime.compareTo(appointmentEndTime) < 0) {
            String nextTime = getNextTime(currentTime);
            String timeRange = currentTime + "-" + nextTime;
            QuerySiteTimes orderDto = new QuerySiteTimes();
            orderDto.setTime(timeRange);
            LocalTime currentTime1 = LocalTime.now();
            LocalTime targetTime = LocalTime.parse(currentTime);
            boolean hasExceeded = currentTime1.isAfter(targetTime);
//            if (hasExceeded){
//                orderDto.setSelectable(0);
//            }
            if (strings.contains(timeRange)){
                orderDto.setSelectable(0);
            }else {
                orderDto.setSelectable(1);
            }
            timeRanges.add(orderDto);
            currentTime = nextTime;
        }
        System.out.println("-------------"+timeRanges);
        return timeRanges;
    }
    public static String getNextTime(String currentTime) {
        String[] parts = currentTime.split(":");
        int hour = Integer.parseInt(parts[0]);
        int minute = Integer.parseInt(parts[1]);
        if (minute == 30) {
            hour++;
            minute = 0;
        } else {
            minute = 30;
        }
        return String.format("%02d:%02d", hour, minute);
//        String[] parts = currentTime.split(":");
//        int hour = Integer.parseInt(parts[0]);
//        int minute = Integer.parseInt(parts[1]);
//
//        if (minute == 45) {
//            hour++;
//            minute = 0;
//        } else if (minute == 0){
//            minute = 15;
//        }else if (minute == 15){
//            minute = 30;
//        }else if (minute == 30){
//            minute = 45;
//        }
//
//        return String.format("%02d:%02d", hour, minute);
    }
@@ -206,7 +347,7 @@
        for (String s : split) {
            String day = s.split(" ")[0];
            String time = s.split(" ")[1];
            List<QuerySiteTimes> querySiteTimes = querySiteTimes(reservationSite.getId(), day);
            List<QuerySiteTimes> querySiteTimes = querySiteTimes(reservationSite.getId(), day,reservationSite.getHalfName(),reservationSite.getNextName());
            for (QuerySiteTimes querySiteTime : querySiteTimes) {
                if(querySiteTime.getTime().equals(time) && querySiteTime.getSelectable() == 0){
                    return ResultUtil.error("【" + s + "】时间段已被使用");
@@ -223,7 +364,11 @@
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        Double payMoney = 0D;
        if(reservationSite.getPayType() == 3){
            payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
            if(reservationSite.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();
            }
            if(appUser.getPlayPaiCoins().compareTo(payMoney.intValue()) < 0){
                return ResultUtil.error("玩湃币不足");
            }
@@ -233,8 +378,12 @@
        //校验优惠券
        Long couponId = reservationSite.getCouponId();
        if (couponId!=null && couponId != 0){
        if(null != couponId && reservationSite.getPayType() != 3){
            UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(reservationSite.getCouponId(),uid));
            if(userCoupon.getStatus() == 2){
                return ResultUtil.error("优惠券已被核销");
            }
@@ -264,6 +413,7 @@
            }
            userCoupon.setStatus(2);
            userCouponClient.updateUserCoupon(userCoupon);
        }
        }
@@ -301,7 +451,11 @@
            return aliPaymentSite(payMoney, siteBooking);
        }
        if(reservationSite.getPayType() == 3){//玩湃币支付
            return playPaiCoinPaymentSite(appUser, payMoney, siteBooking);
            if(reservationSite.getIsHalf()==2){
                return playPaiCoinPaymentSite(appUser, Double.valueOf(site.getPlayPaiCoin()), siteBooking);
            }else {
                return playPaiCoinPaymentSite(appUser, site.getPlayPaiCoinOne(), siteBooking);
            }
        }
        return ResultUtil.success();
    }
@@ -467,7 +621,10 @@
            SiteBooking siteBooking = siteBookingService.getById(queryMySiteVo.getId());
            Site site = this.getById(siteBooking.getSiteId());
            String[] split = siteBooking.getTimes().split(";");
            queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length);
            if(site!=null){
                queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length);
            }
        }
        return queryMySiteVos;
    }
@@ -505,6 +662,13 @@
            }
            siteBooking.setCancelUserId(uid);
            siteBookingService.updateById(siteBooking);
            TBackRecord tBackRecord = new TBackRecord();
            tBackRecord.setMoney(siteBooking.getPayMoney());
            tBackRecord.setUserId(siteBooking.getAppUserId());
            tBackRecord.setTime(new Date());
            backRecordService.save(tBackRecord);
        }
        if(siteBooking.getPayType() == 2){//支付宝
            Map<String, String> map = payMoneyUtil.aliRefund(siteBooking.getPayOrderNo(), siteBooking.getPayMoney().toString());
@@ -526,6 +690,13 @@
                userCoupon.setStatus(1);
                userCouponClient.updateUserCoupon(userCoupon);
            }
            TBackRecord tBackRecord = new TBackRecord();
            tBackRecord.setMoney(siteBooking.getPayMoney());
            tBackRecord.setUserId(siteBooking.getAppUserId());
            tBackRecord.setTime(new Date());
            backRecordService.save(tBackRecord);
        }
        if(siteBooking.getPayType() == 3){//玩湃币