| | |
| | | import com.alipay.api.DefaultAlipayClient; |
| | | import com.alipay.api.request.AlipayTradeOrderSettleRequest; |
| | | import com.alipay.api.response.AlipayTradeOrderSettleResponse; |
| | | 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; |
| | |
| | | private ISiteService siteService; |
| | | |
| | | |
| | | |
| | | // public static void main(String[] args) { |
| | | // String now = DateUtil.now().substring(11, 19); |
| | | // System.err.println(now); |
| | | // if ("17:00:00".compareTo(now) <= 0 && "19:00:00".compareTo(now) >= 0) { |
| | | // System.err.println("yes"); |
| | | // } |
| | | // |
| | | // } |
| | | |
| | | /** |
| | | * 获取场地列表 |
| | |
| | | querySiteList.setPageNum((querySiteList.getPageNum() - 1) * querySiteList.getPageSize()); |
| | | DayOfWeek dayOfWeek = LocalDate.now().getDayOfWeek(); |
| | | Map<Integer, List<TSitePrice>> priceMap = sitePriceService.lambdaQuery().eq(TSitePrice::getDayOfWeek, dayOfWeek.getValue()) |
| | | .eq(querySiteList.getTargetAudience() != null, TSitePrice::getTargetAudience, querySiteList.getTargetAudience()) |
| | | .list() |
| | | .stream().collect(Collectors.groupingBy(TSitePrice::getSiteId)); |
| | | List<QuerySiteListVo> querySiteListVos = this.baseMapper.querySiteList(querySiteList); |
| | | // 获取当前时间 只需要时分秒 格式hh:mm:ss |
| | | String now = DateUtil.now().substring(11, 19); |
| | | for (QuerySiteListVo querySiteListVo : querySiteListVos) { |
| | | querySiteListVo.setPrice(0.0); |
| | | querySiteListVo.setTimes(""); |
| | |
| | | continue; |
| | | } |
| | | List<TSitePrice> tSitePrices = priceMap.get(querySiteListVo.getId()); |
| | | if (tSitePrices!=null&& !tSitePrices.isEmpty()){ |
| | | BigDecimal bigDecimal = tSitePrices.get(0).getCashPrice(); |
| | | if (tSitePrices != null && !tSitePrices.isEmpty()) { |
| | | BigDecimal bigDecimal = BigDecimal.ZERO; |
| | | // 遍历 查询最小的价格 |
| | | for (TSitePrice tSitePrice : tSitePrices) { |
| | | if (bigDecimal.compareTo(tSitePrice.getCashPrice()) > 0) { |
| | | bigDecimal = tSitePrice.getCashPrice(); |
| | | // 当前时间再范围之内 |
| | | if (tSitePrice.getStartTime().compareTo(now) <= 0 && tSitePrice.getEndTime().compareTo(now) >= 0) { |
| | | if (tSitePrice.getCashPrice().compareTo(bigDecimal) > 0) { |
| | | bigDecimal = tSitePrice.getCashPrice(); |
| | | } |
| | | } |
| | | } |
| | | querySiteListVo.setPrice(bigDecimal.doubleValue()); |
| | | querySiteListVo.setTimes(tSitePrices.get(0).getStartTime() + "-" + tSitePrices.get(tSitePrices.size()-1).getEndTime()); |
| | | querySiteListVo.setTimes(tSitePrices.get(0).getStartTime() + "-" + tSitePrices.get(tSitePrices.size() - 1).getEndTime()); |
| | | } |
| | | Map<String, Double> distance = GeodesyUtil.getDistance(querySiteList.getLon() + "," + querySiteList.getLat(), querySiteListVo.getStoreLon() + "," + querySiteListVo.getStoreLat()); |
| | | double wgs84 = new BigDecimal(distance.get("WGS84")).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); |
| | |
| | | count++; |
| | | } |
| | | } |
| | | if (querySiteTimes.getSelectable() == 1&&end.before(now)){ |
| | | if (querySiteTimes.getSelectable() == 1 && end.before(now)) { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | if (end.before(now)){ |
| | | if (end.before(now)) { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | querySiteTimes.setSelectCount(count); |
| | | if (flag == 0 && querySiteTimes.getSelectable() == 1) { |
| | | if (flag == 0 && querySiteTimes.getSelectable() == 1) { |
| | | // 当前时间段还没有预约 |
| | | Integer walkinCapacity = site.getWalkinCapacity(); |
| | | // 计算散客预约人数和最大散客容纳数 |
| | | System.err.println("预约人数" + count); |
| | | System.err.println("最大散客容纳数" + walkinCapacity); |
| | | if (walkinCapacity <= count) { |
| | | if (targetAudience==1 && walkinCapacity!=0){ |
| | | if (targetAudience == 1 && walkinCapacity != 0) { |
| | | // 不可预约 |
| | | System.err.println("不可预约 也不能散客"); |
| | | querySiteTimes.setSelectable(0); |
| | | querySiteTimes.setIsReserve(0); |
| | | }else if (targetAudience==2){ |
| | | } else if (targetAudience == 2) { |
| | | // 不能散客 |
| | | System.err.println("不可预约 也不能散客"); |
| | | querySiteTimes.setSelectable(0); |
| | | querySiteTimes.setIsReserve(0); |
| | | }else{ |
| | | } else { |
| | | querySiteTimes.setSelectable(1); |
| | | } |
| | | }else{ |
| | | if (targetAudience==2){ |
| | | } else { |
| | | if (targetAudience == 2) { |
| | | // 散客只能预约当前时间段 |
| | | 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))) { |
| | | if (DateComparisonExample.isStringWithinTimeRange(nowStr, simpleDateFormat.parse(timePriceStart), simpleDateFormat.parse(timePriceEnd))) { |
| | | querySiteTimes.setSelectable(1); |
| | | }else{ |
| | | } else { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | } |
| | |
| | | count++; |
| | | } |
| | | } |
| | | if (querySiteTimes.getSelectable() == 1&&end.before(now)){ |
| | | if (querySiteTimes.getSelectable() == 1 && end.before(now)) { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | if (end.before(now)){ |
| | | if (end.before(now)) { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | querySiteTimes.setSelectCount(count); |
| | | if (flag == 0 && querySiteTimes.getSelectable() == 1) { |
| | | if (flag == 0 && querySiteTimes.getSelectable() == 1) { |
| | | // 当前时间段还没有预约 |
| | | Integer walkinCapacity = site.getWalkinCapacity(); |
| | | // 计算散客预约人数和最大散客容纳数 |
| | | System.err.println("预约人数" + count); |
| | | System.err.println("最大散客容纳数" + walkinCapacity); |
| | | if (walkinCapacity <= count) { |
| | | if (targetAudience==1 && walkinCapacity!=0){ |
| | | if (targetAudience == 1 && walkinCapacity != 0) { |
| | | // 不可预约 |
| | | System.err.println("不可预约 也不能散客"); |
| | | querySiteTimes.setSelectable(0); |
| | | querySiteTimes.setIsReserve(0); |
| | | }else if (targetAudience==2){ |
| | | } else if (targetAudience == 2) { |
| | | // 不能散客 |
| | | System.err.println("不可预约 也不能散客"); |
| | | querySiteTimes.setSelectable(0); |
| | | querySiteTimes.setIsReserve(0); |
| | | }else{ |
| | | } else { |
| | | querySiteTimes.setSelectable(1); |
| | | } |
| | | }else{ |
| | | if (targetAudience==2){ |
| | | } else { |
| | | if (targetAudience == 2) { |
| | | // 散客只能预约当前时间段 |
| | | 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))) { |
| | | if (DateComparisonExample.isStringWithinTimeRange(nowStr, simpleDateFormat.parse(timePriceStart), simpleDateFormat.parse(timePriceEnd))) { |
| | | querySiteTimes.setSelectable(1); |
| | | }else{ |
| | | } else { |
| | | querySiteTimes.setSelectable(0); |
| | | } |
| | | } |
| | |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 判断两个时间段是否有交集 |
| | | * |
| | | * @param start1 第一个时间段开始时间 |
| | | * @param end1 第一个时间段结束时间 |
| | | * @param end1 第一个时间段结束时间 |
| | | * @param start2 第二个时间段开始时间 |
| | | * @param end2 第二个时间段结束时间 |
| | | * @param end2 第二个时间段结束时间 |
| | | * @return 如果有交集返回true,否则返回false |
| | | */ |
| | | private boolean isTimePeriodsIntersect(String start1, String end1, String start2, String end2) { |
| | |
| | | } |
| | | if (querySiteTime.getTime().equals(time)) { |
| | | money = money.add(querySiteTime.getCashPrice()); |
| | | playCoin = playCoin+querySiteTime.getCoinPrice(); |
| | | playCoin = playCoin + querySiteTime.getCoinPrice(); |
| | | break; |
| | | } |
| | | } |
| | |
| | | siteBooking.setBooker(reservationSite.getBooker()); |
| | | siteBooking.setPhone(reservationSite.getPhone()); |
| | | siteBooking.setPayType(reservationSite.getPayType()); |
| | | if (reservationSite.getPayType()==3){ |
| | | if (reservationSite.getPayType() == 3) { |
| | | siteBooking.setPayMoney(playCoin.doubleValue()); |
| | | }else{ |
| | | } else { |
| | | siteBooking.setPayMoney(money.setScale(2, RoundingMode.HALF_EVEN).doubleValue()); |
| | | } |
| | | siteBooking.setUserCouponId(reservationSite.getCouponId()); |
| | |
| | | siteBooking.setState(1); |
| | | siteBooking.setTargetAudience(reservationSite.getTargetAudience()); |
| | | siteBooking.setInsertTime(new Date()); |
| | | siteBooking.setMoney(money+","+playCoin); |
| | | siteBooking.setMoney(money + "," + playCoin); |
| | | siteBooking.setNextName(reservationSite.getNextName()); |
| | | siteBooking.setIsHalf(reservationSite.getIsHalf()); |
| | | siteBooking.setHalfName(reservationSite.getHalfName()); |
| | | siteBookingService.save(siteBooking); |
| | | |
| | | |
| | | if (reservationSite.getPayType() == 1) {//微信支付 |
| | | if (money.compareTo(BigDecimal.ZERO)==0){ |
| | | siteBooking.setStatus(1); |
| | | siteBooking.setPayMoney(BigDecimal.ZERO.doubleValue()); |
| | | siteBooking.setPayTime(new Date()); |
| | | siteBookingService.updateById(siteBooking); |
| | | HashMap<String, String> map = new HashMap<>(); |
| | | map.put("siteBooking", siteBooking.getId().toString()); |
| | | return ResultUtil.success(map); |
| | | } |
| | | if (reservationSite.getPayType() == 1 ) {//微信支付 |
| | | ResultUtil resultUtil = weChatPaymentSite(money.setScale(2, RoundingMode.HALF_EVEN).doubleValue(), siteBooking); |
| | | return resultUtil; |
| | | } |
| | |
| | | } |
| | | if (reservationSite.getPayType() == 3) {//玩湃币支付 |
| | | return playPaiCoinPaymentSite(appUser, playCoin.doubleValue(), siteBooking); |
| | | |
| | | } |
| | | |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | } |
| | | ResultUtil alipay = payMoneyUtil.alipay(smid1, "预约场地", "预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback"); |
| | | System.out.println("预约场地----" + alipay.getCode()); |
| | | if (alipay.getCode() == 200) { |
| | | String finalSmid = smid1; |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | int num = 1; |
| | | int wait = 0; |
| | | while (num <= 10) { |
| | | int min = 5000; |
| | | wait += (min * num); |
| | | Thread.sleep(wait); |
| | | SiteBooking siteBooking = siteBookingService.getById(id); |
| | | if (siteBooking.getStatus() != 0) { |
| | | break; |
| | | } |
| | | 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 = resultUtil.getTradeNo(); |
| | | String s = resultUtil.getTradeStatus(); |
| | | System.out.println("ssssss" + s); |
| | | if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) { |
| | | break; |
| | | } |
| | | if ("TRADE_SUCCESS".equals(s)) { |
| | | siteBooking.setPayTime(new Date()); |
| | | siteBooking.setStatus(1); |
| | | siteBooking.setPayOrderNo(tradeNo); |
| | | siteBookingService.updateById(siteBooking); |
| | | System.err.println("======完成支付"); |
| | | Thread.sleep(30000); |
| | | payMoneyUtil.confirm(finalSmid, code, tradeNo, paymentPrice.toString()); |
| | | break; |
| | | } |
| | | if ("WAIT_BUYER_PAY".equals(s)) { |
| | | num++; |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }).start(); |
| | | } |
| | | return alipay; |
| | | } |
| | | |
| | |
| | | pageNo = (pageNo - 1) * pageSize; |
| | | List<QueryMySiteVo> queryMySiteVos = this.baseMapper.queryMySite(uid, status, pageNo, pageSize); |
| | | for (QueryMySiteVo queryMySiteVo : queryMySiteVos) { |
| | | if (queryMySiteVo.getTargetAudience()==null){ |
| | | if (queryMySiteVo.getTargetAudience() == null) { |
| | | queryMySiteVo.setTargetAudience(1); |
| | | } |
| | | SiteBooking siteBooking = siteBookingService.getById(queryMySiteVo.getId()); |
| | |
| | | // } |
| | | if (querySiteTime.getTime().equals(time)) { |
| | | money = money.add(querySiteTime.getCashPrice()); |
| | | playCoin = playCoin+querySiteTime.getCoinPrice(); |
| | | playCoin = playCoin + querySiteTime.getCoinPrice(); |
| | | break; |
| | | } |
| | | } |
| | |
| | | if (siteBooking.getTargetAudience() == 1 && format.format(new Date()).equals(format.format(startTime)) && siteBooking.getStatus() != 0) { |
| | | return ResultUtil.error("预约当天,不能取消"); |
| | | } |
| | | if (siteBooking.getTargetAudience() == 2){ |
| | | if (siteBooking.getTargetAudience() == 2) { |
| | | Date date = new Date(); |
| | | if (siteBooking.getEndTime().before( date)){ |
| | | if (siteBooking.getEndTime().before(date)) { |
| | | return ResultUtil.error("已过期,不能取消"); |
| | | } |
| | | } |
| | |
| | | String timePriceEnd = day + " " + querySiteTime.getTime().split("-")[1]; |
| | | if (querySiteTime.getTime().equals(time)) { |
| | | money = money.add(querySiteTime.getCashPrice()); |
| | | playCoin = playCoin+querySiteTime.getCoinPrice(); |
| | | playCoin = playCoin + querySiteTime.getCoinPrice(); |
| | | break; |
| | | } |
| | | } |
| | |
| | | siteBooking.setOrderNo(sdf.format(new Date()) + UUIDUtil.getNumberRandom(3)); |
| | | |
| | | siteBooking.setPayType(payType); |
| | | if (payType==3){ |
| | | if (payType == 3) { |
| | | siteBooking.setPayMoney(playCoin.doubleValue()); |
| | | }else{ |
| | | } else { |
| | | siteBooking.setPayMoney(money.doubleValue()); |
| | | } |
| | | if (payType == 3) { |
| | |
| | | String timePriceEnd = day + " " + querySiteTime.getTime().split("-")[1]; |
| | | if (querySiteTime.getTime().equals(time)) { |
| | | money = money.add(querySiteTime.getCashPrice()); |
| | | playCoin = playCoin+querySiteTime.getCoinPrice(); |
| | | playCoin = playCoin + querySiteTime.getCoinPrice(); |
| | | break; |
| | | } |
| | | } |
| | |
| | | money = money.subtract(new BigDecimal(num1)).setScale(2, RoundingMode.HALF_EVEN); |
| | | } |
| | | } |
| | | switch (siteBooking.getPayType()){ |
| | | switch (siteBooking.getPayType()) { |
| | | case 1: |
| | | map.put("cash", money.doubleValue()); |
| | | break; |