From 6851a3e83b5bcf27688688660073cb21bcc61eb6 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 07 十一月 2024 11:56:30 +0800 Subject: [PATCH] 提交代码 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 11 +-- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java | 26 +++++--- ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java | 90 ++++++++++++++++++++++-------- ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java | 7 +- ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 7 ++ 5 files changed, 96 insertions(+), 45 deletions(-) diff --git a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java index 496217c..357bdc9 100644 --- a/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java +++ b/ruoyi-api/ruoyi-api-payment/src/main/java/com/ruoyi/payment/api/feignClient/AliPaymentClient.java @@ -11,6 +11,7 @@ import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; /** * @author zhibing.pu @@ -26,7 +27,7 @@ * @return */ @PostMapping("/ali/payment") - R<AliPaymentResp> payment(AliPaymentReq req); + R<AliPaymentResp> payment(@RequestBody AliPaymentReq req); /** @@ -35,14 +36,14 @@ * @return */ @PostMapping("/ali/query") - R<AliQueryOrder> query(String outTradeNo); + R<AliQueryOrder> query(@RequestParam("outTradeNo") String outTradeNo); /** * 关闭订单 * @param outTradeNo */ @PostMapping("/ali/close") - void close(String outTradeNo); + void close(@RequestParam("outTradeNo") String outTradeNo); /** * 后台退款 远程调用 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 16f9f89..673d496 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -13,6 +13,7 @@ import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.model.Site; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.feignClient.RoleSiteClient; import com.ruoyi.other.api.feignClient.UserSiteClient; import com.ruoyi.system.api.query.ChangeUserQuery; @@ -89,6 +90,9 @@ @Resource private ISysRoleService sysRoleService; + + @Resource + private TokenService tokenService; /** @@ -235,7 +239,8 @@ */ @Override public void checkUserAllowed(SysUser user) { - if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { + Long userid = tokenService.getLoginUser().getUserid(); + if (StringUtils.isNotNull(user.getUserId()) && !userid.equals(user.getUserId()) && user.isAdmin()) { throw new ServiceException("不允许操作超级管理员用户"); } } diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java index 613a09e..75440f0 100644 --- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/barrierGate/server/ParkingOrderService.java @@ -108,18 +108,12 @@ TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); parkingRecord.setPhone(appUser.getPhone()); parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration()); - //超时占位费 - long out = parkingRecord.getOutParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond(); - long in = parkingRecord.getInParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond(); - long m = (out - in) / 60; + long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration(); parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO); }else{ parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration()); - //超时占位费 - long out = parkingRecord.getOutParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond(); - long in = parkingRecord.getInParkingTime().atZone(ZoneId.systemDefault()).toEpochSecond(); - long m = (out - in) / 60; + long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration(); parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO); } } @@ -170,9 +164,8 @@ query.setLicensePlate(order.getPlatenumber()); query.setStatus(1); TParkingRecord parkingRecord = parkingRecordClient.getParkingRecord(query).getData(); - LocalDateTime parse = LocalDateTime.parse(order.getLeavetime(), DateTimeFormatter.ISO_DATE_TIME); - parse = parse.plusHours(8); - parkingRecord.setOutParkingTime(parse); + TParkingLot parkingLot = parkingLotClient.getParkingLotByAppKey(order.getAppkey()).getData(); + parkingRecord.setOutParkingTime(LocalDateTime.now()); parkingRecord.setParkingDuration(Integer.valueOf(order.getLongTime())); parkingRecord.setOrderAmount(new BigDecimal(order.getMoney())); parkingRecord.setPayment(new BigDecimal(order.getMoney())); @@ -188,8 +181,19 @@ TChargingOrder chargingOrder = data.get(0); parkingRecord.setAppUserId(chargingOrder.getAppUserId()); parkingRecord.setChargingOrderId(chargingOrder.getId()); + TAppUser appUser = appUserClient.getUserById(chargingOrder.getAppUserId()).getData(); + parkingRecord.setPhone(appUser.getPhone()); + parkingRecord.setFreeDuration(parkingLot.getChargeFreeDuration()); + long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration(); + parkingRecord.setTimeoutAmount(m > parkingLot.getChargeFreeDuration() ? new BigDecimal(m - parkingLot.getChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO); + + }else{ + parkingRecord.setFreeDuration(parkingLot.getNonChargeFreeDuration()); + long m = parkingRecord.getParkingDuration() - parkingRecord.getFreeDuration(); + parkingRecord.setTimeoutAmount(m > parkingLot.getNonChargeFreeDuration() ? new BigDecimal(m - parkingLot.getNonChargeFreeDuration()).multiply(parkingLot.getChargeRate()) : BigDecimal.ZERO); } } + parkingRecord.setFreeAmount(parkingRecord.getOrderAmount().subtract(parkingRecord.getPayment())); parkingRecordClient.updateParkingRecord(parkingRecord); } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index cf56997..b0d5ed6 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -882,8 +882,7 @@ dto.setRefundReason("充电失败,取消充电订单"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); - AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); + AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null); if(success.isSuccess()){ chargingOrderRefundService.save(chargingOrderRefund); } @@ -959,10 +958,11 @@ chargingDetails.setChargedTime(String.format("%02d", h) + ":" + String.format("%02d", m)); } if(null != data && null != one.getAppUserCarId()){ - TAppUserCar appUserCar = appUserCarClient.getCarByIds(Arrays.asList(one.getAppUserCarId())).getData().get(0); + TAppUserCar appUserCar = appUserCarClient.getCarById(one.getAppUserCarId().toString()).getData(); // 续航 = 续航里程 * soc BigDecimal multiply = new BigDecimal(data.getSoc() / 100).multiply(new BigDecimal(appUserCar.getEndurance())); - chargingDetails.setEndurance(multiply); + chargingDetails.setEndurance(multiply.setScale(2, RoundingMode.HALF_EVEN)); + System.err.println("续航--" + multiply); } return chargingDetails; } @@ -2180,8 +2180,7 @@ dto.setRefundReason("充电完成退款"); RefundResp resp = aliPaymentClient.refund(dto).getData(); if(null != resp){ - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-DDTHH:mm:ss+TIMEZONE"); - AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); + AjaxResult success = chargingOrderStartupFailureWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", null); if(success.isSuccess()){ chargingOrderRefundService.save(chargingOrderRefund); } diff --git a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java index 886a184..0d927f1 100644 --- a/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java +++ b/ruoyi-service/ruoyi-payment/src/main/java/com/ruoyi/payment/controller/AliPayController.java @@ -1,5 +1,7 @@ package com.ruoyi.payment.controller; +import com.alipay.api.AlipayApiException; +import com.alipay.api.internal.util.AlipaySignature; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.order.api.feignClient.ChargingOrderClient; @@ -14,8 +16,12 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; /** * @author zhibing.pu @@ -95,39 +101,75 @@ private ChargingOrderClient chargingOrderClient; @ResponseBody @PostMapping(value = "/callBack") - public void chargingOrderALICallback(AliQueryOrder aliQueryOrder, HttpServletResponse response) { + public void chargingOrderALICallback(HttpServletRequest request, HttpServletResponse response) { try { - String out_trade_no = aliQueryOrder.getOutTradeNo(); - String transaction_id = aliQueryOrder.getTradeNo(); - String attach = aliQueryOrder.getPassbackParams(); - String substring = out_trade_no.substring(0, 2); - switch (substring){ - //购物订单 - case "GW": - R r = orderClient.callBack(out_trade_no, transaction_id); - System.err.println("----收到购物回调"); - break; - case "HY": - orderClient.vipCallBack(out_trade_no,transaction_id); - System.err.println("----收到会员回调"); - break; - case "CD": - chargingOrderClient.chargingOrderALICallback(out_trade_no, transaction_id, attach); - System.err.println("----充电支付回调"); - break; + Map<String, String> callback = alipayCallback(request); + if(null != callback){ + String out_trade_no = callback.get("out_trade_no"); + String attach = callback.get("subject"); + String total_amount = callback.get("total_amount"); + String transaction_id = callback.get("trade_no"); + String substring = out_trade_no.substring(0, 2); + switch (substring){ + //购物订单 + case "GW": + R r = orderClient.callBack(out_trade_no, transaction_id); + System.err.println("----收到购物回调"); + break; + case "HY": + orderClient.vipCallBack(out_trade_no,transaction_id); + System.err.println("----收到会员回调"); + break; + case "CD": + chargingOrderClient.chargingOrderALICallback(out_trade_no, transaction_id, attach); + System.err.println("----充电支付回调"); + break; + } + PrintWriter writer = response.getWriter(); + writer.println("success"); + writer.flush(); + writer.close(); } - PrintWriter writer = response.getWriter(); - writer.println("success"); - writer.flush(); - writer.close(); } catch (Exception e) { e.printStackTrace(); } } - + public Map<String, String> alipayCallback(HttpServletRequest request){ + Map<String,String> params = new HashMap<String,String>(); + Map requestParams = request.getParameterMap(); + for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { + String name = (String) iter.next(); + String[] values = (String[]) requestParams.get(name); + String valueStr = ""; + for (int i = 0; i < values.length; i++) { + valueStr = (i == values.length - 1) ? valueStr + values[i] + : valueStr + values[i] + ","; + } + params.put(name, valueStr); + } + try { + boolean flag = AlipaySignature.rsaCheckV1(params, aliProperties.getAlipayPublicKey(), "UTF-8","RSA2"); + if(flag){ + Map<String, String> map = new HashMap<>(); + String out_trade_no = params.get("out_trade_no"); + String subject = params.get("subject"); + String total_amount = params.get("total_amount"); + String trade_no = params.get("trade_no"); + map.put("out_trade_no", out_trade_no);//商家订单号 + map.put("subject", subject); + map.put("total_amount", total_amount); + map.put("trade_no", trade_no);//支付宝交易号 + return map; + } + + } catch (AlipayApiException e) { + e.printStackTrace(); + } + return null; + } } -- Gitblit v1.7.1