wuxw hace 2 años
padre
commit
08a853cb34

+ 1 - 0
java110-bean/src/main/java/com/java110/dto/log/LogSystemErrorDto.java

@@ -19,6 +19,7 @@ public class LogSystemErrorDto extends PageDto implements Serializable {
     public static final String ERR_TYPE_JOB = "JOB";
     public static final String ERR_TYPE_OWE_FEE = "OWE_FEE";
     public static final String ERR_TYPE_NOTICE = "NOTICE";
+    public static final String ERR_TYPE_PAY_NOTICE = "PAY_NOTICE";
     public static final String ERR_TYPE_DATABUS = "DATABUS";
     public static final String ERR_TYPE_COUPON = "COUPON";
     public static final String ERR_TYPE_INTEGRAL = "INTEGRAL";

+ 7 - 0
service-acct/src/main/java/com/java110/acct/cmd/payment/CheckPayFinishCmd.java

@@ -9,6 +9,7 @@ import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.CallApiServiceFactory;
 import com.java110.dto.paymentPool.PaymentPoolDto;
 import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
+import com.java110.utils.cache.CommonCache;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.WechatConstant;
@@ -80,6 +81,12 @@ public class CheckPayFinishCmd extends Cmd {
         //JSONObject paramOut = CallApiServiceFactory.postForApi(appId, reqJson, "fee.payFee", JSONObject.class, userId);
         reqJson.put("payOrderId",orderId);
 
+        orderId = CommonCache.getAndRemoveValue("qrCode_order"+orderId);
+
+        if(StringUtil.isEmpty(orderId)){
+            throw new CmdException("订单已经处理过");
+        }
+
         JSONObject paramOut = CallApiServiceFactory.postForApi(appId, reqJson, reqJson.getString("subServiceCode"), JSONObject.class, userId);
         cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(paramOut));
     }

+ 10 - 0
service-acct/src/main/java/com/java110/acct/cmd/payment/QrCodePaymentCmd.java

@@ -18,6 +18,7 @@ import com.java110.intf.acct.IPaymentPoolConfigV1InnerServiceSMO;
 import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
 import com.java110.intf.community.ICommunityV1InnerServiceSMO;
 import com.java110.intf.fee.IPayFeeV1InnerServiceSMO;
+import com.java110.utils.cache.CommonCache;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.WechatConstant;
@@ -106,6 +107,9 @@ public class QrCodePaymentCmd extends Cmd {
             feeName = feeName.substring(0, 120);
         }
 
+        //todo 缓存订单ID
+        CommonCache.setValue("qrCode_order"+orderId,orderId,CommonCache.TOKEN_EXPIRE_TIME);
+
         ResultVo resultVo = null;
         try {
             resultVo = qrCodePaymentSMOImpl.pay(reqJson.getString("communityId"), orderId,
@@ -126,6 +130,12 @@ public class QrCodePaymentCmd extends Cmd {
         //JSONObject paramOut = CallApiServiceFactory.postForApi(appId, reqJson, "fee.payFee", JSONObject.class, userId);
         reqJson.put("payOrderId",orderId);
 
+        orderId = CommonCache.getAndRemoveValue("qrCode_order"+orderId);
+
+        if(StringUtil.isEmpty(orderId)){
+            throw new CmdException("订单已经处理过");
+        }
+
         JSONObject paramOut = CallApiServiceFactory.postForApi(appId, reqJson, reqJson.getString("subServiceCode"), JSONObject.class, userId);
         cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(paramOut));
     }

+ 13 - 1
service-acct/src/main/java/com/java110/acct/smo/impl/NotifyPaymentV1InnerServiceSMOImpl.java

@@ -20,17 +20,22 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.acct.payment.IPaymentBusiness;
 import com.java110.acct.payment.IPaymentFactoryAdapt;
 import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.core.log.LoggerFactory;
+import com.java110.dto.log.LogSystemErrorDto;
 import com.java110.dto.payment.NotifyPaymentOrderDto;
 import com.java110.dto.payment.PaymentOrderDto;
 import com.java110.dto.paymentPool.PaymentPoolDto;
 import com.java110.intf.acct.INotifyPaymentV1InnerServiceSMO;
 import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
+import com.java110.po.log.LogSystemErrorPo;
+import com.java110.service.smo.ISaveSystemErrorSMO;
 import com.java110.utils.cache.CommonCache;
 import com.java110.utils.cache.MappingCache;
 import com.java110.utils.constant.WechatConstant;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.ExceptionUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,7 +63,8 @@ public class NotifyPaymentV1InnerServiceSMOImpl extends BaseServiceSMO implement
     protected static final String DEFAULT_NATIVE_QRCODE_PAYMENT_ADAPT = "wechatNativeQrcodePaymentFactory";// 默认微信通用支付
     @Autowired
     private IPaymentPoolV1InnerServiceSMO paymentPoolV1InnerServiceSMOImpl;
-
+    @Autowired
+    private ISaveSystemErrorSMO saveSystemErrorSMOImpl;
     /**
      * 通知类
      *
@@ -105,6 +111,12 @@ public class NotifyPaymentV1InnerServiceSMOImpl extends BaseServiceSMO implement
             return paymentOrderDto.getResponseEntity();
         } catch (Exception e) {
             logger.error("通知是配置异常", e);
+            LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+            logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+            logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_PAY_NOTICE);
+            logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+            saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+
             throw e;
         }
     }