Kaynağa Gözat

2023年3月2日12:56:08

纪新园 2 yıl önce
ebeveyn
işleme
e337c3202b

+ 5 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ITongLianPaymentClient.java

@@ -18,8 +18,13 @@ import java.util.List;
 public interface ITongLianPaymentClient {
 	String API_PREFIX = "/parameters";
 	String GET_PARAMETERS_ONE = API_PREFIX + "/getParametersOne";
+	String GET_PARAMETERS_DETAILS = API_PREFIX + "/getParametersDetails";
 
 	@PostMapping(GET_PARAMETERS_ONE)
 	Parameters getParametersOne();
 
+
+	@PostMapping(GET_PARAMETERS_DETAILS)
+	Parameters getParametersDetails(@RequestBody Parameters parameters);
+
 }

+ 11 - 0
blade-service/blade-client/src/main/java/org/springblade/client/tonglianPayment/feign/TongLianPaymentClient.java

@@ -1,6 +1,7 @@
 package org.springblade.client.tonglianPayment.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.Parameters;
 import org.springblade.client.feign.ITongLianPaymentClient;
@@ -25,4 +26,14 @@ public class TongLianPaymentClient implements ITongLianPaymentClient {
 		lambdaQueryWrapper.eq(Parameters::getIsDeleted, 0).eq(Parameters::getTenantId, AuthUtil.getTenantId()).eq(Parameters::getStatus, "1");
 		return parametersService.getOne(lambdaQueryWrapper);
 	}
+
+
+	@Override
+	public Parameters getParametersDetails(Parameters parameters) {
+		LambdaQueryWrapper<Parameters> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Parameters::getIsDeleted, 0).eq(Parameters::getStatus, "1")
+			.eq(ObjectUtils.isNotNull(parameters.getCusId()), Parameters::getCusId, parameters.getCusId())
+			.eq(ObjectUtils.isNotNull(parameters.getAppId()), Parameters::getAppId, parameters.getAppId());
+		return parametersService.getOne(lambdaQueryWrapper);
+	}
 }

+ 32 - 3
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java

@@ -8,9 +8,11 @@ import lombok.AllArgsConstructor;
 import org.jetbrains.annotations.NotNull;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.entity.Parameters;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IFeesDescClient;
 import org.springblade.client.feign.ISerialClient;
