1098226878@qq.com il y a 4 ans
Parent
commit
7a63fb637d

+ 75 - 7
service-api/src/main/java/com/java110/api/smo/AppAbstractComponentSMO.java

@@ -5,16 +5,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.core.component.AbstractComponentSMO;
 import com.java110.core.context.IPageData;
 import com.java110.api.properties.WechatAuthProperties;
+import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.ResponseConstant;
 import com.java110.utils.constant.ServiceCodeConstant;
 import com.java110.utils.constant.ServiceConstant;
 import com.java110.utils.exception.SMOException;
 import com.java110.utils.factory.ApplicationContextFactory;
-import com.java110.utils.util.Assert;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.StringUtil;
-import com.java110.utils.util.UrlParamToJsonUtil;
+import com.java110.utils.util.*;
 import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -23,9 +21,7 @@ import org.springframework.http.*;
 import org.springframework.web.client.HttpStatusCodeException;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public abstract class AppAbstractComponentSMO extends AbstractComponentSMO {
 
@@ -51,7 +47,79 @@ public abstract class AppAbstractComponentSMO extends AbstractComponentSMO {
 
     private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
 
+    /**
+     * 调用中心服务
+     *
+     * @return
+     */
+    protected ResponseEntity<String> callCenterService(Map<String, String> headers, String param, String url, HttpMethod httpMethod) {
+
+        ResponseEntity<String> responseEntity = null;
+        if (StringUtil.isEmpty(param)) {
+            param = UrlParamToJsonUtil.getJson(url).toJSONString();
+        }
+
+        if (!headers.containsKey(CommonConstant.HTTP_USER_ID)) {
+            headers.put(CommonConstant.HTTP_USER_ID, "-1");
+        }
+
+        headers.put(CommonConstant.USER_ID, "-1");
+
+        if (!headers.containsKey(CommonConstant.HTTP_USER_ID)) {
+            headers.put(CommonConstant.HTTP_USER_ID, "-1");
+        }
+        if (!headers.containsKey(CommonConstant.HTTP_TRANSACTION_ID)) {
+            headers.put(CommonConstant.HTTP_TRANSACTION_ID, GenerateCodeFactory.getUUID());
+        }
+        if (!headers.containsKey(CommonConstant.HTTP_REQ_TIME)) {
+            headers.put(CommonConstant.HTTP_REQ_TIME, DateUtil.getNowDefault());
+        }
+        if (!headers.containsKey(CommonConstant.HTTP_SIGN)) {
+            headers.put(CommonConstant.HTTP_SIGN, "");
+        }
+
+        if (url.indexOf("?") > -1) {
+            url = url.substring(0, url.indexOf("?"));
+        }
+        headers.put(CommonConstant.HTTP_SERVICE, url);
+        headers.put(CommonConstant.HTTP_METHOD, CommonConstant.getHttpMethodStr(httpMethod));
 
+        if (HttpMethod.GET == httpMethod) {
+            initUrlParam(JSONObject.parseObject(param), headers);
+        }
+        if (HttpMethod.GET == httpMethod) {
+            headers.put("REQUEST_URL", "http://127.0.0.1:8008/" + url + mapToUrlParam(JSONObject.parseObject(param)));
+        }
+        try {
+            responseEntity = apiServiceSMOImpl.service(param, headers);
+        } catch (HttpStatusCodeException e) { //这里spring 框架 在4XX 或 5XX 时抛出 HttpServerErrorException 异常,需要重新封装一下
+            responseEntity = new ResponseEntity<String>(e.getResponseBodyAsString(), e.getStatusCode());
+        } catch (Exception e) {
+            responseEntity = new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+        } finally {
+            logger.debug("请求地址为,{} 请求中心服务信息,{},中心服务返回信息,{}", url, param, responseEntity);
+        }
+        return responseEntity;
+    }
+
+    /**
+     * 将url参数写到header map中
+     *
+     * @param paramIn
+     */
+    protected void initUrlParam(Map paramIn, Map headers) {
+        /*put real ip address*/
+
+        if (paramIn != null && !paramIn.isEmpty()) {
+            Set<String> keys = paramIn.keySet();
+            for (Iterator it = keys.iterator(); it.hasNext(); ) {
+                String key = (String) it.next();
+                headers.put(key, paramIn.get(key));
+            }
+        }
+
+
+    }
     /**
      * 调用中心服务
      *

+ 30 - 5
service-api/src/main/java/com/java110/api/smo/payment/impl/ToPaySMOImpl.java

@@ -12,11 +12,13 @@ import com.java110.api.smo.AppAbstractComponentSMO;
 import com.java110.api.smo.payment.IToPaySMO;
 import com.java110.api.smo.payment.adapt.IPayAdapt;
 import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.CommonConstant;
 import com.java110.utils.constant.ServiceConstant;
 import com.java110.utils.constant.WechatConstant;
 import com.java110.utils.factory.ApplicationContextFactory;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -27,16 +29,16 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 @Service("toPaySMOImpl")
 public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
     private static final Logger logger = LoggerFactory.getLogger(AppAbstractComponentSMO.class);
 
 
-
-
     @Autowired
     private RestTemplate restTemplate;
 
@@ -91,7 +93,22 @@ public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
         String orderId = orderInfo.getString("oId");
         double money = Double.parseDouble(orderInfo.getString("receivedAmount"));
         //需要判断金额是否 == 0 等于0 直接掉缴费通知接口
-
+        if (money <= 0) {
+
+            JSONObject paramOut = new JSONObject();
+            paramOut.put("oId", orderId);
+            String urlOut = "fee.payFeeConfirm";
+            responseEntity = this.callCenterService(getHeaders("-1",pd.getAppId()), paramOut.toJSONString(), urlOut, HttpMethod.POST);
+            JSONObject param = new JSONObject();
+            if (responseEntity.getStatusCode() != HttpStatus.OK) {
+                param.put("code","101");
+                param.put("msg","扣费为0回调失败");
+                return new ResponseEntity(JSONObject.toJSONString(param), HttpStatus.OK);
+            }
+            param.put("code","100");
+            param.put("msg","扣费为0回调成功");
+            return new ResponseEntity(JSONObject.toJSONString(param), HttpStatus.OK);
+        }
         String appType = OwnerAppUserDto.APP_TYPE_WECHAT_MINA;
         if (AppDto.WECHAT_OWNER_APP_ID.equals(pd.getAppId())) {
             appType = OwnerAppUserDto.APP_TYPE_WECHAT;
@@ -128,7 +145,15 @@ public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
         return responseEntity;
     }
 
-
+    private Map<String, String> getHeaders(String userId,String appId) {
+        Map<String, String> headers = new HashMap<>();
+        headers.put(CommonConstant.HTTP_APP_ID.toLowerCase(), appId);
+        headers.put(CommonConstant.HTTP_USER_ID.toLowerCase(), userId);
+        headers.put(CommonConstant.HTTP_TRANSACTION_ID.toLowerCase(), UUID.randomUUID().toString());
+        headers.put(CommonConstant.HTTP_REQ_TIME.toLowerCase(), DateUtil.getDefaultFormateTimeString(new Date()));
+        headers.put(CommonConstant.HTTP_SIGN.toLowerCase(), "");
+        return headers;
+    }
     private SmallWeChatDto getSmallWechat(IPageData pd, JSONObject paramIn) {
 
         ResponseEntity responseEntity = null;
@@ -138,7 +163,7 @@ public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
                 pd.getAppId());
         responseEntity = this.callCenterService(restTemplate, pd, "",
                 "smallWeChat.listSmallWeChats?appId="
-                        + paramIn.getString("appId") + "&page=1&row=1&communityId="+paramIn.getString("communityId"), HttpMethod.GET);
+                        + paramIn.getString("appId") + "&page=1&row=1&communityId=" + paramIn.getString("communityId"), HttpMethod.GET);
 
         if (responseEntity.getStatusCode() != HttpStatus.OK) {
             return null;

+ 1 - 1
service-fee/src/main/java/com/java110/fee/cmd/fee/PayFeePreCmd.java

@@ -46,7 +46,7 @@ import java.util.Map;
  * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
  * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
  */
-@Java110Cmd(serviceCode = "fee.payFeePre")
+@Java110Cmd(serviceCode = "fee.payFeePreNew")
 public class PayFeePreCmd extends AbstractServiceCmdListener {
     private static Logger logger = LoggerFactory.getLogger(PayFeePreCmd.class);