From ae9bfd2d66f68a553786ac78b12f4390e65e4e09 Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期五, 24 十一月 2023 18:30:18 +0800 Subject: [PATCH] 后台bug修改 --- cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java | 255 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 152 insertions(+), 103 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 0a7c8a6..da5ad28 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,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.alipay.api.response.AlipayTradeQueryResponse; +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.*; @@ -27,6 +29,7 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalTime; import java.util.*; @@ -87,7 +90,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; } @@ -168,63 +172,19 @@ */ @Override 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; System.out.println("=======date======"+day); - List<String> strings = 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)); + List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).ne("status",5).eq("nextName",siteName).like("times",day)); + + + if (siteName==null|| siteName.equals("")){ + siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).ne("status",5).like("times",day)); + } + + System.out.println("=======siteBookings======"+siteBookings); for (SiteBooking siteBooking : siteBookings) { @@ -237,6 +197,12 @@ strings.add(convertedValue); } }else { + if (halfName==null){ + for (String s : split) { + String convertedValue = s.substring(11); + strings.add(convertedValue); + } + } if (siteBooking.getHalfName().equals(halfName)){ for (String s : split) { @@ -245,11 +211,7 @@ } } - - } - - } System.out.println("======strings======="+strings); @@ -264,7 +226,12 @@ String currentTime = appointmentStartTime; while (currentTime.compareTo(appointmentEndTime) < 0) { - String nextTime = getNextTime(currentTime); + String nextTime=null; + if("智慧场地".equals(site.getTypeName())){ + nextTime=getNextTimeOne(currentTime); + }else { + nextTime= getNextTime(currentTime); + } String timeRange = currentTime + "-" + nextTime; @@ -279,9 +246,30 @@ // 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); + } + if (DateComparisonExample.isStringWithinTimeRange(stime, siteLock.getStartTime(), siteLock.getEndTime())){ + orderDto.setSelectable(0); + } + if (DateComparisonExample.isStringWithinTimeRange(etime, siteLock.getStartTime(), siteLock.getEndTime())){ + orderDto.setSelectable(0); + } + + } + + } @@ -294,9 +282,10 @@ - - } + + + public static String getNextTime(String currentTime) { @@ -313,23 +302,25 @@ 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); + } + 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); } @@ -342,17 +333,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,reservationSite.getHalfName(),reservationSite.getNextName()); for (QuerySiteTimes querySiteTime : querySiteTimes) { if(querySiteTime.getTime().equals(time) && querySiteTime.getSelectable() == 0){ - return ResultUtil.error("【" + s + "】时间段已被使用"); + return ResultUtil.error("【" + s + "】" + + "时间段已被使用"); } } } @@ -367,15 +359,21 @@ Double payMoney = 0D; if(reservationSite.getPayType() == 3){ if(reservationSite.getIsHalf()==2){ - payMoney = new BigDecimal(site.getPlayPaiCoin()).multiply(new BigDecimal(split.length)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + 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(); + if(reservationSite.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(); + + } } //校验优惠券 @@ -386,7 +384,7 @@ 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()); @@ -394,18 +392,18 @@ 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"); Double num2 = jsonObject.getDouble("deductionAmount"); - if(payMoney.compareTo(num1) <= 0){ + if(payMoney.compareTo(num1) < 0){ return ResultUtil.error("该优惠券无法使用"); } 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){ @@ -446,8 +444,13 @@ siteBooking.setHalfName(reservationSite.getHalfName()); 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); @@ -472,7 +475,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 @@ -527,6 +530,7 @@ } + /** * 课程支付宝支付 * @param paymentPrice @@ -536,7 +540,8 @@ 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"); + System.out.println("预约场地----"+alipay.getCode()); if(alipay.getCode() == 200){ new Thread(new Runnable() { @Override @@ -552,17 +557,19 @@ if(siteBooking.getStatus() != 0){ break; } - ResultUtil<Map<String, String>> resultUtil = payMoneyUtil.queryALIOrder(code); - if(resultUtil.getCode() == 200 && siteBooking.getStatus() == 0){ + AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code); + if(resultUtil.getCode().equals("10000") && siteBooking.getStatus() == 0){ /** * WAIT_BUYER_PAY(交易创建,等待买家付款)、 * TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、 * TRADE_SUCCESS(交易支付成功)、 * TRADE_FINISHED(交易结束,不可退款) */ - Map<String, String> data1 = resultUtil.getData(); - String s = data1.get("tradeStatus"); - String tradeNo = data1.get("tradeNo"); +// Map<String, String> data1 = resultUtil.getData(); +// String s = data1.get("tradeStatus"); + String tradeNo = resultUtil.getTradeNo(); + String s = resultUtil.getTradeStatus(); + System.out.println("ssssss"+s); if("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10){ break; } @@ -571,6 +578,7 @@ siteBooking.setStatus(1); siteBooking.setPayOrderNo(tradeNo); siteBookingService.updateById(siteBooking); + System.err.println("======完成支付"); break; } if("WAIT_BUYER_PAY".equals(s)){ @@ -602,7 +610,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); } @@ -624,8 +634,11 @@ Site site = this.getById(siteBooking.getSiteId()); String[] split = siteBooking.getTimes().split(";"); if(site!=null){ - - queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length); + if (queryMySiteVo.getIsHalf()==1) { + queryMySiteVo.setPlayPaiCoin(site.getPlayPaiCoin() * split.length); + }else { + queryMySiteVo.setPlayPaiCoin((int) (site.getPlayPaiCoinOne() * split.length)); + } } } return queryMySiteVos; @@ -644,11 +657,23 @@ SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); Date startTime = siteBooking.getStartTime(); - if(format.format(new Date()).equals(format.format(startTime))){ + if(format.format(new Date()).equals(format.format(startTime))&&siteBooking.getStatus() != 0){ return ResultUtil.error("预约当天,不能取消"); } + if(siteBooking.getStatus() == 0){ - return ResultUtil.error("请先进行支付"); +// return ResultUtil.error("请先进行支付"); + siteBooking.setStatus(5); + siteBookingService.updateById(siteBooking); + AppUser appUser = appUserClient.queryAppUser(siteBooking.getAppUserId()); + + if(null != siteBooking.getUserCouponId()&&siteBooking.getUserCouponId()!=0){ + UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(),appUser.getId())); + userCoupon.setStatus(1); + userCouponClient.updateUserCoupon(userCoupon); + } + + return ResultUtil.success(); } if(siteBooking.getStatus() != 1 && siteBooking.getStatus() != 2){ return ResultUtil.error("不能进行取消操作"); @@ -687,7 +712,7 @@ siteBooking.setCancelTime(new Date()); siteBooking.setRefundOrderNo(trade_no); siteBookingService.updateById(siteBooking); - if(null != siteBooking.getUserCouponId()){ + if(null != siteBooking.getUserCouponId()&&siteBooking.getUserCouponId()!=0){ UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(),siteBooking.getAppUserId())); userCoupon.setStatus(1); userCouponClient.updateUserCoupon(userCoupon); @@ -710,7 +735,7 @@ siteBooking.setCancelUserId(uid); siteBooking.setCancelTime(new Date()); siteBookingService.updateById(siteBooking); - if(null != siteBooking.getUserCouponId()){ + if(null != siteBooking.getUserCouponId()&&siteBooking.getUserCouponId()!=0){ UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(),appUser.getId())); userCoupon.setStatus(1); userCouponClient.updateUserCoupon(userCoupon); @@ -739,12 +764,22 @@ 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(); +// 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{ - 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(); + } } //校验优惠券 @@ -810,12 +845,26 @@ 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(); + } + //校验优惠券 Long couponId = siteBooking.getUserCouponId(); - if(null != couponId){ + if(null != couponId&&couponId!=0){ UserCoupon userCoupon = userCouponClient.queryUserCouponById(new QueryUserCouponByIdAndUserId(siteBooking.getUserCouponId(),siteBooking.getAppUserId())); Coupon coupon = couponClient.queryCouponById(userCoupon.getCouponId()); if(coupon.getType() == 1){//满减 -- Gitblit v1.7.1