Ver Fonte

2023年8月15日15:05:51

纪新园 há 2 anos atrás
pai
commit
72db7031d0

+ 3 - 2
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java

@@ -219,11 +219,12 @@ public class PriceBankController extends BladeController {
 		}
 		//商品
 		List<GoodsDesc> goodsList = new ArrayList<>();
-		goodsList = castToList(redisTemplate.opsForValue().get("goods"), GoodsDesc.class);
+		goodsList = goodsDescClient.selectGoodsDescAll();
+		/*goodsList = castToList(redisTemplate.opsForValue().get("goods"), GoodsDesc.class);
 		if (goodsList.size() == 0) {
 			redisClient.basicData("goods");
 			goodsList = castToList(redisTemplate.opsForValue().get("goods"), GoodsDesc.class);
-		}
+		}*/
 		//商品
 		List<GoodsSpecification> goodsSpecificationList = new ArrayList<>();
 		goodsSpecificationList = castToList(redisTemplate.opsForValue().get("specification"), GoodsSpecification.class);

+ 9 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java

@@ -90,5 +90,14 @@ public class TongLianPaymentController extends BladeController {
 		paymentService.callbackNnotifyMethod(request,response);
 	}
 
+	/**
+	 * 微信订单回调接口 (配件-汽保)
+	 */
+	@ApiIgnore
+	@RequestMapping(value = "/steamProtectNotify", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
+	public void steamProtectNotify(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) {
+		paymentService.steamProtectNotify(request,response);
+	}
+
 
 }

+ 2 - 0
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/IPaymentService.java

@@ -22,4 +22,6 @@ public interface IPaymentService {
 	void notifyMethod(HttpServletRequest request, HttpServletResponse response);
 
     void callbackNnotifyMethod(HttpServletRequest request, HttpServletResponse response);
+
+	void steamProtectNotify(HttpServletRequest request, HttpServletResponse response);
 }

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

@@ -31,8 +31,10 @@ import org.springblade.pay.tonglianPayment.utils.SybPayService;
 import org.springblade.pay.tonglianPayment.utils.SybUtil;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