+import org.springblade.client.feign.ITongLianPaymentClient;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -79,6 +81,8 @@ public class TongLianPaymentController extends BladeController {
 
 	private final @NotNull IOrderItemsClient orderItemsClient;
 
+	private final @NotNull ITongLianPaymentClient tongLianPaymentClient;
+
 
 	/**
 	 * 获取支付的请求参数
@@ -116,17 +120,35 @@ public class TongLianPaymentController extends BladeController {
 			if (isSign) {
 				String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
 				if (Objects.equals(trxstatus, "0000")) {
+
 					wechatMark.setSrcBillNo(AnalysisMapUtils.getString("cusorderid", params));
 					wechatMark.setSerialNumber(AnalysisMapUtils.getString("trxid", params));
 					wechatMark.setAmount(new BigDecimal(Objects.requireNonNull(AnalysisMapUtils.getString("trxamt", params))));
+
 					//支付成功业务处理
 					Order order = new Order();
 					order.setSysNo(AnalysisMapUtils.getString("cusorderid", params));
+
+					Parameters parameters = new Parameters();
+					parameters.setAppId(AnalysisMapUtils.getString("cusid", params));
+					parameters.setCusId(AnalysisMapUtils.getString("appid", params));
+					Parameters parametersDetails = tongLianPaymentClient.getParametersDetails(parameters);
+					if (ObjectUtils.isNotNull(parametersDetails)){
+						wechatMark.setTenantId(parametersDetails.getTenantId());
+						order.setTenantId(parametersDetails.getTenantId());
+					}else{
+						wechatMark.setTenantId("000000");
+						order.setTenantId("000000");
+						wechatMark.setRemark("未找到租户,异常支付");
+					}
+
 					Order selectOrder = orderDescClient.getByOrder(order);
 					if (ObjectUtils.isNotNull(selectOrder)) {
+						System.out.println("第一步");
 						selectOrder.setStatus(2);
 						selectOrder.setConfirmStatus(2);
 						if (ObjectUtils.isNotNull(selectOrder) && ObjectUtils.isNotNull(selectOrder.getDebitAmount())) {
+							System.out.println("第二步");
 							List<Settlement> settlementList = new ArrayList<>();
 							Settlement settlement = new Settlement();
 							if ("XS".equals(selectOrder.getBillType())) {
@@ -222,20 +244,24 @@ public class TongLianPaymentController extends BladeController {
 								amount = amount.subtract(receivedAmount);
 								selectOrder.setSettlmentAmount(receivedAmount);
 								selectOrder.setBalanceAmount(amount);
-								orderDescClient.updateOrder(selectOrder);
 							} else {
 								wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,修改单据已收账款失败");
 								wechatMark.setStatus(2);
 							}
+							orderDescClient.updateOrder(selectOrder);
+
 							//生成账单
 							R paymentApply = financeClient.paymentApplyParts(applyDTO);
 							if (!paymentApply.isSuccess()) {
 								wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,账单结算失败!原因:" + paymentApply.getMsg());
 								wechatMark.setStatus(2);
+							} else {
+								System.out.println("第三步");
 							}
 						} else {
 							wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到收款信息,账单结算失败!");
 							wechatMark.setStatus(2);
+							System.out.println("第二步报错");
 						}
 
 						R<List<OrderItems>> res = orderItemsClient.selectList(selectOrder.getId());
@@ -284,7 +310,7 @@ public class TongLianPaymentController extends BladeController {
 						}
 						orderNew.setOrderNo((String) clientBillNo.getData());
 						orderDescClient.save(orderNew);
-
+						System.out.println("第四部步:" + orderNew.getId());
 						// 保存订单明细
 						if (CollectionUtils.isNotEmpty(res.getData())) {
 							for (OrderItems orderItems : res.getData()) {
@@ -330,13 +356,16 @@ public class TongLianPaymentController extends BladeController {
 								orderItems.setPurchaseCost(orderItems.getPurchaseCost());
 								orderItemsClient.submit(orderItems);
 							}
+							System.out.println("第五部步明细保存:");
 						} else {
 							wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到单据明细信息");
 							wechatMark.setStatus(2);
+							System.out.println("第五部步明细保存失败");
 						}
 					} else {
 						wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到单据信息,账单结算失败!");
 						wechatMark.setStatus(2);
+						System.out.println("第一部步失败");
 					}
 					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付成功");
 					wechatMark.setStatus(1);
@@ -344,7 +373,7 @@ public class TongLianPaymentController extends BladeController {
 					response.getWriter().write(AnalysisMapUtils.setXML("SUCCESS", "OK"));
 				} else {
 					//订单编号
-					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付失败!"+"原因:"+AnalysisMapUtils.getString("errmsg", params));
+					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付失败!" + "原因:" + AnalysisMapUtils.getString("errmsg", params));
 					wechatMark.setStatus(2);
 					wechatMarkService.save(wechatMark);
 					response.getWriter().write(AnalysisMapUtils.setXML("error", "OK"));

+ 47 - 9
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/HttpConnectionUtil.java

@@ -1,29 +1,36 @@
 package org.springblade.pay.tonglianPayment.utils;
 
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.SSLSession;
+import javax.net.ssl.*;
 import java.io.ByteArrayOutputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLEncoder;
+import java.net.*;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
 import java.util.Map;
 
 public class HttpConnectionUtil {
 	private HttpURLConnection conn;
 	private String connectUrl;
 
+	final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
+		public boolean verify(String hostname, SSLSession session) {
+			return true;
+		}
+	};
+
 	public HttpConnectionUtil(String connectUrl) {
 		this.connectUrl = connectUrl;
 	}
 
 	public void init() throws Exception {
 		URL url = new URL(connectUrl);
-		System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");
+//		HttpsURLConnection.setDefaultHostnameVerifier((hostname, sslsession) -> true);
+//		HttpsURLConnection.setDefaultSSLSocketFactory(createSSLSocketFactory());
+
+//		System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");
+		trustAllHosts();
 		HostnameVerifier hv = new HostnameVerifier() {
 			public boolean verify(String urlHostName, SSLSession session) {
 				return urlHostName.equals(session.getPeerHost());
@@ -37,7 +44,8 @@ public class HttpConnectionUtil {
 		conn.setConnectTimeout(30000);
 		if (conn instanceof HttpsURLConnection) {
 			HttpsURLConnection httpsConn = (HttpsURLConnection) conn;
-			httpsConn.setSSLSocketFactory(SSLUtil.getInstance().getSSLSocketFactory());
+			httpsConn.setHostnameVerifier(DO_NOT_VERIFY);
+//			httpsConn.setSSLSocketFactory(SSLUtil.getInstance().getSSLSocketFactory());
 		} else if (conn instanceof HttpURLConnection) {
 			HttpURLConnection httpConn = (HttpURLConnection) conn;
 		} else {
@@ -83,12 +91,15 @@ public class HttpConnectionUtil {
 	}
 
 	public byte[] postParams(String message, boolean readreturn) throws IOException {
+		System.out.println("参数2:" + message + "=====");
+		System.out.println("参数2:"+conn.getOutputStream());
 		DataOutputStream out = new DataOutputStream(conn.getOutputStream());
 		out.write(message.getBytes("UTF-8"));
 		out.close();
 		if (readreturn) {
 			return readBytesFromStream(conn.getInputStream());
 		} else {
+			System.out.println("参数2:" + null);
 			return null;
 		}
 	}
@@ -118,4 +129,31 @@ public class HttpConnectionUtil {
 		return conn;
 	}
 
+	/**
+	 * Trust every server - dont check for any certificate
+	 */
+	private static void trustAllHosts() {
+		final String TAG = "trustAllHosts";
+		// Create a trust manager that does not validate certificate chains
+		TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
+			public X509Certificate[] getAcceptedIssuers() {
+				return new X509Certificate[]{};
+			}
+
+			public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+			}
+
+			public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+			}
+		}};
+		// Install the all-trusting trust manager
+		try {
+			SSLContext sc = SSLContext.getInstance("TLS");
+			sc.init(null, trustAllCerts, new java.security.SecureRandom());
+			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 }

