Просмотр исходного кода

方便 微信支付后好对账 商品名称统一修改为 小区-房屋-费用名称 模式

java110 лет назад: 4
Родитель
Сommit
9027f39fbe

+ 34 - 1
service-api/src/main/java/com/java110/api/listener/fee/PayFeePreListener.java

@@ -9,7 +9,9 @@ import com.java110.core.annotation.Java110Listener;
 import com.java110.core.context.DataFlowContext;
 import com.java110.core.event.service.api.ServiceDataFlowEvent;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
 import com.java110.dto.app.AppDto;
+import com.java110.dto.community.CommunityDto;
 import com.java110.dto.fee.FeeAttrDto;
 import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
@@ -19,6 +21,7 @@ import com.java110.dto.repair.RepairDto;
 import com.java110.dto.repair.RepairUserDto;
 import com.java110.entity.center.AppService;
 import com.java110.entity.order.Orders;
+import com.java110.intf.community.ICommunityV1InnerServiceSMO;
 import com.java110.intf.community.IRepairUserInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.*;
@@ -35,7 +38,6 @@ import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.DateUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
@@ -104,6 +106,9 @@ public class PayFeePreListener extends AbstractServiceApiDataFlowListener {
         return HttpMethod.POST;
     }
 
+    @Autowired
+    private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
+
     @Override
     public void soService(ServiceDataFlowEvent event) throws ParseException {
 
@@ -244,10 +249,38 @@ public class PayFeePreListener extends AbstractServiceApiDataFlowListener {
         //这里调整为实收金额
         paramOut.put("receivableAmount", paramObj.getString("receivableAmount"));
         paramOut.put("receivedAmount", paramObj.getString("receivedAmount"));
+
+        FeeDto feeDto = (FeeDto) paramObj.get("feeInfo");
+        String feeName = getObjName(feeDto);
+        paramOut.put("feeName", feeName);
+
         responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
         dataFlowContext.setResponseEntity(responseEntity);
     }
 
+
+    private String getObjName(FeeDto feeDto) {
+        //查询小区名称
+        CommunityDto communityDto = new CommunityDto();
+        communityDto.setCommunityId(feeDto.getCommunityId());
+        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto);
+
+        Assert.listOnlyOne(communityDtos, "小区不存在");
+
+        List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos();
+        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+            return communityDtos.get(0).getName() + "-" + feeDto.getFeeName();
+        }
+
+        for (FeeAttrDto feeAttrDto : feeAttrDtos) {
+            if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDto.getSpecCd())) {
+                return communityDtos.get(0).getName() + "-" + feeAttrDto.getValue() + "-" + feeDto.getFeeName();
+            }
+        }
+
+        return communityDtos.get(0).getName() + "-" + feeDto.getFeeName();
+    }
+
     private void dealOwnerCartEndTime(JSONObject paramObj, JSONArray businesses) {
         //为停车费单独处理
         if (paramObj.containsKey("carPayerObjType")

+ 1 - 1
service-api/src/main/java/com/java110/api/smo/payment/IToPayOweFeeSMO.java

@@ -13,5 +13,5 @@ public interface IToPayOweFeeSMO {
      * @param pd
      * @return
      */
-    public ResponseEntity<String> toPay(IPageData pd);
+     ResponseEntity<String> toPay(IPageData pd);
 }

+ 9 - 6
service-api/src/main/java/com/java110/api/smo/payment/adapt/wechatPay/WechatPayAdapt.java

@@ -15,16 +15,15 @@
  */
 package com.java110.api.smo.payment.adapt.wechatPay;
 
-import com.java110.core.factory.WechatFactory;
-import com.java110.dto.smallWeChat.SmallWeChatDto;
 import com.java110.api.properties.WechatAuthProperties;
 import com.java110.api.smo.payment.adapt.IPayAdapt;
+import com.java110.core.factory.WechatFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.smallWeChat.SmallWeChatDto;
 import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.WechatConstant;
 import com.java110.utils.util.PayUtil;
 import com.java110.utils.util.StringUtil;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -153,13 +152,17 @@ public class WechatPayAdapt implements IPayAdapt {
                                                      String tradeType, double payAmount, String openid,
                                                      SmallWeChatDto smallWeChatDto, String notifyUrl) throws Exception {
 
-        String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
+        //String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
+
+        if (feeName.length() > 127) {
+            feeName = feeName.substring(0, 126);
+        }
 
         SortedMap<String, String> paramMap = new TreeMap<String, String>();
         paramMap.put("appid", smallWeChatDto.getAppId());
         paramMap.put("mch_id", smallWeChatDto.getMchId());
         paramMap.put("nonce_str", PayUtil.makeUUID(32));
-        paramMap.put("body", systemName + feeName);
+        paramMap.put("body", feeName);
         paramMap.put("out_trade_no", orderNum);
         paramMap.put("total_fee", PayUtil.moneyToIntegerStr(payAmount));
         paramMap.put("spbill_create_ip", PayUtil.getLocalIp());

+ 39 - 12
service-api/src/main/java/com/java110/api/smo/payment/impl/ToPayOweFeeSMOImpl.java

@@ -2,20 +2,23 @@ package com.java110.api.smo.payment.impl;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.java110.api.properties.WechatAuthProperties;
+import com.java110.api.smo.AppAbstractComponentSMO;
+import com.java110.api.smo.payment.IToPayOweFeeSMO;
+import com.java110.api.smo.payment.adapt.IPayAdapt;
 import com.java110.core.context.IPageData;
 import com.java110.core.context.PageData;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
 import com.java110.dto.app.AppDto;
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.fee.FeeAttrDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.owner.OwnerAppUserDto;
 import com.java110.dto.smallWeChat.SmallWeChatDto;
-import com.java110.api.properties.WechatAuthProperties;
-import com.java110.api.smo.AppAbstractComponentSMO;
-import com.java110.api.smo.payment.IToPayOweFeeSMO;
-import com.java110.api.smo.payment.adapt.IPayAdapt;
+import com.java110.intf.community.ICommunityV1InnerServiceSMO;
 import com.java110.utils.cache.CommonCache;
 import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.ServiceConstant;
 import com.java110.utils.constant.WechatConstant;
 import com.java110.utils.factory.ApplicationContextFactory;
 import com.java110.utils.util.Assert;
@@ -23,7 +26,6 @@ import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
@@ -33,6 +35,7 @@ import org.springframework.web.client.RestTemplate;
 
 import java.math.BigDecimal;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @Service("toPayOweFeeSMOImpl")
@@ -46,6 +49,9 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
     @Autowired
     private RestTemplate outRestTemplate;
 
+    @Autowired
+    private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
+
 
     @Autowired
     private WechatAuthProperties wechatAuthProperties;
@@ -56,7 +62,6 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
     }
 
 
-
     @Override
     protected void validate(IPageData pd, JSONObject paramIn) {
 
@@ -82,13 +87,13 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
         }
 
         String payObjType = "3333";
-        if(paramIn.containsKey("payObjType")){
+        if (paramIn.containsKey("payObjType")) {
             payObjType = paramIn.getString("payObjType");
         }
 
         //查询用户ID
         paramIn.put("userId", pd.getUserId());
-        String url = "/feeApi/listOweFees?page=1&row=50&communityId=" + paramIn.getString("communityId") + "&payObjId=" + paramIn.getString("roomId") + "&payObjType="+payObjType;
+        String url = "/feeApi/listOweFees?page=1&row=50&communityId=" + paramIn.getString("communityId") + "&payObjId=" + paramIn.getString("roomId") + "&payObjType=" + payObjType;
         responseEntity = super.callCenterService(restTemplate, pd, "", url, HttpMethod.GET);
 
         if (responseEntity.getStatusCode() != HttpStatus.OK) {
@@ -108,6 +113,8 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
             feePrice = new BigDecimal(fees.getJSONObject(feeIndex).getDouble("feePrice"));
             tmpMoney = tmpMoney.add(feePrice);
         }
+
+        String feeName = getFeeName(fees.getJSONObject(0));
         money = tmpMoney.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
         String appType = OwnerAppUserDto.APP_TYPE_WECHAT_MINA;
         if (AppDto.WECHAT_OWNER_APP_ID.equals(pd.getAppId())) {
@@ -140,8 +147,8 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
         payAdapt = StringUtil.isEmpty(payAdapt) ? DEFAULT_PAY_ADAPT : payAdapt;
         //支付适配器
         IPayAdapt tPayAdapt = ApplicationContextFactory.getBean(payAdapt, IPayAdapt.class);
-        Map result = tPayAdapt.java110Payment(outRestTemplate, paramIn.getString("feeName"), paramIn.getString("tradeType"),
-                orderId, money, openId, smallWeChatDto,wechatAuthProperties.getOweFeeNotifyUrl());
+        Map result = tPayAdapt.java110Payment(outRestTemplate, feeName, paramIn.getString("tradeType"),
+                orderId, money, openId, smallWeChatDto, wechatAuthProperties.getOweFeeNotifyUrl());
         responseEntity = new ResponseEntity(JSONObject.toJSONString(result), HttpStatus.OK);
         if (!"0".equals(result.get("code"))) {
             return responseEntity;
@@ -156,7 +163,27 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
         return responseEntity;
     }
 
+    private String getFeeName(JSONObject feeDto) {
+        //查询小区名称
+        CommunityDto communityDto = new CommunityDto();
+        communityDto.setCommunityId(feeDto.getString("communityId"));
+        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto);
+
+        Assert.listOnlyOne(communityDtos, "小区不存在");
 
+        JSONArray feeAttrDtos = feeDto.getJSONArray("feeAttrDtos");
+        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+            return communityDtos.get(0).getName() + "-" + feeDto.getString("feeName");
+        }
+
+        for (int attrIndex = 0; attrIndex < feeAttrDtos.size(); attrIndex++) {
+            if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDtos.getJSONObject(attrIndex).getString("specCd"))) {
+                return communityDtos.get(0).getName() + "-" + feeAttrDtos.getJSONObject(attrIndex).getString("value") + "-" + feeDto.getString("feeName");
+            }
+        }
+
+        return communityDtos.get(0).getName() + "-" + feeDto.getString("feeName");
+    }
 
 
     private SmallWeChatDto getSmallWechat(IPageData pd, JSONObject paramIn) {
@@ -168,7 +195,7 @@ public class ToPayOweFeeSMOImpl extends AppAbstractComponentSMO implements IToPa
                 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;

+ 2 - 1
service-api/src/main/java/com/java110/api/smo/payment/impl/ToPaySMOImpl.java

@@ -91,6 +91,7 @@ public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
         }
         JSONObject orderInfo = JSONObject.parseObject(responseEntity.getBody().toString());
         String orderId = orderInfo.getString("oId");