+import org.springblade.salesPart.feign.IMaintenanceClient;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
+import org.springblade.salesPart.maintenance.entity.Maintenance;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.feign.IPJOrderClient;
@@ -101,6 +103,8 @@ public class PaymentServiceImpl implements IPaymentService {
 
 	private final ISysClient sysClient;
 
+	private final IMaintenanceClient maintenanceClient;
+
 
 	@Override
 	public R getWeChatPayment(Order order) {
@@ -312,6 +316,124 @@ public class PaymentServiceImpl implements IPaymentService {
 		}
 	}
 
+	@Override
+	public void steamProtectNotify(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			//通知传输的编码为GBK
+			request.setCharacterEncoding("UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		response.setCharacterEncoding("UTF-8");
+		TreeMap<String, String> params = NotifyServlet.getParams(request);
+
+		String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
+		// 创建线程池
+		ExecutorService executor = Executors.newSingleThreadExecutor();
+		// 启动任务并提交给线程池
+		executor.submit(() -> {
+			try {
+				logicMethodQB(request, response);
+			} catch (Exception e) {
+				System.out.println("支付成功,业务处理异常,时间:" + new Date());
+				System.out.println(e.getMessage());
+				// 关闭线程池
+				executor.shutdown();
+			} finally {
+				// 关闭线程池
+				executor.shutdown();
+			}
+		});
+		// 关闭线程池
+		executor.shutdown();
+		if (Objects.equals(trxstatus, "0000")) {
+			returnMethod(response, AnalysisMapUtils.setXML("SUCCESS", "OK"));
+		} else {
+			returnMethod(response, AnalysisMapUtils.setXML("error", "OK"));
+		}
+	}
+
+	private void logicMethodQB(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			//通知传输的编码为GBK
+			request.setCharacterEncoding("UTF-8");
+			response.setCharacterEncoding("UTF-8");
+			TreeMap<String, String> params = NotifyServlet.getParams(request);
+			String appKey;
+
+			WechatMark wechatMark = new WechatMark();
+
+			Parameters parameters = new Parameters();
+			parameters.setAppId(AnalysisMapUtils.getString("appid", params));
+			parameters.setCusId(AnalysisMapUtils.getString("cusid", params));
+			Parameters parametersDetails = tongLianPaymentClient.getParametersDetails(parameters);
+			if (ObjectUtils.isNull(parametersDetails)) {
+				wechatMark.setRemark("未找到租户,异常支付");
+			}
+
+			if ("RSA".equals(params.get("signtype"))) {
+				appKey = parametersDetails.getSybRsacusprikey();
+			} else if ("SM2".equals(params.get("signtype"))) {
+				appKey = parametersDetails.getSybSmtlpubkey();
+			} else {
+				appKey = parametersDetails.getSybMdAppkey();
+			}
+			// 接受到推送通知,首先验签
+			boolean isSign = SybUtil.validSign(params, appKey, params.get("signtype"));
+
+			wechatMark.setCreateTime(new Date());
+			wechatMark.setType("支付");
+			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))).divide(new BigDecimal(100), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP));
+
+					//支付成功业务处理
+					Maintenance maintenance = new Maintenance();
+					maintenance.setSysNo(AnalysisMapUtils.getString("cusorderid", params));
+
+					if (ObjectUtils.isNotNull(parametersDetails)) {
+						wechatMark.setTenantId(parametersDetails.getTenantId());
+						maintenance.setTenantId(parametersDetails.getTenantId());
+					} else {
+						wechatMark.setTenantId("000000");
+						maintenance.setTenantId("000000");
+						wechatMark.setRemark("未找到租户,异常支付");
+					}
+					R<Maintenance> re = maintenanceClient.getByMaintenance(maintenance);
+					if (re.isSuccess() && ObjectUtils.isNotNull(re.getData())) {
+						re.getData().setPaymentStatus("2");
+						re.getData().setStatus(5);
+						re.getData().setTonglianPaymentAmount(new BigDecimal(Objects.requireNonNull(AnalysisMapUtils.getString("trxamt", params))).divide(new BigDecimal(100), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP));
+						wechatMark.setBillNo(re.getData().getSysNo());
+						maintenanceClient.updateMaintenance(re.getData());
+						maintenanceClient.updateMaintenanceFees(re.getData().getId() + "", re.getData().getTenantId());
+						wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付成功");
+						wechatMark.setStatus(1);
+					} else {
+						wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到单据信息,账单结算失败!");
+						wechatMark.setStatus(2);
+					}
+					wechatMarkService.save(wechatMark);
+				} else {
+					//订单编号
+					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付失败!" + "原因:" + AnalysisMapUtils.getString("errmsg", params));
+					wechatMark.setStatus(2);
+					wechatMarkService.save(wechatMark);
+				}
+			} else {
+				wechatMark.setCause("签名验证失败");
+				wechatMark.setStatus(2);
+				wechatMarkService.save(wechatMark);
+				throw new RuntimeException("签名验证失败");
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
 	/**
 	 * 微信订单回调接口 (配件-新)
 	 *
@@ -408,7 +530,7 @@ public class PaymentServiceImpl implements IPaymentService {
 									}
 								}
 							}
-							if(ObjectUtils.isNotNull(selectOrder.getSalerId())){
+							if (ObjectUtils.isNotNull(selectOrder.getSalerId())) {
 								Message sendMessage = new Message();
 								sendMessage.setParameter(selectOrder.getId() + "");
 								sendMessage.setUserName("外部用户");
@@ -628,7 +750,7 @@ public class PaymentServiceImpl implements IPaymentService {
 									}
 									if (list.size() > 0) {
 										R ress = stockGoodsClient.updateStockListYCP(BeanUtil.copy(list, StockGoods.class));
-										if (!ress.isSuccess()){
+										if (!ress.isSuccess()) {
 											throw new RuntimeException(ress.getMsg());
 										}
 									}