+ 63 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SslUtils.java

@@ -0,0 +1,63 @@
+package org.springblade.pay.tonglianPayment.utils;
+
+
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+public class SslUtils {
+
+	public static void trustAllHttpsCertificates() throws Exception {
+		TrustManager[] trustAllCerts = new TrustManager[1];
+		TrustManager tm = new miTM();
+		trustAllCerts[0] = tm;
+		SSLContext sc = SSLContext.getInstance("SSL");
+		sc.init(null, trustAllCerts, null);
+		HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+	}
+
+	static class miTM implements TrustManager,X509TrustManager {
+		public X509Certificate[] getAcceptedIssuers() {
+			return null;
+		}
+
+		public boolean isServerTrusted(X509Certificate[] certs) {
+			return true;
+		}
+
+		public boolean isClientTrusted(X509Certificate[] certs) {
+			return true;
+		}
+
+		public void checkServerTrusted(X509Certificate[] certs, String authType)
+			throws CertificateException {
+			return;
+		}
+
+		public void checkClientTrusted(X509Certificate[] certs, String authType)
+			throws CertificateException {
+			return;
+		}
+	}
+
+	/**
+	 * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
+	 * @throws Exception
+	 */
+	public static void ignoreSsl() throws Exception{
+		HostnameVerifier hv = new HostnameVerifier() {
+			public boolean verify(String urlHostName, SSLSession session) {
+				return true;
+			}
+		};
+		trustAllHttpsCertificates();
+		HttpsURLConnection.setDefaultHostnameVerifier(hv);
+	}
+
+}

