Blame view

service-acct/src/main/java/com/java110/acct/cmd/payment/CheckPayFinishCmd.java 4.98 KB
88e030b7   王彪总   init project
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
  package com.java110.acct.cmd.payment;
  
  import com.alibaba.fastjson.JSONObject;
  import com.java110.acct.smo.IQrCodePaymentSMO;
  import com.java110.core.annotation.Java110Cmd;
  import com.java110.core.context.ICmdDataFlowContext;
  import com.java110.core.event.cmd.Cmd;
  import com.java110.core.event.cmd.CmdEvent;
  import com.java110.core.factory.CallApiServiceFactory;
  import com.java110.dto.payment.PaymentPoolDto;
  import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
  import com.java110.utils.cache.CommonCache;
  import com.java110.utils.constant.CommonConstant;
  import com.java110.utils.exception.CmdException;
  import com.java110.utils.factory.ApplicationContextFactory;
  import com.java110.utils.util.Assert;
  import com.java110.utils.util.StringUtil;
  import com.java110.vo.ResultVo;
  import org.springframework.beans.factory.annotation.Autowired;
  
  import java.util.List;
  
  /**
   * 扫码付
   */
  @Java110Cmd(serviceCode = "payment.checkPayFinish")
  public class CheckPayFinishCmd extends Cmd {
  
  
      private IQrCodePaymentSMO qrCodePaymentSMOImpl;
  
      @Autowired
      private IPaymentPoolV1InnerServiceSMO paymentPoolV1InnerServiceSMOImpl;
  
      @Override
      public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
          Assert.hasKeyAndValue(reqJson, "authCode", "未包含授权码");
          Assert.hasKeyAndValue(reqJson, "subServiceCode", "未包含支付接口");
          Assert.hasKeyAndValue(reqJson, "paymentPoolId", "未包含支付参数");
  
  
      }
  
      @Override
      public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
          String orderId = reqJson.getString("orderId");
          double receivedAmount = Double.parseDouble(reqJson.getString("receivedAmount"));
          String authCode = reqJson.getString("authCode");
          if (StringUtil.isEmpty(authCode) || authCode.length() < 2) {
              throw new IllegalArgumentException("授权码错误");
          }
          // String payQrAdapt = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_QR_ADAPT);
          String payQrAdapt = computeAdapt(reqJson.getString("subServiceCode"),reqJson);//MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_QR_ADAPT);
  
  
          if (StringUtil.isEmpty(payQrAdapt)) {
              int pre = Integer.parseInt(authCode.substring(0, 2));
              if (pre > 24 && pre < 31) { // 支付宝
                  qrCodePaymentSMOImpl = ApplicationContextFactory.getBean("qrCodeAliPaymentAdapt", IQrCodePaymentSMO.class);
              } else {
                  qrCodePaymentSMOImpl = ApplicationContextFactory.getBean("qrCodeWechatPaymentAdapt", IQrCodePaymentSMO.class);
              }
          } else {
              qrCodePaymentSMOImpl = ApplicationContextFactory.getBean(payQrAdapt, IQrCodePaymentSMO.class);
          }
          ResultVo resultVo = null;
          try {
              resultVo = qrCodePaymentSMOImpl.checkPayFinish(reqJson.getString("communityId"), orderId,reqJson.getString("paymentPoolId"));
          } catch (Exception e) {
              cmdDataFlowContext.setResponseEntity(ResultVo.error(e.getLocalizedMessage()));
              return;
          }
          if (ResultVo.CODE_OK != resultVo.getCode()) {
              cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(resultVo));
              return;
          }
          String appId = cmdDataFlowContext.getReqHeaders().get(CommonConstant.APP_ID);
          String userId = cmdDataFlowContext.getReqHeaders().get(CommonConstant.USER_ID);
          //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));
      }
  
      /**
       * 计算适配器
       *
       * @param reqJson
       * @return
       */
      private String computeAdapt(String business, JSONObject reqJson) {
  
          String communityId = reqJson.getString("communityId");
  
  
9750b443   王彪总   fix(config): 更新配置...
103
          //todo 按项目查询 支付信息
88e030b7   王彪总   init project
104
105
106
107
108
109
110
          PaymentPoolDto paymentPoolDto = new PaymentPoolDto();
          paymentPoolDto.setCommunityId(communityId);
          paymentPoolDto.setPayType(PaymentPoolDto.PAY_TYPE_COMMUNITY);
          paymentPoolDto.setPpId(reqJson.getString("paymentPoolId"));
          paymentPoolDto.setState("Y");
          List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto);
          if (paymentPoolDtos == null || paymentPoolDtos.isEmpty()) {
9750b443   王彪总   fix(config): 更新配置...
111
              throw new IllegalArgumentException("项目未配置支付信息");
88e030b7   王彪总   init project
112
113
114
115
116
117
118
119
          }
  
          reqJson.put("paymentPoolId", paymentPoolDtos.get(0).getPpId());
          return paymentPoolDtos.get(0).getBeanQrcode();
      }
  
  
  }