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