+ 6 - 6
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybConstants.java

@@ -18,20 +18,20 @@ public class SybConstants {
 	public static final String SYB_SM2TLPUBKEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEI3qTzNbHT92/36VnplrUNebg3nMiY41ysI6JU8iz73mOYy2SlcnA6bGRqfelSeJmns5brkEb1vMeLNT9UvS+pw==";
 
 	//测试环境调试参数
-	public static final String SYB_ORGID_TEST = "";
+	/*public static final String SYB_ORGID_TEST = "";
 	public static final String SYB_CUSID_TEST = "990581007426001";
 	public static final String SYB_APPID_TEST = "00000051";
 	public static final String SYB_MD5_APPKEY_TEST = "allinpay888";
 	public static final String SYB_APIURL_TEST = "https://test.allinpaygd.com/apiweb/unitorder";//生产环境
 	public static final String SIGN_TYPE_TEST = "MD5";
-	/**商户RSA私钥,用于向通联发起请求前进行签名**/
+	*//**商户RSA私钥,用于向通联发起请求前进行签名**//*
 	public static final String SYB_RSACUSPRIKEY_TEST = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAK5aIo+E1eyWwEIgMB8ZEZRAaWjSAglmfKVhzy8N1eLjAlqPjJgOCqXGEYt/r61AyIjCCJiYVDTHzcqstmbBU7HKpYjTsquCLjRWcL/fhMwMGBSg2bP5mqw5locSOz1gtRujmd3kZo9OIJuWtfG2+wgPPdKUdGZS+5K8WtWCF4z1AgMBAAECgYAPvvqvkPzb9tpqrmsCJ/qvM6kBazP9Ytjfe8ehFYQLT1qrUJsPMXdzNMHpYhD82eSyeymZFGrIcIIMq4/2lD+pYOMQTMGGjoVb2wnQhZFqPdgjXgOQ90E43X69jD3p5F8CuKVNa13I4l3iyfzlVIL780JPdJdug7yKEFdSeOQZUQJBAONlFpIqz87pbnwzfgO5kRTbbI7DcyObb8OEeCK3VlGB3r9P4NoMEDaXm+HnIdv53gnFq+xgbREWUt2nFq9dSUUCQQDESOIdSvIBc3KQTYR+cnlQTH0SOvm0Tlx4KekBCLxTFAFyBqnOBLdVyQb6Z1wxGz855AjnNbHy1rFhUYQ6hPfxAkAIRZUcnBITJMqwGe9rk0SDzbeVOebmVLEsG5WDLcgmDuNbcjxrsiSk178D6LSCnARHtrkaUCenh3hcN8fLeUlBAkABNP2G9pYEYkRbFM7yxBtw3feK7Cfq7uxspL1VD0uxKxdTLy1OIgNKmMDdO1N6zdMWtQtE+LSObLmMgqbQgU7RAkBFX5kl4+B3k+/aCYB/ndqd1nQIr4SNAtLFJDtlW2xah9W2lQL/7KQDT4o4dUMY51m7Bu61SAmKtralv7Hf25yf";
-	/**通联平台RSA公钥,用于请求返回或者通联通知的验签**/
+	*//**通联平台RSA公钥,用于请求返回或者通联通知的验签**//*
 	public static final String SYB_RSATLPUBKEY_TEST = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYXfu4b7xgDSmEGQpQ8Sn3RzFgl5CE4gL4TbYrND4FtCYOrvbgLijkdFgIrVVWi2hUW4K0PwBsmlYhXcbR+JSmqv9zviVXZiym0lK3glJGVCN86r9EPvNTusZZPm40TOEKMVENSYaUjCxZ7JzeZDfQ4WCeQQr2xirqn6LdJjpZ5wIDAQAB";
 
-	/**商户sm2私钥,用于向通联发起请求前进行签名**/
+	*//**商户sm2私钥,用于向通联发起请求前进行签名**//*
 	public static final String SYB_SM2PPRIVATEKEY_TEST = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgjj4Rk+b0YjwO+UwXofnHf4bK+kaaY5Btkd8nMP2VimmgCgYIKoEcz1UBgi2hRANCAAQqlALW4qGC3bP1x3wo5QsKxaCMEZJ2ODTTwOQ+d8UGU7GoK/y/WMBQWf5upMnFU06p5FxGooXYYoBtldgm03hq";
-	/**通联平台sm2公钥,用于请求返回或者通联通知的验签**/
+	*//**通联平台sm2公钥,用于请求返回或者通联通知的验签**//*
 	public static final String SYB_SM2TLPUBKEY_TEST = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE/BnA8BawehBtH0ksPyayo4pmzL/u1FQ2sZcqwOp6bjVqQX4tjo930QAvHZPJ2eez8sCz/RYghcqv4LvMq+kloQ==";
-
+*/
 }