+        String feeName = orderInfo.getString("feeName");
         double money = Double.parseDouble(orderInfo.getString("receivedAmount"));
         //需要判断金额是否 == 0 等于0 直接掉缴费通知接口
         if (money <= 0) {
@@ -142,7 +143,7 @@ public class ToPaySMOImpl extends AppAbstractComponentSMO implements IToPaySMO {
         payAdapt = StringUtil.isEmpty(payAdapt) ? DEFAULT_PAY_ADAPT : payAdapt;
         //支付适配器
         IPayAdapt tPayAdapt = ApplicationContextFactory.getBean(payAdapt, IPayAdapt.class);
-        Map result = tPayAdapt.java110Payment(outRestTemplate, paramIn.getString("feeName"), paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto);
+        Map result = tPayAdapt.java110Payment(outRestTemplate, feeName, paramIn.getString("tradeType"), orderId, money, openId, smallWeChatDto);
         responseEntity = new ResponseEntity(JSONObject.toJSONString(result), HttpStatus.OK);
 
         return responseEntity;

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

@@ -7,14 +7,18 @@ import com.java110.core.context.ICmdDataFlowContext;
 import com.java110.core.event.cmd.AbstractServiceCmdListener;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
 import com.java110.core.smo.IComputeFeeSMO;
 import com.java110.dto.account.AccountDto;
+import com.java110.dto.community.CommunityDto;
 import com.java110.dto.couponUser.CouponUserDto;
+import com.java110.dto.fee.FeeAttrDto;
 import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
 import com.java110.dto.feeDiscount.ComputeDiscountDto;
 import com.java110.intf.acct.IAccountInnerServiceSMO;
 import com.java110.intf.acct.ICouponUserV1InnerServiceSMO;
+import com.java110.intf.community.ICommunityV1InnerServiceSMO;
 import com.java110.intf.community.IRepairUserInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.fee.*;
@@ -27,7 +31,6 @@ import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.DateUtil;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
@@ -89,6 +92,9 @@ public class PayFeePreCmd extends AbstractServiceCmdListener {
     @Autowired
     private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
 
+    @Autowired
+    private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         Assert.jsonObjectHaveKey(reqJson, "communityId", "请求报文中未包含communityId节点");
@@ -151,12 +157,37 @@ public class PayFeePreCmd extends AbstractServiceCmdListener {
         }
         paramOut.put("receivedAmount", receivedAmount);
 
+        String feeName = getObjName(feeDto);
+        paramOut.put("feeName", feeName);
+
         ResponseEntity<String> responseEntity = new ResponseEntity<>(paramOut.toJSONString(), HttpStatus.OK);
         reqJson.putAll(paramOut);
         CommonCache.setValue("payFeePre" + paramOut.getString("oId"), reqJson.toJSONString(), 24 * 60 * 60);
         cmdDataFlowContext.setResponseEntity(responseEntity);
     }
 
+    private String getObjName(FeeDto feeDto) {
+        //查询小区名称
+        CommunityDto communityDto = new CommunityDto();
+        communityDto.setCommunityId(feeDto.getCommunityId());
+        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunitys(communityDto);
+
+        Assert.listOnlyOne(communityDtos, "小区不存在");
+
+        List<FeeAttrDto> feeAttrDtos = feeDto.getFeeAttrDtos();
+        if (feeAttrDtos == null || feeAttrDtos.size() < 1) {
+            return communityDtos.get(0).getName() + "-" + feeDto.getFeeName();
+        }
+
+        for (FeeAttrDto feeAttrDto : feeAttrDtos) {
+            if (FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME.equals(feeAttrDto.getSpecCd())) {
+                return communityDtos.get(0).getName() + "-" + feeAttrDto.getValue() + "-" + feeDto.getFeeName();
+            }
+        }
+
+        return communityDtos.get(0).getName() + "-" + feeDto.getFeeName();
+    }
+
     /**
      * 考虑账户抵消
      *