|
|
@@ -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());
|
|
|
}
|
|
|
}
|