+ 18 - 18
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybPayService.java

@@ -118,15 +118,15 @@ public class SybPayService {
 		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID))
 			params.put("orgid", SybConstants.SYB_ORGID);
 		String url = "";
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("cusid", SybConstants.SYB_CUSID_TEST);
 			params.put("appid", SybConstants.SYB_APPID_TEST);
 			url = SybConstants.SYB_APIURL_TEST;
-		} else {
+		} else {*/
 			params.put("cusid", SybConstants.SYB_CUSID);
 			params.put("appid", SybConstants.SYB_APPID);
 			url = SybConstants.SYB_APIURL;
-		}
+//		}
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/cancel");
 		http.init();
 		params.put("version", "11");
@@ -135,7 +135,7 @@ public class SybPayService {
 		params.put("oldtrxid", oldtrxid);
 		params.put("oldreqsn", oldreqsn);
 		params.put("randomstr", SybUtil.getValidatecode(8));
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("signtype", SybConstants.SIGN_TYPE_TEST);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE_TEST.equals("RSA"))
@@ -145,7 +145,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY_TEST;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE_TEST));
-		} else {
+		} else {*/
 			params.put("signtype", SybConstants.SIGN_TYPE);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE.equals("RSA"))
@@ -155,7 +155,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE));
-		}
+//		}
 		byte[] bys = http.postParams(params, true);
 		String result = new String(bys, "UTF-8");
 		Map<String, String> map = handleResult(result);
@@ -191,22 +191,22 @@ public class SybPayService {
 		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID))
 			params.put("orgid", SybConstants.SYB_ORGID);
 		String url = "";
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("cusid", SybConstants.SYB_CUSID_TEST);
 			params.put("appid", SybConstants.SYB_APPID_TEST);
 			url = SybConstants.SYB_APIURL_TEST;
-		} else {
+		} else {*/
 			params.put("cusid", SybConstants.SYB_CUSID);
 			params.put("appid", SybConstants.SYB_APPID);
 			url = SybConstants.SYB_APIURL;
-		}
+//		}
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/query");
 		http.init();
 		params.put("version", "11");
 		params.put("reqsn", reqsn);
 		params.put("trxid", trxid);
 		params.put("randomstr", SybUtil.getValidatecode(8));
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("signtype", SybConstants.SIGN_TYPE_TEST);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE_TEST.equals("RSA"))
@@ -216,7 +216,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY_TEST;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE_TEST));
-		} else {
+		} else {*/
 			params.put("signtype", SybConstants.SIGN_TYPE);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE.equals("RSA"))
@@ -226,7 +226,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE));
-		}
+//		}
 		byte[] bys = http.postParams(params, true);
 		String result = new String(bys, "UTF-8");
 		Map<String, String> map = handleResult(result);
