From e030255c23c7ba3e2cbad1036a810d6d72fa864f Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期四, 26 十月 2023 18:04:58 +0800
Subject: [PATCH] 修改bug

---
 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java |  249 +++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 197 insertions(+), 52 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 5bcce9e..041bb6b 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
@@ -4,6 +4,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dsh.other.entity.*;
@@ -28,6 +29,7 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalTime;
 import java.util.*;
 
 /**
@@ -63,6 +65,9 @@
     @Autowired
     private SiteMapper siteMapper;
 
+    @Autowired
+    private TBackRecordService backRecordService;
+
 
 
 
@@ -83,7 +88,8 @@
                 continue;
             }
             Map<String, Double> distance = GeodesyUtil.getDistance(querySiteList.getLon() + "," + querySiteList.getLat(), querySiteListVo.getStoreLon() + "," + querySiteListVo.getStoreLat());
-            querySiteListVo.setDistance(distance.get("WGS84"));
+            double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
+            querySiteListVo.setDistance(wgs84);
         }
         return querySiteListVos;
     }
@@ -102,6 +108,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,7 +118,10 @@
         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());
@@ -144,6 +154,13 @@
     }
 
 
+
+
+
+    @Autowired
+    private ISiteBookingService iSiteBookingService;
+    @Autowired
+    private ISiteService siteService;
     /**
      * 获取场地预约日期数据
      * @param id
@@ -152,57 +169,148 @@
      * @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 {
 
-        int hour = e.get(Calendar.HOUR_OF_DAY);
+        System.out.println("=======date======"+day);
 
-        int minute = e.get(Calendar.MINUTE);
+        List<String> strings = new ArrayList<>();
 
-        List<QuerySiteTimes> list = new ArrayList<>();
+//        List<SiteBooking> siteBookings = siteClient.listBooks(id);
+        List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).eq("nextName",siteName).like("times",day));
 
-        SimpleDateFormat sdfs = new SimpleDateFormat("HH:mm");
 
-        while (true){
+        if (siteName==null|| siteName.equals("")){
+            siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).like("times",day));
+        }
 
-            String start = sdfs.format(s.getTime());
 
-            s.set(Calendar.MINUTE, s.get(Calendar.MINUTE) + 30);
+        System.out.println("=======siteBookings======"+siteBookings);
+        for (SiteBooking siteBooking : siteBookings) {
 
-            int e_hour = s.get(Calendar.HOUR_OF_DAY);
 
-            int e_minute = s.get(Calendar.MINUTE);
+            String[] split = siteBooking.getTimes().split(";");
 
-            String end = sdfs.format(s.getTime());
+            if (siteBooking.getIsHalf() == 2) {
+                for (String s : split) {
+                    String convertedValue = s.substring(11);
+                    strings.add(convertedValue);
+                }
+            }else {
+                if (halfName==null){
+                    for (String s : split) {
+                        String convertedValue = s.substring(11);
+                        strings.add(convertedValue);
+                    }
+                }
 
-            QuerySiteTimes querySiteTimes = new QuerySiteTimes();
+                if (siteBooking.getHalfName().equals(halfName)){
+                    for (String s : split) {
+                        String convertedValue = s.substring(11);
+                        strings.add(convertedValue);
+                    }
 
-            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;
+        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=null;
+            if("智慧场地".equals(site.getTypeName())){
+                nextTime=getNextTimeOne(currentTime);
+            }else {
+                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 {
+
+                String stime = day+" "+currentTime;
+                String etime = day+" "+nextTime;
+                orderDto.setSelectable(1);
+                // 查出lock
+                List<SiteLock> list = siteLockService.list(new LambdaQueryWrapper<SiteLock>().eq(SiteLock::getSiteId, id));
+                for (SiteLock siteLock : list) {
+                    boolean stringDateBetween = DateComparisonExample.isStringDateBetween(stime + " - " + etime, siteLock.getStartTime(), siteLock.getEndTime());
+                    if(stringDateBetween){
+                        orderDto.setSelectable(0);
+                    }
+                }
+
+
+            }
+
+
+            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);
+
+    }
+    public static String getNextTimeOne(String currentTime) {
+
+        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);
+
     }
 
 
@@ -214,17 +322,18 @@
      */
     @Override
     public ResultUtil reservationSite(Integer uid, ReservationSite reservationSite) throws Exception {
+
         Site site = this.getById(reservationSite.getId());
         AppUser appUser = appUserClient.queryAppUser(uid);
         String[] split = reservationSite.getTimes().split(";");
-
         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 + "】时间段已被使用");
