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); /** * 后台退款 远程调用 */ 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("不允许操作超级管理员用户"); } } 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); } 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); } 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,11 +101,14 @@ 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(); 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){ //购物订单 @@ -120,6 +129,7 @@ writer.println("success"); writer.flush(); writer.close(); } } catch (Exception e) { e.printStackTrace(); } @@ -128,6 +138,38 @@ 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; } }