Browse Source

2023年9月20日17:23:40

纪新园 2 years ago
parent
commit
bec4116b58
19 changed files with 172 additions and 66 deletions
  1. 4 4
      blade-cargo-api/pom.xml
  2. 2 0
      blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/dto/PaymentDTO.java
  3. 6 1
      blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/entity/Parameters.java
  4. 14 4
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java
  5. 1 1
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/method/ApiTestV2.java
  6. 2 2
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  7. 2 1
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybConstants.java
  8. 39 19
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybPayService.java
  9. 8 2
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybUtil.java
  10. 3 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  11. 1 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/check/service/impl/AuditProecessServiceImpl.java
  12. 3 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsStatisticsController.java
  13. 8 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml
  14. 9 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java
  15. 33 12
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  16. 7 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.xml
  17. 17 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  18. 10 8
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/payMethod/PayServiceImpl.java
  19. 3 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

+ 4 - 4
blade-cargo-api/pom.xml

@@ -13,14 +13,14 @@
     <dependencies>
         <dependency>
             <groupId>org.springblade</groupId>
-            <artifactId>blade-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springblade</groupId>
             <artifactId>blade-system-api</artifactId>
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
     </dependencies>
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
 
 </project>

+ 2 - 0
blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/dto/PaymentDTO.java