+                    return ResultUtil.error("【" + s + "】" +
+                            "时间段已被使用");
                 }
             }
         }
@@ -238,9 +347,14 @@
         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("玩湃币不足");
+
+                return new ResultUtil(3,"玩湃币不足");
             }
         }else{
             payMoney = new BigDecimal(site.getCashPrice()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
@@ -248,9 +362,13 @@
 
         //校验优惠券
         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){
+
+
+            if(userCoupon!=null && userCoupon.getStatus() == 2){
                 return ResultUtil.error("优惠券已被核销");
             }
             Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId());
@@ -258,7 +376,7 @@
             if(System.currentTimeMillis() >= time){
                 return ResultUtil.error("优惠券已过期");
             }
-            if(coupon.getType() == 1){//满减
+            if(userCoupon!=null && coupon.getType() == 1){//满减
 //                {"conditionalAmount":50,"deductionAmount":10,"experienceName":""}
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
@@ -269,7 +387,7 @@
 
                 payMoney = new BigDecimal(payMoney).subtract(new BigDecimal(num2)).setScale(2, RoundingMode.HALF_EVEN).doubleValue();
             }
-            if(coupon.getType() == 2){//代金券
+            if(userCoupon!=null && coupon.getType() == 2){//代金券
                 JSONObject jsonObject = JSON.parseObject(coupon.getContent());
                 Double num1 = jsonObject.getDouble("conditionalAmount");
                 if(payMoney.compareTo(num1) <= 0){
@@ -279,6 +397,7 @@
             }
             userCoupon.setStatus(2);
             userCouponClient.updateUserCoupon(userCoupon);
+        }
         }
 
 
@@ -310,13 +429,19 @@
         siteBookingService.save(siteBooking);
 
         if(reservationSite.getPayType() == 1){//微信支付
-            return weChatPaymentSite(payMoney, siteBooking);
+            ResultUtil resultUtil = weChatPaymentSite(payMoney, siteBooking);
+
+            return resultUtil;
         }
         if(reservationSite.getPayType() == 2){//支付宝支付
             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();
     }
@@ -331,7 +456,7 @@
     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", "");
+        ResultUtil weixinpay = payMoneyUtil.weixinpay("预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/weChatPaymentSiteCallback", "APP", "");
         if(weixinpay.getCode() == 200){
             new Thread(new Runnable() {
                 @Override
@@ -395,7 +520,7 @@
     public ResultUtil aliPaymentSite(Double paymentPrice, SiteBooking siteBooking) throws Exception{
         String code = siteBooking.getOrderNo();
         Integer id = siteBooking.getId();
-        ResultUtil alipay = payMoneyUtil.alipay("预约场地", "预约场地", "", code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback");
+        ResultUtil alipay = payMoneyUtil.alipay("预约场地", "预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback");
         if(alipay.getCode() == 200){
             new Thread(new Runnable() {
                 @Override
@@ -461,7 +586,9 @@
         siteBooking.setPayTime(new Date());
         siteBooking.setStatus(1);
         siteBookingService.updateById(siteBooking);
-        return ResultUtil.success();
+        HashMap<String, String> map = new HashMap<>();
+        map.put("siteBooking",siteBooking.getId().toString());
+        return ResultUtil.success(map);
     }
 
 
@@ -523,6 +650,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());
@@ -544,6 +678,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){//玩湃币
@@ -589,7 +730,11 @@
                 return ResultUtil.error("玩湃币不足");
             }
         }else{
-            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();
+            }
         }
 
         //校验优惠券

--
Gitblit v1.7.1