@@ -270,15 +270,15 @@ public class SybPayService {
 		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID))
 			params.put("orgid", SybConstants.SYB_ORGID);
 		String url = "";
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+		/*if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("cusid", SybConstants.SYB_CUSID_TEST);
 			params.put("appid", SybConstants.SYB_APPID_TEST);
 			url = SybConstants.SYB_APIURL_TEST;
-		} else {
+		} else {*/
 			params.put("cusid", SybConstants.SYB_CUSID);
 			params.put("appid", SybConstants.SYB_APPID);
 			url = SybConstants.SYB_APIURL;
-		}
+//		}
 		HttpConnectionUtil http = new HttpConnectionUtil(url + "/scanqrpay");
 		http.init();
 		params.put("version", "11");
@@ -290,7 +290,7 @@ public class SybPayService {
 		params.put("authcode", authcode);
 		params.put("limit_pay", limit_pay);
 		params.put("asinfo", asinfo);
-		if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
+	/*	if (ParamCache.getValue(PAYMENT_PARAMETER).equals("0")) {
 			params.put("signtype", SybConstants.SIGN_TYPE_TEST);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE_TEST.equals("RSA"))
@@ -300,7 +300,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY_TEST;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE_TEST));
-		} else {
+		} else {*/
 			params.put("signtype", SybConstants.SIGN_TYPE);
 			String appkey = "";
 			if (SybConstants.SIGN_TYPE.equals("RSA"))
@@ -310,7 +310,7 @@ public class SybPayService {
 			else
 				appkey = SybConstants.SYB_MD5_APPKEY;
 			params.put("sign", SybUtil.unionSign(params, appkey, SybConstants.SIGN_TYPE));
-		}
+//		}
 		byte[] bys = http.postParams(params, true);
 		String result = new String(bys, "UTF-8");
 		Map<String, String> map = handleResult(result);

+ 5 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -104,7 +104,11 @@ public class OrderDescClient implements IOrderDescClient {
 	@PostMapping(GET_BY_ORDER_NO)
 	public Order getByOrder(Order order) {
 		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
+		if (ObjectUtils.isNotNull(order)){
+			orderLambdaQueryWrapper.eq(Order::getTenantId, order.getTenantId());
+		}else{
+			orderLambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId());
+		}
 		orderLambdaQueryWrapper.eq(Order::getIsDeleted, 0);
 		orderLambdaQueryWrapper.eq(ObjectUtils.isNotNull(order.getOrderNo()), Order::getOrderNo, order.getOrderNo());
 		orderLambdaQueryWrapper.eq(ObjectUtils.isNotNull(order.getSysNo()), Order::getSysNo, order.getSysNo());

+ 13 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -2085,6 +2085,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				//修改明细状态
 				orderItemsService.updateByPId(id, isIssue);
+				//获取单据明细
+				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				orderItemsLambdaQueryWrapper
+					.eq(OrderItems::getTenantId, AuthUtil.getTenantId())
+					.eq(OrderItems::getPid, order.getId())
+					.eq(OrderItems::getIsDeleted, 0);
+				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+				for (OrderItems orderItem : orderItems) {
+					if (ObjectUtils.isNotNull(orderItem.getIsIssue()) && Integer.parseInt(orderItem.getIsIssue()) > 3) {
+						throw new SecurityException("已存在出库单,撤回失败");
+					}
+				}
 			} else {
 				//获取单据明细
 				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -2108,7 +2120,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				for (OrderItems item : orderItems) {
 					try {
 						//创建文件夹
-						File packageFile = new File("/home/minio/file/"+AuthUtil.getTenantId()+"-bladex/upload");
+						File packageFile = new File("/home/minio/file/" + AuthUtil.getTenantId() + "-bladex/upload");
 						//文件夹是否创建成功
 						if (!packageFile.getParentFile().exists()) {
 							boolean a = packageFile.mkdirs();