@@ -40,6 +40,8 @@ public class PaymentDTO {
 
 	private String sybRsacusprikey;
 
+	private String sybRsaPublickey;
+
 	private String sybRsatlpubkey;
 
 	private String sybSmpprivatekey;

+ 6 - 1
blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/entity/Parameters.java

@@ -179,10 +179,15 @@ public class Parameters implements Serializable {
 	private String sybMdAppkey;
 
 	/**
+	 * RSA私钥
+	 */
+	@ApiModelProperty(value = "RSA私钥")
+	private String sybRsacusprikey;
+	/**
 	 * RSA公钥
 	 */
 	@ApiModelProperty(value = "RSA公钥")
-	private String sybRsacusprikey;
+	private String sybRsaPublickey;
 
 	/**
 	 * RSA2公钥

+ 14 - 4
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java

@@ -21,6 +21,7 @@ import org.springblade.pay.tonglianPayment.service.IParametersService;
 import org.springblade.pay.tonglianPayment.service.IPaymentService;
 import org.springblade.pay.tonglianPayment.service.IWechatMarkService;
 import org.springblade.pay.tonglianPayment.utils.AnalysisMapUtils;
+import org.springblade.pay.tonglianPayment.utils.SybConstants;
 import org.springblade.pay.tonglianPayment.utils.SybPayService;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.system.feign.ISysClient;
@@ -151,16 +152,25 @@ public class PaymentClient implements IPaymentClient {
 			wechatMark.setSrcBillNo(paymentDTO.getOldreqsn());
 			wechatMark.setSerialNumber(paymentDTO.getOldtrxid());
 			wechatMark.setAmount(new BigDecimal(paymentDTO.getTrxamt()).divide(new BigDecimal("100"), MathContext.DECIMAL32));
-			Map<String, String> map = service.refund(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getOldtrxid(), paymentDTO.getOldreqsn(), paymentDTO.getCusId(),
-				paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(), paymentDTO.getSybRsatlpubkey(),
-				paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey());
+			String status = sysClient.getParamServiceNew("cashier.payment");
+			Map<String, String> map = new HashMap<>();
+			if ("1".equals(status)) {
+				map = service.refundNew(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getOldtrxid(), paymentDTO.getOldreqsn(), paymentDTO.getCusId(),
+					paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(), paymentDTO.getSybRsatlpubkey(),
+					paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey(), SybConstants.SYB_APIURL_TRANX,paymentDTO.getSybRsaPublickey());
+			} else {
+				map = service.refund(paymentDTO.getTrxamt(), paymentDTO.getReqsn(), paymentDTO.getOldtrxid(), paymentDTO.getOldreqsn(), paymentDTO.getCusId(),
+					paymentDTO.getAppId(), paymentDTO.getOrgid(), paymentDTO.getTransactionType(), paymentDTO.getSybMdAppkey(), paymentDTO.getSybRsacusprikey(), paymentDTO.getSybRsatlpubkey(),
+					paymentDTO.getSybSmpprivatekey(), paymentDTO.getSybSmtlpubkey(), null);
+			}
 			print(map);
 			if (map == null) {
 				throw new Exception("返回数据错误");
 			}
+			System.out.println("收银台退款返回数据" + map);
 			String return_code = AnalysisMapUtils.getString("retcode", map);
-			String return_msg = AnalysisMapUtils.getString("retmsg", map);
 			if (return_code.equalsIgnoreCase("FAIL")) {
+				String return_msg = AnalysisMapUtils.getString("retmsg", map);
 				if ("3008".equals(map.get("trxstatus"))) {
 					wechatMark.setCause("订单" + paymentDTO.getOldreqsn() + "退款失败!原因:账户余额不足");
 					wechatMark.setStatus(4);

+ 1 - 1
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/method/ApiTestV2.java

@@ -33,7 +33,7 @@ public class ApiTestV2 {
 		SybPayService service = new SybPayService();
 		String reqsn = String.valueOf(System.currentTimeMillis());
 		Map<String, String> map = service.refund(1, reqsn, "", "20160712167578.2547", "", "", "", "",
-			"", "", "", "", "");
+			"", "", "", "", "","");
 		print(map);
 	}
 

+ 2 - 2
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java

@@ -562,7 +562,6 @@ public class PaymentServiceImpl implements IPaymentService {
 			String appKey;
 			System.out.println("交易返回数据:" + params);
 			WechatMark wechatMark = new WechatMark();
-
 			Parameters parameters = new Parameters();
 			parameters.setAppId(AnalysisMapUtils.getString("appid", params));
 			parameters.setCusId(AnalysisMapUtils.getString("cusid", params));
@@ -572,7 +571,7 @@ public class PaymentServiceImpl implements IPaymentService {
 			}
 
 			if ("RSA".equals(params.get("signtype"))) {
-				appKey = parametersDetails.getSybRsacusprikey();
+				appKey = parametersDetails.getSybRsaPublickey();
 			} else if ("SM2".equals(params.get("signtype"))) {
 				appKey = parametersDetails.getSybSmtlpubkey();
 			} else {
@@ -584,6 +583,7 @@ public class PaymentServiceImpl implements IPaymentService {
 			wechatMark.setCreateTime(new Date());
 			wechatMark.setType("支付");
 			if (isSign) {
+				System.out.println("签名验证成功");
 				String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
 				if (Objects.equals(trxstatus, "0000")) {
 					wechatMark.setSrcBillNo(AnalysisMapUtils.getString("cusorderid", params));

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

@@ -8,7 +8,8 @@ public class SybConstants {
 	public static final String SYB_CUSID = "660452055320ST7";
 	public static final String SYB_APPID = "00261022";
 	public static final String SYB_MD5_APPKEY = "17660685060";
-	public static final String SYB_APIURL = "https://vsp.allinpay.com/apiweb/unitorder";//生产环境
+	public static final String SYB_APIURL = "https://vsp.allinpay.com/apiweb/unitorder";//生产环境小程序退款
+	public static final String SYB_APIURL_TRANX = "https://vsp.allinpay.com/apiweb/tranx";//生产环境收银台退款
 	public static final String SIGN_TYPE = "MD5";
 	public static final String SYB_RSACUSPRIKEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC/SaCH1k04+K6A9+Iqfjxx00etYMjG/QDYPnmhZrUsqWwZnmxZfAjqzZIn85UF19dffkmwiZiYZSoB2iITwjcjGkKmcaZ0QyH7um2MhR7FOOZj/LYf1/F7LM8tWW+TOQLmV4MGs1FTtrf2KH32aZSeH8DdzOoGjN3hp9LqVenw/iK3WqKsjEQZp+rLYTyYMk9OIe1AlebOUpF5amnHK4W0E4Aiaddkfnbf8NfHm92fa90dEZnuTapVSFbptX+54UgSq3gGoeFeBnuiarS6q06Ht5UUaPP8LDTZDyO5Gs97cJ02muUcuQ7rEwTRQS5UPlJiPx3SxbvOHai+OY6Lh2ohAgMBAAECggEAPI2IHbf/FgvS4cyWcbEoXTfutrmulR8+BzYvtqIWtB6ls65syh7zi7Crla4L/J+I9Be8KABGp+dOVuvAYdTXM2t6scnEUYV22oL3bsYtKW2LsRcsaAQp0z4qD0cChO5FNrl5JsPY+NEchvXmefyOKUgP+6aEZrJtAqPnpnqv5bNhGFJRTE06X0H/1TQe7ugMdm16qyOFxzs8UtOpeUvKioc7CQCAhMQ4eHj16JaK05Ih4ggM5I9ZKCKZeJ9JU7WWxZ5RhC8Zo6Oj/9S/M1FEH9KABwte8Adz0AGp++fj9kvxEQho4/Tydh5hcYfqv/+qt/mKE8tnDRf5GhQ5tjOkqQKBgQDgTGxd/6m2DZJ62PwrPAwdt51zGhXFoUlv3CDxzg7uqsqTd6lXZDo0vEfmAzkIUei4RwAm3B9rXO2sY259UJO0lTMrFfiWfSG3djClVZ1ibaYi9bzPYzuUhf1aAI6/mGU1celHFQfx0LxeLLxsPmlsMgX5VqvbfXstXI/EoG3ObwKBgQDaUs0thLNJD+eLcxlGiBEGybQR/taYV/12omVT+ocI1E0G0wjXZmfhVoGzCZs7pafMtC8golSToIXie4H+c0ly36fxTI9bR/0UfHmleD/ObHcT3+Uzu7uw13sxrRKdt6jE+HpPxFf3YSh7KJYUZG45Sdyq/vuPNlBSVsNiSLeYbwKBgFzXZVe3NpEzpvkQjbh7n2xBj3uQRYjLTPFvRXexWj7yFO3bbw3MX8dqU7xigx3tgY2dXfO3042GJp7ffWGDk9AAnfBspLvtyaH92v7kpEOUrVr1KpURNx0wJQE3D99AfkwT/YI9s08lnoLAs7F+V/a/8fcWKAavNug80wmJekojAoGANNFZYAy9jwxw+PSkhcK/U8QSc1QSuJJ4+G17VCDE8GbkJ6WAexQER6i1Agpt6rU97jEdQajkCz8HhO5aWaOsfkULjT33ZJ765CzlBRodXaQx/rXo7mYZl0PaQv9bBJr9EoIGnSukGG4B7CG6hT5yyBtNbnT3iQMb1X+2Dx4GhLMCgYEAtuAqndGpthCLSMxp3syvvGB9OLluwj7TxfbjGGDp0WwXVun4KlQCfJqh2J7kpMSJN3lGXafboEgZMzF1o7VlzNV1bsf4x95cd5916qtyKIXKND3t4rWhPdHIkULPC8kjXuuHLm9q7W29aLJwawW/eQ+cUyEzMOh84ohNK8+278M=";
 	public static final String SYB_RSATLPUBKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv0mgh9ZNOPiugPfiKn48cdNHrWDIxv0A2D55oWa1LKlsGZ5sWXwI6s2SJ/OVBdfXX35JsImYmGUqAdoiE8I3IxpCpnGmdEMh+7ptjIUexTjmY/y2H9fxeyzPLVlvkzkC5leDBrNRU7a39ih99mmUnh/A3czqBozd4afS6lXp8P4it1qirIxEGafqy2E8mDJPTiHtQJXmzlKReWppxyuFtBOAImnXZH523/DXx5vdn2vdHRGZ7k2qVUhW6bV/ueFIEqt4BqHhXgZ7omq0uqtOh7eVFGjz/Cw02Q8juRrPe3CdNprlHLkO6xME0UEuVD5SYj8d0sW7zh2ovjmOi4dqIQIDAQAB";

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

@@ -125,39 +125,32 @@ public class SybPayService {
 		params.put("appid", appId);
 		if (!SybUtil.isEmpty(orgid)) {
 			params.put("orgid", orgid);
+		}else{
+			params.put("orgid", "");
 		}
-		params.put("version", "11");
+		params.put("version", "12");
 		params.put("trxamt", String.valueOf(trxamt));
 		params.put("reqsn", reqsn);
-		params.put("paytype", paytype);
-		params.put("randomstr", SybUtil.getValidatecode(8));
+		params.put("notify_url", notify_url);
 		params.put("body", body);
 		params.put("remark", remark);
 		params.put("validtime", validtime);
-		params.put("acct", acct);
-		params.put("notify_url", notify_url);
 		params.put("limit_pay", limit_pay);
-		params.put("sub_appid", sub_appid);
-		params.put("goods_tag", goods_tag);
-		params.put("benefitdetail", benefitdetail);
-		params.put("chnlstoreid", chnlstoreid);
-		params.put("subbranch", subbranch);
-		params.put("extendparams", extendparams);
-		params.put("cusip", cusip);
-		params.put("fqnum", fqnum);
-		params.put("idno", idno);
-		params.put("truename", truename);
-		params.put("asinfo", asinfo);
+		params.put("randomstr", SybUtil.getValidatecode(8));
+		params.put("paytype", paytype);
 		params.put("signtype", transactionType);
 		String appkey = "";
 		if (transactionType.equals("RSA")) {
 			appkey = sybRsacusprikey;
 		} else if (transactionType.equals("SM2")) {
 			appkey = sybSmpprivatekey;
+		}else if (transactionType.equals("RSA2")) {
+			appkey = sybRsatlpubkey;
 		} else {
 			appkey = sybMdAppkey;
 		}
-		params.put("sign", SybUtil.unionSign(params, appkey, transactionType));
+		params.put("sign", String.valueOf(SybUtil.unionSign(params, appkey, transactionType)));
+		System.out.println("支付数据:"+params);
 		return params;
 	}
 
@@ -196,12 +189,11 @@ public class SybPayService {
 	}
 
 	public Map<String, String> refund(long trxamt, String reqsn, String oldtrxid, String oldreqsn, String cusId, String appId, String orgid, String transactionType, String sybMdAppkey,
-									  String sybRsacusprikey, String sybRsatlpubkey, String sybSmpprivatekey, String sybSmtlpubkey) throws Exception {
+									  String sybRsacusprikey, String sybRsatlpubkey, String sybSmpprivatekey, String sybSmtlpubkey,String url) throws Exception {
 		TreeMap<String, String> params = new TreeMap<String, String>();
 		if (!SybUtil.isEmpty(orgid)) {
 			params.put("orgid", orgid);
 		}
-		String url = "";
 		params.put("cusid", cusId);
 		params.put("appid", appId);
 		url = SybConstants.SYB_APIURL;
@@ -221,6 +213,34 @@ public class SybPayService {
 		return map;
 	}
 
+	public Map<String, String> refundNew(long trxamt, String reqsn, String oldtrxid, String oldreqsn, String cusId, String appId, String orgid, String transactionType, String sybMdAppkey,
+									  String sybRsacusprikey, String sybRsatlpubkey, String sybSmpprivatekey, String sybSmtlpubkey,String url,String sybRsaPublickey) throws Exception {
+		TreeMap<String, String> params = new TreeMap<String, String>();
+		if (!SybUtil.isEmpty(orgid)) {
+			params.put("orgid", orgid);
+		}else{
+			params.put("orgid", "");
+		}
+		params.put("cusid", cusId);
+		params.put("appid", appId);
+		HttpConnectionUtil http = new HttpConnectionUtil(url + "/refund");
+		http.init();
+		params.put("version", "12");
+		params.put("trxamt", String.valueOf(trxamt));
+		params.put("reqsn", reqsn);
+		params.put("oldreqsn", oldreqsn);
+		params.put("oldtrxid", oldtrxid);
+		params.put("remark", "备注");
+		params.put("benefitdetail", "");
+		params.put("randomstr", SybUtil.getValidatecode(8));
+		params.put("signtype", transactionType);
+		params.put("sign", SybUtil.unionSign(params, sybRsacusprikey, transactionType));
+		byte[] bys = http.postParams(params, true);
+		String result = new String(bys, "UTF-8");
+		Map<String, String> map = handleResult(result, transactionType, sybRsaPublickey, sybSmpprivatekey, sybMdAppkey);
+		return map;
+	}
+
 	public Map<String, String> query(String reqsn, String trxid) throws Exception {
 		TreeMap<String, String> params = new TreeMap<String, String>();
 		if (!SybUtil.isEmpty(SybConstants.SYB_ORGID)) {

+ 8 - 2
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/utils/SybUtil.java

@@ -86,9 +86,12 @@ public class SybUtil {
 	public static boolean validSign(TreeMap<String, String> param,
 									String appkey, String signType) throws Exception {
 		if (param != null && !param.isEmpty()) {
-			if (!param.containsKey("sign"))
+			if (!param.containsKey("sign")) {
 				return false;
+			}
+			System.out.println("收银台返回数据sign:"+param.get("sign"));
 			String sign = param.remove("sign");
+			System.out.println("收银台返回数据sign:"+sign);
 			if ("MD5".equals(signType)) {// 如果是md5则需要把md5的key加入到排序
 				param.put("key", appkey);
 			}
@@ -109,6 +112,9 @@ public class SybUtil {
 				PublicKey publicKey = SmUtil.pubKeySM2FromBase64Str(appkey);
 				return SmUtil.verifySM3SM2(publicKey, "Allinpay", Base64.decodeBase64(sign), sb.toString().getBytes("UTF-8"));
 			} else {
+				System.out.println("收银台返回数据sign:"+sign);
+				System.out.println("收银台返回数据signType:"+signType);
+				System.out.println("收银台返回数据appkey:"+appkey);
 				return rsaVerifyPublickey(sb.toString(), sign, appkey, "UTF-8");
 			}
 		}
@@ -221,7 +227,7 @@ public class SybUtil {
 	public static PublicKey getPublicKeyFromX509(String algorithm,
 												 byte[] encodedKey) throws Exception {
 		KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
-
+		System.out.println("收银台返回数据解析:"+new X509EncodedKeySpec(encodedKey));
 		return keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
 	}
 }

+ 3 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -1238,6 +1238,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
 				Date date = new Date();
 				if (CollectionUtils.isNotEmpty(orderItems)) {
+					int i = 1;
 					for (OrderItems item : orderItems) {
 						StockGoodsLog stockGoodsLog = new StockGoodsLog();
 						stockGoodsLog.setTime(date);
@@ -1272,7 +1273,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 						// 判断比较大小
 						if (orderQuantity.compareTo(surplusRouteQuantity) > 0) {
-							throw new SecurityException("锁定库存失败:原单据的" + item.getCode() + "订货数量大于可用库存,无法锁定");
+							throw new SecurityException("锁定库存失败:第" + i + "行订货数量大于可用库存,无法锁定");
 						}
 						if (surplusRouteQuantity == null) {
 							throw new SecurityException("锁定库存失败:可用库存为空,禁止操作");
@@ -1289,6 +1290,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						stockGoodsLog.setSurplusRouteQuantity(oneStock.getSurplusRouteQuantity());
 						stockGoodsLog.setLockingQuantity(oneStock.getLockingQuantity());
 						stockGoodsLogList.add(stockGoodsLog);
+						i++;
 					}
 					// 更新库存
 					R goods = stockGoodsClient.updateStockList(stockGoods);

+ 1 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/check/service/impl/AuditProecessServiceImpl.java

@@ -180,7 +180,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, P
 					);
 				}
 
-				message.setUrl("/approveData/index");
+				message.setUrl("/approveDataL/index");
 				sendMsgToGroup(message, e.getAuditUserId());
 				auditProecess.setAuditStatus("S");
 			} else {

+ 3 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsStatisticsController.java

@@ -121,7 +121,7 @@ public class CorpsStatisticsController {
 				BigDecimal sumAmount = orderList.stream().map(PjOrder::getTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 				totalAmount = totalAmount.add(orderList.stream().map(PjOrder::getTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//已付
-				unpaidAmount = unpaidAmount.add(orderList.stream().map(PjOrder::getPaymentAmountTl).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+				unpaidAmount = unpaidAmount.add(orderList.stream().filter(e -> e.getActualPaymentStatus() == 2).map(PjOrder::getPaymentAmountTl).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//未付
 				paidAmount = paidAmount.add(sumAmount.subtract(unpaidAmount));
 			}
@@ -175,10 +175,10 @@ public class CorpsStatisticsController {
 				corpsDescDto1.setNumber(new BigDecimal("0.00"));
 			}
 		}
-		if ("KH".equals(corpsDescDto.getCorpType())){
+		if ("KH".equals(corpsDescDto.getCorpType())) {
 			ExcelUtil.export(response, "客户信息", "客户信息", BeanUtil.copy(list, PjCorpsDescExportExcel.class), PjCorpsDescExportExcel.class);
 
-		}else{
+		} else {
 			ExcelUtil.export(response, "供应商信息", "供应商信息", BeanUtil.copy(list, PjCorpsDescGYSExportExcel.class), PjCorpsDescGYSExportExcel.class);
 		}
 	}

+ 8 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml

@@ -62,8 +62,8 @@
         <if test="corpsDesc.deliveryWarehouseName != null and corpsDesc.deliveryWarehouseName != ''">
             and delivery_warehouse_name like CONCAT(CONCAT('%', #{corpsDesc.deliveryWarehouseName}), '%')
         </if>
-        <if test="corpsDesc.salesmanId != null and corpsDesc.salesmanId != ''">
-            and salesman_id = #{corpsDesc.salesmanId}
+        <if test="corpsDesc.salesmanId != null">
+          and (salesman_id = #{corpsDesc.salesmanId} or salesman_id is null)
         </if>
         <if test="corpsDesc.salesmanName != null and corpsDesc.salesmanName != ''">
             and salesman_name like CONCAT(CONCAT('%', #{corpsDesc.salesmanName}), '%')
@@ -139,6 +139,9 @@
         <if test="CorpsDesc.cname!=null and CorpsDesc.cname != ''">
             and cname like CONCAT(CONCAT('%', #{CorpsDesc.cname}), '%')
         </if>
+        <if test="CorpsDesc.salesmanId != null">
+            and (salesman_id = #{CorpsDesc.salesmanId} or salesman_id is null)
+        </if>
         <if test="CorpsDesc.tel!=null and CorpsDesc.tel != ''">
             and tel = #{CorpsDesc.tel}
         </if>
@@ -196,6 +199,9 @@
         <if test="CorpsDesc.tenantId!=null and CorpsDesc.tenantId != ''">
             and tenant_id = #{CorpsDesc.tenantId}
         </if>
+        <if test="CorpsDesc.salesmanId != null">
+            and (salesman_id = #{CorpsDesc.salesmanId} or salesman_id is null)
+        </if>
         <if test="CorpsDesc.status!=null">
             and status = #{CorpsDesc.status}
         </if>

+ 9 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/service/impl/CorpsDescServiceImpl.java

@@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.CorpsTypeDesc;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -154,6 +153,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 		corpsDesc.setIsDeleted(0);
 		corpsDesc.setStrTenantId(Arrays.asList(AuthUtil.getDeptId().split(",")));
 		if (!AuthUtil.getUserRole().contains("admin")) {
+			if (AuthUtil.getUserRole().contains("业务员")) {
+				corpsDesc.setSalesmanId(AuthUtil.getUserId());
+			}
 			corpsDesc.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
 		}
 		IPage<CorpsDescVO> page1 = page.setRecords(baseMapper.selectCorpsDescPage(page, corpsDesc));
@@ -586,6 +588,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 		corpsDescDto.setTenantId(AuthUtil.getTenantId());
 		corpsDescDto.setId(corpsDescDto.getId());
 		corpsDescDto.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+		if (AuthUtil.getUserRole().contains("业务员")) {
+			corpsDescDto.setSalesmanId(AuthUtil.getUserId());
+		}
 		return page.setRecords(baseMapper.selectPartsCorpsDescPage(page, corpsDescDto));
 	}
 
@@ -616,6 +621,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, PjCorpsDe
 		corpsDescDto.setTenantId(AuthUtil.getTenantId());
 		corpsDescDto.setId(corpsDescDto.getId());
 		corpsDescDto.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+		if (AuthUtil.getUserRole().contains("业务员")) {
+			corpsDescDto.setSalesmanId(AuthUtil.getUserId());
+		}
 		return baseMapper.selectPartsCorpsStatistics(corpsDescDto);
 	}
 

+ 33 - 12
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -36,13 +36,12 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.brand.service.IBrandFilesService;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
-import org.springblade.salesPart.entity.PjBrandDesc;
-import org.springblade.salesPart.entity.PjCorpsAttn;
-import org.springblade.salesPart.entity.PjOrder;
-import org.springblade.salesPart.entity.PjOrderItems;
+import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.excel.*;
+import org.springblade.salesPart.goods.service.IGoodsFilesService;
 import org.springblade.salesPart.order.service.IOrderItemsService;
 import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.vo.OrderStatistics;
@@ -79,6 +78,8 @@ public class OrderController extends BladeController {
 	//获取用户信息
 	private final IUserClient iUserClient;
 	private final ICorpsAttnService corpsAttnService;
+	private final IGoodsFilesService goodsFilesService;
+	private final IBrandFilesService brandFilesService;
 
 	/**
 	 * 销售详情
@@ -133,7 +134,7 @@ public class OrderController extends BladeController {
 		if (AuthUtil.getUserRole().contains("业务员")) {
 			lambdaQueryWrapper.eq(PjOrder::getSalerId, AuthUtil.getUserId());
 		} else if (AuthUtil.getUserRole().contains("客户")) {
-			lambdaQueryWrapper.eq(PjOrder::getCustomerId, AuthUtil.getUserId());
+			lambdaQueryWrapper.eq(PjOrder::getCreateUser, AuthUtil.getUserId());
 		}
 		IPage<PjOrder> pages = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
 
@@ -217,7 +218,7 @@ public class OrderController extends BladeController {
 		if (AuthUtil.getUserRole().contains("业务员")) {
 			lambdaQueryWrapper.eq(PjOrder::getSalerId, AuthUtil.getUserId());
 		} else if (AuthUtil.getUserRole().contains("客户")) {
-			lambdaQueryWrapper.eq(PjOrder::getCustomerId, AuthUtil.getUserId());
+			lambdaQueryWrapper.eq(PjOrder::getCreateUser, AuthUtil.getUserId());
 		}
 		List<PjOrder> pages = orderService.list(lambdaQueryWrapper);
 
@@ -436,7 +437,11 @@ public class OrderController extends BladeController {
 				.or().like(PjOrder::getShortcutJoin, order.getRetrieval()))
 			.apply(ObjectUtils.isNotEmpty(order.getXcxStatus()), "find_in_set(xcx_status,'" + order.getXcxStatus() + "')")
 			.orderByDesc(PjOrder::getCreateTime);
-
+		if (AuthUtil.getUserRole().contains("业务员")) {
+			lambdaQueryWrapper.eq(PjOrder::getSalerId, AuthUtil.getUserId());
+		} else if (AuthUtil.getUserRole().contains("客户")) {
+			lambdaQueryWrapper.eq(PjOrder::getCreateUser, AuthUtil.getUserId());
+		}
 		IPage<PjOrder> pages = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
 
 		pages.getRecords().forEach(e -> {
@@ -584,7 +589,23 @@ public class OrderController extends BladeController {
 		map.forEach((k, v) -> {
 			if (ObjectUtil.isNotEmpty(v)) {
 				v.forEach(e -> {
-					e.setOrderItemsList(orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>().eq(PjOrderItems::getPid, e.getId())));
+					List<PjOrderItems> pjOrderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>().eq(PjOrderItems::getPid, e.getId()));
+					for (PjOrderItems item : pjOrderItemsList) {
+						List<PjGoodsFiles> pjGoodsFiles = goodsFilesService.list(new LambdaQueryWrapper<PjGoodsFiles>()
+							.eq(PjGoodsFiles::getTenantId, AuthUtil.getTenantId())
+							.eq(PjGoodsFiles::getIsDeleted, 0)
+							.eq(PjGoodsFiles::getPid, item.getGoodsId())
+							.eq(PjGoodsFiles::getMainImage, 0));
+						item.setGoodsFilesList(pjGoodsFiles);
+						if (item.getGoodsFilesList().size() == 0 && ObjectUtils.isNotNull(item.getBrandId())) {
+							item.setGoodsFilesList(BeanUtil.copy(brandFilesService.list(new LambdaQueryWrapper<PjBrandFiles>()
+								.eq(PjBrandFiles::getMainImage, 0)
+								.eq(PjBrandFiles::getPid, item.getBrandId())
+								.eq(PjBrandFiles::getTenantId, AuthUtil.getTenantId())
+								.eq(PjBrandFiles::getIsDeleted, 0)), PjGoodsFiles.class));
+						}
+					}
+					e.setOrderItemsList(pjOrderItemsList);
 				});
 			}
 			Map<String, Object> objectMap = new HashMap<>();
@@ -789,13 +810,13 @@ public class OrderController extends BladeController {
 		}
 		lambdaQueryWrapper.orderByDesc(PjOrder::getCreateTime);
 		List<PjOrder> pages = orderService.list(lambdaQueryWrapper);
-		if ("1".equals(order.getExportType())){
+		if ("1".equals(order.getExportType())) {
 			ExcelUtil.export(response, "销售对账明细", "销售对账明细", BeanUtil.copy(pages, PjOrderExportExcelReconciliation.class), PjOrderExportExcelReconciliation.class);
-		}else if ("2".equals(order.getExportType())){
+		} else if ("2".equals(order.getExportType())) {
 			ExcelUtil.export(response, "应收统计", "应收统计", BeanUtil.copy(pages, PjOrderExportExcelReceivable.class), PjOrderExportExcelReceivable.class);
-		}else if ("3".equals(order.getExportType())){
+		} else if ("3".equals(order.getExportType())) {
 			ExcelUtil.export(response, "应付统计", "应付统计", BeanUtil.copy(pages, PjOrderExportExcelPay.class), PjOrderExportExcelPay.class);
-		}else if ("4".equals(order.getExportType())){
+		} else if ("4".equals(order.getExportType())) {
 			ExcelUtil.export(response, "利润统计", "利润统计", BeanUtil.copy(pages, PjOrderExportExcelProfit.class), PjOrderExportExcelProfit.class);
 		}
 	}

+ 7 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderMapper.xml

@@ -106,7 +106,7 @@
             and po.sales_company_id = #{order.salesCompanyId}
         </if>
         <if test="order.businesDateList == null">
-            AND DATE_FORMAT(po.busines_date, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')
+            AND DATE_FORMAT(po.busines_date, '%Y-%m') &lt; DATE_FORMAT(CURDATE(), '%Y-%m')
         </if>
         <if test="order.businesDateList !=null and order.businesDateList[0] != '' and order.businesDateList[0] != null">
             AND DATE_FORMAT(po.busines_date, '%Y-%m') &gt;= #{order.businesDateList[0]}
@@ -159,6 +159,12 @@
         po.tenant_id = #{tenantId}
         AND po.is_deleted = 0
           and po.bs_type = 'XS'
+        AND ((
+        po.business_source = '外部销售'
+        AND FIND_IN_SET( po.actual_payment_status, '2,3,4' ))
+        OR (
+        po.business_source = '内部销售'
+        AND FIND_IN_SET( po.actual_payment_status, '0,1,2,3,4' )))
         <if test="firstDay != null">
             and po.busines_date &gt;= #{firstDay}
         </if>

+ 17 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -889,8 +889,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
 			.eq(PjOrderItems::getIsDeleted, 0)
 			.eq(PjOrderItems::getPid, detail.getId());
-		detail.setOrderItemsList(orderItemsMapper.selectList(itemsLambdaQueryWrapper));
-
+		List<PjOrderItems> orderItems = orderItemsMapper.selectList(itemsLambdaQueryWrapper);
+		for (PjOrderItems item:orderItems){
+			List<PjGoodsFiles> pjGoodsFiles = goodsFilesService.list(new LambdaQueryWrapper<PjGoodsFiles>()
+				.eq(PjGoodsFiles::getTenantId, AuthUtil.getTenantId())
+				.eq(PjGoodsFiles::getIsDeleted, 0)
+				.eq(PjGoodsFiles::getPid, item.getGoodsId())
+				.eq(PjGoodsFiles::getMainImage, 0));
+			item.setGoodsFilesList(pjGoodsFiles);
+			if (item.getGoodsFilesList().size() == 0 && ObjectUtils.isNotNull(item.getBrandId())) {
+				item.setGoodsFilesList(BeanUtil.copy(brandFilesService.list(new LambdaQueryWrapper<PjBrandFiles>()
+					.eq(PjBrandFiles::getMainImage, 0)
+					.eq(PjBrandFiles::getPid, item.getBrandId())
+					.eq(PjBrandFiles::getTenantId, AuthUtil.getTenantId())
+					.eq(PjBrandFiles::getIsDeleted, 0)), PjGoodsFiles.class));
+			}
+		}
+		detail.setOrderItemsList(orderItems);
 		return detail;
 	}
 

+ 10 - 8
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/payMethod/PayServiceImpl.java

@@ -27,15 +27,12 @@ import org.springblade.pay.tonglianPayment.fegin.IPaymentClient;
 import org.springblade.pay.tonglianPayment.fegin.ITongLianPaymentClient;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.order.mapper.OrderMapper;
-import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -91,15 +88,15 @@ public class PayServiceImpl implements PayService {
 			paymentDTO.setReqsn(serialNumber);
 			paymentDTO.setPaytype(parameters.getPayType());
 			paymentDTO.setBody("商品-" + goodsNames);
-			paymentDTO.setRemark("");
+			paymentDTO.setRemark("备注");
 			paymentDTO.setAcct(r.getData().getOpenId());
 			paymentDTO.setValidtime(parameters.getValidtime());
 			if ("1".equals(count)) {
 				paymentDTO.setNotify_url(parameters.getNotifyUrl() + "/api/blade-pay/tongLianPayment/cashierPaymentNotify");
-			}else {
+			} else {
 				paymentDTO.setNotify_url(parameters.getNotifyUrl() + "/api/blade-pay/tongLianPayment/callbackNotify");
 			}
-			paymentDTO.setLimit_pay("");
+			paymentDTO.setLimit_pay("no_credit");
 			paymentDTO.setIdno("");
 			paymentDTO.setTruename("");
 			paymentDTO.setAsinfo("");
@@ -122,8 +119,10 @@ public class PayServiceImpl implements PayService {
 			paymentDTO.setTransactionType(parameters.getTransactionType());
 			//MD5交易密钥
 			paymentDTO.setSybMdAppkey(parameters.getSybMdAppkey());
-			//RSA
+			//RSA
 			paymentDTO.setSybRsacusprikey(parameters.getSybRsacusprikey());
+			//RSA公钥
+			paymentDTO.setSybRsaPublickey(parameters.getSybRsaPublickey());
 			//RSA2公钥
 			paymentDTO.setSybRsatlpubkey(parameters.getSybRsatlpubkey());
 			//商户sm2私钥
@@ -147,7 +146,7 @@ public class PayServiceImpl implements PayService {
 				} else {
 					throw new RuntimeException("下单失败");
 				}
-			}else{
+			} else {
 				if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
 					for (String orderId : id.split(",")) {
 						PjOrder order = new PjOrder();
@@ -191,7 +190,10 @@ public class PayServiceImpl implements PayService {
 		paymentDTO.setOrgid(parameters.getOrgid());
 		paymentDTO.setTransactionType(parameters.getTransactionType());
 		paymentDTO.setSybMdAppkey(parameters.getSybMdAppkey());
+		//RSA私钥
 		paymentDTO.setSybRsacusprikey(parameters.getSybRsacusprikey());
+		//RSA公钥
+		paymentDTO.setSybRsaPublickey(parameters.getSybRsaPublickey());
 		paymentDTO.setSybRsatlpubkey(parameters.getSybRsatlpubkey());
 		paymentDTO.setSybSmpprivatekey(parameters.getSybSmpprivatekey());
 		paymentDTO.setSybSmtlpubkey(parameters.getSybSmtlpubkey());

+ 3 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

@@ -22,6 +22,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -121,7 +122,8 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 	 * @param list    按所属公司分类的商品集合
 	 */
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R generateOrder(String address, List<Map<String, Object>> list) {
 
 		StringBuilder ids = new StringBuilder();