wuxw
2024-06-13 7a9ac5d05cb708c497521f0938dc96d4f717a239
优化房屋收费页面
2个文件已删除
10个文件已修改
6个文件已添加
1160 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/integral/GiftIntegralDto.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/integral/IntegralRuleConfigDto.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/payment/PaymentOrderDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/smo/IComputeFeeSMO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/job/IMallInnerServiceSMO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/PayUtil.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/cmd/integral/ComputePayFeeIntegralCmd.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/integral/IComputeGiftIntegral.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/integral/IGiftIntegral.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/integral/impl/ComputeGiftIntegralImpl.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/integral/impl/GiftIntegralImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatIntegralShareAcct.java 281 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatPaymentFactoryAdapt.java 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-acct/src/main/java/com/java110/acct/payment/business/payFee/PayFeePaymentBusiness.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/payment/integral/PayFeeGiftIntegralAdapt.java 323 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/adapt/payment/integral/package-info.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/smo/impl/MallInnerServiceSMOImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/integral/GiftIntegralDto.java
New file
@@ -0,0 +1,105 @@
package com.java110.dto.integral;
import java.io.Serializable;
public class GiftIntegralDto implements Serializable {
    public GiftIntegralDto() {
    }
    public GiftIntegralDto(int integral, double money) {
        this.integral = integral;
        this.money = money;
    }
    private int integral;
    private double money;
    private String platformMchId;
    private String platformMchName;
    private String appId;
    private String mchId;
    private String mchKey;
    private String certPath;
    private String userId;
    public int getIntegral() {
        return integral;
    }
    public void setIntegral(int integral) {
        this.integral = integral;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    public String getPlatformMchId() {
        return platformMchId;
    }
    public void setPlatformMchId(String platformMchId) {
        this.platformMchId = platformMchId;
    }
    public String getPlatformMchName() {
        return platformMchName;
    }
    public void setPlatformMchName(String platformMchName) {
        this.platformMchName = platformMchName;
    }
    public String getAppId() {
        return appId;
    }
    public void setAppId(String appId) {
        this.appId = appId;
    }
    public String getMchId() {
        return mchId;
    }
    public void setMchId(String mchId) {
        this.mchId = mchId;
    }
    public String getMchKey() {
        return mchKey;
    }
    public void setMchKey(String mchKey) {
        this.mchKey = mchKey;
    }
    public String getCertPath() {
        return certPath;
    }
    public void setCertPath(String certPath) {
        this.certPath = certPath;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
}
java110-bean/src/main/java/com/java110/dto/integral/IntegralRuleConfigDto.java
@@ -15,10 +15,9 @@
 **/
public class IntegralRuleConfigDto extends PageDto implements Serializable {
    //计算公式 1001 面积*单价 2002 金额乘以单价 3003 固定积分
    public static final String COMPUTING_FORMULA_AREA = "1001";
    public static final String COMPUTING_FORMULA_MONEY = "2002";
    public static final String COMPUTING_FORMULA_FIXED = "3003";
    //计算公式 1001 金额 2002 月份
    public static final String COMPUTING_FORMULA_MONEY = "1001";
    public static final String COMPUTING_FORMULA_MONTH = "2002";
    public static final String SCALE_UP = "3";
    public static final String SCALE_DOWN = "4";
java110-bean/src/main/java/com/java110/dto/payment/PaymentOrderDto.java
@@ -1,5 +1,6 @@
package com.java110.dto.payment;
import com.java110.dto.integral.GiftIntegralDto;
import org.springframework.http.ResponseEntity;
import java.io.Serializable;
@@ -9,6 +10,8 @@
 * 封装实体类
 */
public class PaymentOrderDto implements Serializable{
    public static final String SHARE_ACCT = "Y";
    private String orderId;
@@ -24,6 +27,10 @@
    private String openId;
    private String userId;
    private String isShare;
    private GiftIntegralDto giftIntegralDto;
    private ResponseEntity<String> responseEntity;
@@ -93,4 +100,20 @@
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getIsShare() {
        return isShare;
    }
    public void setIsShare(String isShare) {
        this.isShare = isShare;
    }
    public GiftIntegralDto getGiftIntegralDto() {
        return giftIntegralDto;
    }
    public void setGiftIntegralDto(GiftIntegralDto giftIntegralDto) {
        this.giftIntegralDto = giftIntegralDto;
    }
}
java110-core/src/main/java/com/java110/core/smo/IComputeFeeSMO.java
@@ -206,6 +206,5 @@
     */
    void dealRentRateCustEndTime(FeeDto feeDto, Date custEndTime);
    long computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, JSONObject reqJson);
}
java110-core/src/main/java/com/java110/core/smo/impl/ComputeFeeSMOImpl.java
@@ -2052,33 +2052,7 @@
    }
    @Override
    public long computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, JSONObject reqJson) {
        String computingFormula = integralRuleConfigDto.getComputingFormula();
        BigDecimal amountDec = null;
        long amount = 0;
        if (IntegralRuleConfigDto.COMPUTING_FORMULA_AREA.equals(computingFormula)) { //面积乘以单价
            BigDecimal areaDec = new BigDecimal(Double.parseDouble(reqJson.getString("area")));
            BigDecimal squarePriceDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getSquarePrice()));
            amountDec = areaDec.multiply(squarePriceDec).setScale(2, BigDecimal.ROUND_HALF_UP);
        } else if (IntegralRuleConfigDto.COMPUTING_FORMULA_MONEY.equals(computingFormula)) { // 金额乘以单价
            BigDecimal aDec = new BigDecimal(Double.parseDouble(reqJson.getString("amount")));
            BigDecimal squarePriceDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getSquarePrice()));
            amountDec = aDec.multiply(squarePriceDec).setScale(2, BigDecimal.ROUND_HALF_UP);
        } else if (IntegralRuleConfigDto.COMPUTING_FORMULA_FIXED.equals(computingFormula)) { // 固定积分
            amountDec = new BigDecimal(Double.parseDouble(integralRuleConfigDto.getAdditionalAmount()));
        } else {
            amountDec = new BigDecimal(0);
        }
        if (IntegralRuleConfigDto.SCALE_UP.equals(integralRuleConfigDto.getScale())) {
            amount = new Double(Math.ceil(amountDec.doubleValue())).longValue();
        } else {
            amount = new Double(Math.floor(amountDec.doubleValue())).longValue();
        }
        integralRuleConfigDto.setQuantity(amount + "");
        return amount;
    }
    /**
     * 租金处理
java110-interface/src/main/java/com/java110/intf/job/IMallInnerServiceSMO.java
@@ -48,4 +48,8 @@
    @RequestMapping(value = "/sendUserInfo", method = RequestMethod.POST)
    ResultVo sendUserInfo(@RequestBody UserDto userDto);
    @RequestMapping(value = "/computeIntegralMoney", method = RequestMethod.POST)
    double computeIntegralMoney(@RequestBody int quantity);
}
java110-utils/src/main/java/com/java110/utils/util/PayUtil.java
@@ -14,6 +14,8 @@
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -411,4 +413,51 @@
            return money;
        }
    }
    public static String createSignSha256(SortedMap<String, String> parameters, String key) {
        StringBuffer sb = new StringBuffer();
        Set es = parameters.entrySet();
        Iterator<?> it = es.iterator();
        while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            String k = (String) entry.getKey();
            if (entry.getValue() != null || !"".equals(entry.getValue())) {
                String v = String.valueOf(entry.getValue());
                if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
                    sb.append(k + "=" + v + "&");
                }
            }
        }
        sb.append("key=" + key);
        logger.debug("加密前串:" + sb.toString());
        //String sign = md5(sb.toString()).toUpperCase();
        String sign = "";
        try {
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            //  utf-8 : 解决中文加密不一致问题,必须指定编码格式
            sign = byteArrayToHexString(sha256_HMAC.doFinal(sb.toString().getBytes("utf-8"))).toUpperCase();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sign;
    }
    /**
     * 将加密后的字节数组转换成字符串
     *
     * @param b 字节数组
     * @return 字符串
     */
    private static String byteArrayToHexString(byte[] b) {
        StringBuilder hs = new StringBuilder();
        String stmp;
        for (int n = 0; b != null && n < b.length; n++) {
            stmp = Integer.toHexString(b[n] & 0XFF);
            if (stmp.length() == 1)
                hs.append('0');
            hs.append(stmp);
        }
        return hs.toString().toLowerCase();
    }
}
service-acct/src/main/java/com/java110/acct/cmd/integral/ComputePayFeeIntegralCmd.java
@@ -121,9 +121,9 @@
    private long computeIntegralQuantity(List<IntegralRuleConfigDto> integralRuleConfigDtos,JSONObject reqJson) {
        long quantity = 0;
        for(IntegralRuleConfigDto integralRuleConfigDto:integralRuleConfigDtos){
            quantity += computeFeeSMOImpl.computeOneIntegralQuantity(integralRuleConfigDto,reqJson);
        }
//        for(IntegralRuleConfigDto integralRuleConfigDto:integralRuleConfigDtos){
//            quantity += computeFeeSMOImpl.computeOneIntegralQuantity(integralRuleConfigDto,reqJson);
//        }
        return quantity;
    }
service-acct/src/main/java/com/java110/acct/integral/IComputeGiftIntegral.java
New file
@@ -0,0 +1,16 @@
package com.java110.acct.integral;
import com.java110.dto.integral.GiftIntegralDto;
public interface IComputeGiftIntegral {
    /**
     * 赠送积分和金额计算
     *
     * @param payMoney
     * @param month
     * @param communityId
     * @return
     */
    GiftIntegralDto gift(double payMoney, int month, String communityId);
}
service-acct/src/main/java/com/java110/acct/integral/IGiftIntegral.java
New file
@@ -0,0 +1,8 @@
package com.java110.acct.integral;
import com.java110.dto.integral.GiftIntegralDto;
public interface IGiftIntegral {
    void gift(GiftIntegralDto giftIntegralDto);
}
service-acct/src/main/java/com/java110/acct/integral/impl/ComputeGiftIntegralImpl.java
New file
@@ -0,0 +1,97 @@
package com.java110.acct.integral.impl;
import com.alibaba.fastjson.JSONObject;
import com.java110.acct.integral.IComputeGiftIntegral;
import com.java110.dto.integral.GiftIntegralDto;
import com.java110.dto.integral.IntegralRuleConfigDto;
import com.java110.dto.integral.IntegralRuleFeeDto;
import com.java110.intf.acct.IIntegralRuleConfigV1InnerServiceSMO;
import com.java110.intf.acct.IIntegralRuleFeeV1InnerServiceSMO;
import com.java110.intf.job.IMallInnerServiceSMO;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.ListUtil;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
 * 计算赠送积分
 */
@Service
public class ComputeGiftIntegralImpl implements IComputeGiftIntegral {
    private static final String MALL_DOMAIN = "MALL";
    @Autowired
    private IMallInnerServiceSMO mallInnerServiceSMOImpl;
    @Autowired
    private IIntegralRuleFeeV1InnerServiceSMO integralRuleFeeV1InnerServiceSMOImpl;
    @Autowired
    private IIntegralRuleConfigV1InnerServiceSMO integralRuleConfigV1InnerServiceSMOImpl;
    @Override
    public GiftIntegralDto gift(double payMoney, int month, String communityId) {
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
            return new GiftIntegralDto(0, 0);
        }
        IntegralRuleFeeDto integralRuleFeeDto = new IntegralRuleFeeDto();
        integralRuleFeeDto.setCurTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        integralRuleFeeDto.setCommunityId(communityId);
        List<IntegralRuleFeeDto> integralRuleFeeDtos = integralRuleFeeV1InnerServiceSMOImpl.queryIntegralRuleFees(integralRuleFeeDto);
        if (ListUtil.isNull(integralRuleFeeDtos)) {
            return new GiftIntegralDto(0, 0);
        }
        List<String> ruleIds = new ArrayList<>();
        for (IntegralRuleFeeDto tmpCouponRuleFeeDto : integralRuleFeeDtos) {
            ruleIds.add(tmpCouponRuleFeeDto.getRuleId());
        }
        IntegralRuleConfigDto integralRuleConfigDto = new IntegralRuleConfigDto();
        integralRuleConfigDto.setRuleIds(ruleIds.toArray(new String[ruleIds.size()]));
        List<IntegralRuleConfigDto> integralRuleConfigDtos = integralRuleConfigV1InnerServiceSMOImpl.queryIntegralRuleConfigs(integralRuleConfigDto);
        if (ListUtil.isNull(integralRuleConfigDtos)) {
            return new GiftIntegralDto(0, 0);
        }
        int quantity = computeOneIntegralQuantity(integralRuleConfigDtos.get(0), payMoney, month);
        if(quantity <= 0){
            return new GiftIntegralDto(0, 0);
        }
        double money = mallInnerServiceSMOImpl.computeIntegralMoney(quantity);
        return new GiftIntegralDto(quantity, money);
    }
    public int computeOneIntegralQuantity(IntegralRuleConfigDto integralRuleConfigDto, double payMoney, int month) {
        String computingFormula = integralRuleConfigDto.getComputingFormula();
        int amount = 0;
        if (IntegralRuleConfigDto.COMPUTING_FORMULA_MONEY.equals(computingFormula)) { // 满金额送积分
            if (payMoney >= Double.parseDouble(integralRuleConfigDto.getSquarePrice())) {
                amount = Integer.parseInt(integralRuleConfigDto.getAdditionalAmount());
            }
        } else if (IntegralRuleConfigDto.COMPUTING_FORMULA_MONTH.equals(computingFormula)) { // 满月送积分
            if (month >= Double.parseDouble(integralRuleConfigDto.getSquarePrice())) {
                amount = Integer.parseInt(integralRuleConfigDto.getAdditionalAmount());
            }
        }
        return amount;
    }
}
service-acct/src/main/java/com/java110/acct/integral/impl/GiftIntegralImpl.java
New file
@@ -0,0 +1,48 @@
package com.java110.acct.integral.impl;
import com.java110.acct.integral.IGiftIntegral;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.dto.fee.FeeAttrDto;
import com.java110.dto.integral.GiftIntegralDto;
import com.java110.intf.acct.IIntegralGiftDetailV1InnerServiceSMO;
import com.java110.po.integral.IntegralGiftDetailPo;
import com.java110.utils.cache.MappingCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class GiftIntegralImpl implements IGiftIntegral {
    private static final String MALL_DOMAIN = "MALL";
    @Autowired
    private IIntegralGiftDetailV1InnerServiceSMO integralGiftDetailV1InnerServiceSMOImp;
    @Override
    public void gift(GiftIntegralDto giftIntegralDto) {
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
            return ;
        }
        //先加明细
//        IntegralGiftDetailPo integralGiftDetailPo = new IntegralGiftDetailPo();
//        integralGiftDetailPo.setCommunityId(giftIntegralDto.get());
//        integralGiftDetailPo.setAcctId(accountDto.getAcctId());
//        integralGiftDetailPo.setAcctName(accountDto.getAcctName());
//        integralGiftDetailPo.setAcctDetailId("-1");
//        integralGiftDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId("11"));
//        integralGiftDetailPo.setConfigId(integralRuleConfigDto.getConfigId());
//        integralGiftDetailPo.setConfigName(integralRuleConfigDto.getConfigName());
//        integralGiftDetailPo.setRuleId(integralRuleConfigDto.getRuleId());
//        integralGiftDetailPo.setRuleName(integralRuleConfigDto.getRuleName());
//        integralGiftDetailPo.setQuantity(integralRuleConfigDto.getQuantity());
//        integralGiftDetailPo.setCreateUserId(FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_OWNER_ID));
//        integralGiftDetailPo.setUserName(FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_OWNER_NAME));
//        integralGiftDetailPo.setTel(FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_OWNER_LINK));
//        integralGiftDetailV1InnerServiceSMOImpl.saveIntegralGiftDetail(integralGiftDetailPo);
    }
}
service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatIntegralShareAcct.java
New file
@@ -0,0 +1,281 @@
package com.java110.acct.payment.adapt.wechat;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.acct.integral.IGiftIntegral;
import com.java110.core.client.FtpUploadTemplate;
import com.java110.core.client.OssUploadTemplate;
import com.java110.core.client.RestTemplate;
import com.java110.core.log.LoggerFactory;
import com.java110.dto.file.FileDto;
import com.java110.dto.integral.GiftIntegralDto;
import com.java110.dto.payment.PaymentOrderDto;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.constant.MappingConstant;
import com.java110.utils.util.OSSUtil;
import com.java110.utils.util.PayUtil;
import com.java110.utils.util.StringUtil;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import javax.net.ssl.SSLContext;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
@Service
public class WechatIntegralShareAcct {
    private static final Logger logger = LoggerFactory.getLogger(WechatIntegralShareAcct.class);
    //微信支付
    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
    // 微信服务商支付开关
    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
    //开关ON打开
    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
    // 添加分账接收方API
    private static final String ADD_RECEIVER_URL = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
    private static final String FINISH_RECEIVER_URL = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingfinish";
    // 删除分账接收方api
    private static final String DELETE_RECEIVER_URL = "https://api.mch.weixin.qq.com/pay/profitsharingremovereceiver";
    // 请求分账API
    private static final String PROFIT_SHARING_URL = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing";
    @Autowired
    private RestTemplate outRestTemplate;
    @Autowired
    private FtpUploadTemplate ftpUploadTemplate;
    @Autowired
    private OssUploadTemplate ossUploadTemplate;
    @Autowired
    private IGiftIntegral giftIntegralImpl;
    public JSONArray addReceivers(GiftIntegralDto giftIntegralDto) throws Exception {
        JSONArray params = new JSONArray();
        JSONObject param = new JSONObject();
        param.put("type", "MERCHANT_ID");
        param.put("account", giftIntegralDto.getPlatformMchId());
        param.put("amount", PayUtil.moneyToIntegerStr(giftIntegralDto.getMoney()));
        param.put("description", "积分费用");
        params.add(param);
        JSONObject paramIn = new JSONObject();
        paramIn.put("type", "MERCHANT_ID");
        paramIn.put("account", giftIntegralDto.getPlatformMchId());
        paramIn.put("name", giftIntegralDto.getPlatformMchName());
        paramIn.put("relation_type", "PARTNER");
        SortedMap<String, String> paramMap = new TreeMap<String, String>();
        paramMap.put("appid", giftIntegralDto.getAppId());
        paramMap.put("mch_id", giftIntegralDto.getMchId());
        paramMap.put("nonce_str", PayUtil.makeUUID(32));
        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
            paramMap.put("appid", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_APP_ID));  //服务商appid,是服务商注册时公众号的id
            paramMap.put("mch_id", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_MCH_ID));  //服务商商户号
            //paramMap.put("sub_appid", smallWeChatDto.getAppId());//起调小程序appid
            paramMap.put("sub_mch_id", giftIntegralDto.getMchId());//起调小程序的商户号
        }
        paramMap.put("receiver", paramIn.toJSONString());
        paramMap.put("sign", PayUtil.createSignSha256(paramMap, giftIntegralDto.getMchKey()));
        //转换为xml
        String xmlData = PayUtil.mapToXml(paramMap);
        logger.debug("调用添加接收方接口" + xmlData);
        ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(
                ADD_RECEIVER_URL, xmlData, String.class);
        logger.debug("添加接收方接口返回" + responseEntity);
        System.out.println("调用添加接收方接口" + xmlData + ";添加接收方接口返回" + responseEntity);
        return params;
    }
    /**
     * 申请分账
     *
     * @return
     * @throws Exception
     */
    public JSONObject applyProfileShare(PaymentOrderDto paymentOrderDto, GiftIntegralDto giftIntegralDto, JSONArray params) throws Exception {
        SortedMap<String, String> paramMap = new TreeMap<String, String>();
        paramMap.put("appid", giftIntegralDto.getAppId());
        paramMap.put("mch_id", giftIntegralDto.getMchId());
        paramMap.put("nonce_str", PayUtil.makeUUID(32));
        paramMap.put("transaction_id", paymentOrderDto.getTransactionId());
        paramMap.put("out_order_no", "FZ" + paymentOrderDto.getOrderId());
        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
            paramMap.put("appid", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_APP_ID));  //服务商appid,是服务商注册时公众号的id
            paramMap.put("mch_id", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_MCH_ID));  //服务商商户号
            //paramMap.put("sub_appid", smallWeChatDto.getAppId());//起调小程序appid
            paramMap.put("sub_mch_id", giftIntegralDto.getMchId());//起调小程序的商户号
        }
        paramMap.put("receivers", params.toJSONString());
        paramMap.put("sign", PayUtil.createSignSha256(paramMap, giftIntegralDto.getMchKey()));
        //转换为xml
        String xmlData = PayUtil.mapToXml(paramMap);
        JSONObject paramOut = request(PROFIT_SHARING_URL, xmlData, giftIntegralDto, paramMap.get("mch_id"));
        logger.debug("请求分账 信息{},返回分账信息{}", xmlData, paramOut.toJSONString());
        return paramOut;
    }
    public void deleteReceivers(GiftIntegralDto giftIntegralDto) throws Exception {
        JSONArray deleteParams = new JSONArray();
        JSONObject param = null;
        Double amount = 0.0;
        JSONObject paramIn = new JSONObject();
        paramIn.put("type", "MERCHANT_ID");
        paramIn.put("account", giftIntegralDto.getPlatformMchId());
        deleteParams.add(paramIn);
        SortedMap<String, String> paramMap = new TreeMap<String, String>();
        paramMap.put("appid", giftIntegralDto.getAppId());
        paramMap.put("mch_id", giftIntegralDto.getMchId());
        paramMap.put("nonce_str", PayUtil.makeUUID(32));
        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
            paramMap.put("appid", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_APP_ID));  //服务商appid,是服务商注册时公众号的id
            paramMap.put("mch_id", MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_MCH_ID));  //服务商商户号
            // paramMap.put("sub_appid", smallWeChatDto.getAppId());//起调小程序appid
            paramMap.put("sub_mch_id", giftIntegralDto.getMchId());//起调小程序的商户号
        }
        paramMap.put("receiver", deleteParams.toJSONString());
        paramMap.put("sign", PayUtil.createSignSha256(paramMap, giftIntegralDto.getMchKey()));
        //转换为xml
        String xmlData = PayUtil.mapToXml(paramMap);
        logger.debug("调用添加接收方接口" + xmlData);
        ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(
                DELETE_RECEIVER_URL, xmlData, String.class);
        logger.debug("添加接收方接口返回" + responseEntity);
    }
    private JSONObject request(String url, String reqData, GiftIntegralDto giftIntegralDto, String key) {
        ByteArrayInputStream inputStream = new ByteArrayInputStream(getPkcs12(giftIntegralDto.getCertPath()));
        JSONObject paramOut = null;
        CloseableHttpClient httpclient = null;
        CloseableHttpResponse response = null;
        try {
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            //这里写密码..默认是你的MCHID
            keyStore.load(inputStream, key.toCharArray());
            SSLContext sslcontext = SSLContexts.custom()
                    //这里也是写密码的
                    .loadKeyMaterial(keyStore, key.toCharArray())
                    .build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext,
                    SSLConnectionSocketFactory.getDefaultHostnameVerifier());
            httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf)
                    .build();
            String jsonStr = "";
            HttpPost httpost = new HttpPost(url);
            httpost.setEntity(new StringEntity(reqData, "UTF-8"));
            httpost.setHeader("Accept", "text/xml, text/plain");
            httpost.setHeader("Content-Type", "text/xml; charset=utf-8");
            httpost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
            response = httpclient.execute(httpost);
            HttpEntity entity = response.getEntity();
            //接受到返回信息
            jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
            EntityUtils.consume(entity);
            System.out.println("调用添加接收方接口" + reqData + ";添加接收方接口返回" + jsonStr);
            paramOut = JSONObject.parseObject(JSONObject.toJSONString(PayUtil.xmlStrToMap(jsonStr)));
        } catch (Exception e) {
            logger.error("请求微信异常", e);
            throw new IllegalArgumentException(e.getMessage());
        } finally {
            if (httpclient != null) {
                try {
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return paramOut;
    }
    private byte[] getPkcs12(String fileName) {
        List<FileDto> fileDtos = new ArrayList<>();
        byte[] context = null;
        String ftpPath = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_PATH);
        String ossSwitch = MappingCache.getValue(MappingConstant.FILE_DOMAIN, OSSUtil.OSS_SWITCH);
        if (StringUtil.isEmpty(ossSwitch) || !OSSUtil.OSS_SWITCH_OSS.equals(ossSwitch)) {
            String ftpServer = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_SERVER);
            int ftpPort = Integer.parseInt(MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_PORT));
            String ftpUserName = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERNAME);
            String ftpUserPassword = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERPASSWORD);
            context = ftpUploadTemplate.downFileByte(ftpPath, fileName, ftpServer,
                    ftpPort, ftpUserName,
                    ftpUserPassword);
        } else {
            context = ossUploadTemplate.downFileByte(ftpPath, fileName, "",
                    0, "",
                    "");
        }
        return context;
    }
    public void sendIntegral(GiftIntegralDto giftIntegralDto) {
        giftIntegralImpl.gift(giftIntegralDto);
    }
}
service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatPaymentFactoryAdapt.java
@@ -1,5 +1,6 @@
package com.java110.acct.payment.adapt.wechat;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.acct.payment.IPaymentFactoryAdapt;
import com.java110.core.client.RestTemplate;
@@ -8,6 +9,8 @@
import com.java110.core.factory.WechatFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.dto.app.AppDto;
import com.java110.dto.integral.GiftIntegralDto;
import com.java110.dto.paymentPool.PaymentPoolDto;
import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
import com.java110.dto.wechat.OnlinePayDto;
import com.java110.dto.owner.OwnerAppUserDto;
@@ -15,28 +18,24 @@
import com.java110.dto.payment.PaymentOrderDto;
import com.java110.dto.wechat.SmallWeChatDto;
import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
import com.java110.intf.user.IOwnerAppUserInnerServiceSMO;
import com.java110.po.wechat.OnlinePayPo;
import com.java110.utils.cache.CommonCache;
import com.java110.utils.cache.MappingCache;
import com.java110.utils.cache.UrlCache;
import com.java110.utils.constant.MappingConstant;
import com.java110.utils.constant.WechatConstant;
import com.java110.utils.exception.CmdException;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.PayUtil;
import com.java110.utils.util.StringUtil;
import com.java110.utils.util.*;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.*;
/**
 * 微信支付厂家类
@@ -70,6 +69,9 @@
    public static final String wxPayUnifiedOrder = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    @Autowired
    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
@@ -85,7 +87,14 @@
    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
    @Autowired
    private IPaymentPoolV1InnerServiceSMO paymentPoolV1InnerServiceSMOImpl;
    @Autowired
    private RestTemplate outRestTemplate;
    @Autowired
    private WechatIntegralShareAcct wechatIntegralShareAcct;
    @Override
@@ -99,7 +108,7 @@
        String appId = context.getReqHeaders().get("app-id");
        String userId = context.getReqHeaders().get("user-id");
        String tradeType = reqJson.getString("tradeType");
        String notifyUrl = UrlCache.getOwnerUrl() + "/app/payment/notify/wechat/992020011134400001/"+paymentPoolId;
        String notifyUrl = UrlCache.getOwnerUrl() + "/app/payment/notify/wechat/992020011134400001/" + paymentPoolId;
        String openId = reqJson.getString("openId");
@@ -118,7 +127,7 @@
            ownerAppUserDto.setAppType(appType);
            List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
            if (ownerAppUserDtos == null || ownerAppUserDtos.size() < 1) {
            if (ListUtil.isNull(ownerAppUserDtos)) {
                throw new IllegalArgumentException("未找到开放账号信息");
            }
            openId = ownerAppUserDtos.get(0).getOpenId();
@@ -135,9 +144,10 @@
        paymentPoolValueDto.setPpId(paymentPoolId);
        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
        if (ListUtil.isNull(paymentPoolValueDtos)) {
            throw new IllegalArgumentException("配置错误,未配置参数");
        }
        Map<String, String> resMap = null;
        resMap = this.java110UnifieldOrder(paymentOrderDto.getName(),
@@ -147,7 +157,8 @@
                openId,
                smallWeChatDto,
                paymentPoolValueDtos,
                notifyUrl
                notifyUrl,
                paymentOrderDto
        );
        String key = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_KEY");
@@ -189,10 +200,11 @@
                                                     String tradeType, double payAmount, String openid,
                                                     SmallWeChatDto smallWeChatDto,
                                                     List<PaymentPoolValueDto> paymentPoolValueDtos,
                                                     String notifyUrl) throws Exception {
                                                     String notifyUrl,
                                                     PaymentOrderDto paymentOrderDto
    ) throws Exception {
        //String systemName = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.PAY_GOOD_NAME);
        String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_MCHID");
@@ -213,6 +225,15 @@
        paramMap.put("notify_url", notifyUrl + "?wId=" + WechatFactory.getWId(smallWeChatDto.getAppId()));
        paramMap.put("trade_type", tradeType);
        paramMap.put("openid", openid);
        //加入分账申请
        if (PaymentOrderDto.SHARE_ACCT.equals(paymentOrderDto.getIsShare())) {
            paramMap.put("profit_sharing", "Y");
            paymentOrderDto.getGiftIntegralDto().setAppId(smallWeChatDto.getAppId());
            paymentOrderDto.getGiftIntegralDto().setMchId(mchId);
            paymentOrderDto.getGiftIntegralDto().setMchKey(key);
            paymentOrderDto.getGiftIntegralDto().setCertPath(getWechatCertPath(paymentPoolValueDtos.get(0).getPpId()));
            CommonCache.setValue("integral_share_acct_" + paymentOrderDto.getOrderId(), JSONObject.toJSONString(paymentOrderDto.getGiftIntegralDto()), CommonCache.PAY_DEFAULT_EXPIRE_TIME);
        }
        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
@@ -237,8 +258,27 @@
        if (responseEntity.getStatusCode() != HttpStatus.OK) {
            throw new IllegalArgumentException("支付失败" + responseEntity.getBody());
        }
        doSaveOnlinePay(smallWeChatDto, openid, orderNum, feeName, payAmount, OnlinePayDto.STATE_WAIT, "待支付",paymentPoolValueDtos.get(0).getPpId());
        doSaveOnlinePay(smallWeChatDto, openid, orderNum, feeName, payAmount, OnlinePayDto.STATE_WAIT, "待支付", paymentPoolValueDtos.get(0).getPpId());
        return PayUtil.xmlStrToMap(responseEntity.getBody());
    }
    private String getWechatCertPath(String ppId) {
        //todo
        PaymentPoolDto paymentPoolDto = new PaymentPoolDto();
        paymentPoolDto.setPpId(ppId);
        List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto);
        if (ListUtil.isNull(paymentPoolDtos)) {
            throw new IllegalArgumentException("未配置支付");
        }
        if (StringUtil.isEmpty(paymentPoolDtos.get(0).getCertPath())) {
            throw new IllegalArgumentException("未配置证书");
        }
        return paymentPoolDtos.get(0).getCertPath();
    }
@@ -280,7 +320,7 @@
        return paymentOrderDto;
    }
    public int confirmPayFee(Map<String, Object> map, PaymentOrderDto paymentOrderDto, NotifyPaymentOrderDto notifyPaymentOrderDto) {
    public int confirmPayFee(Map<String, Object> map, PaymentOrderDto paymentOrderDto, NotifyPaymentOrderDto notifyPaymentOrderDto) throws Exception {
        String appId = "";
        //兼容 港币交易时 或者微信有时不会掉参数的问题
        if (map.containsKey("wId")) {
@@ -304,11 +344,11 @@
        paymentPoolValueDto.setCommunityId(notifyPaymentOrderDto.getCommunityId());
        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
        if (ListUtil.isNull(paymentPoolValueDtos)) {
            throw new IllegalArgumentException("配置错误,未配置参数");
        }
       // String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_MCHID");
        // String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_MCHID");
        String key = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_KEY");
        String sign = PayUtil.createSign(paramMap, key);
@@ -322,8 +362,44 @@
        paymentOrderDto.setTransactionId(map.get("transaction_id").toString());
        doUpdateOnlinePay(outTradeNo, OnlinePayDto.STATE_COMPILE, "支付成功");
        String giftIntegralDtoStr = CommonCache.getAndRemoveValue("integral_share_acct_" + paymentOrderDto.getOrderId());
        if (StringUtil.isEmpty(giftIntegralDtoStr)) {
            return 1;
        }
        GiftIntegralDto giftIntegralDto = JSONObject.parseObject(giftIntegralDtoStr, GiftIntegralDto.class);
        if (giftIntegralDto == null) {
            return 1;
        }
        //todo 添加分账商家
        JSONArray params = wechatIntegralShareAcct.addReceivers(giftIntegralDto);
        //todo 申请分账
        JSONObject applyResult = wechatIntegralShareAcct.applyProfileShare(paymentOrderDto, giftIntegralDto, params);
        if (applyResult.containsKey("result_code") && "SUCCESS".equals(applyResult.getString("result_code"))) {
            JSONObject finishParam = new JSONObject();
            finishParam.put("out_order_no", applyResult.getString("order_id"));
            //完结分账 单次分账
            //finishProfileShare(storeOrderDto, smallWeChatDto, finishParam);
        } else {
            throw new IllegalArgumentException("分账失败:" + applyResult.toJSONString());
        }
        // 删除接收方
        wechatIntegralShareAcct.deleteReceivers(giftIntegralDto);
        // todo 给用户赠送积分
        wechatIntegralShareAcct.sendIntegral(giftIntegralDto);
        return 1;
    }
    private SmallWeChatDto getSmallWechat(JSONObject paramIn) {
@@ -335,7 +411,7 @@
        smallWeChatDto.setRow(1);
        List<SmallWeChatDto> smallWeChatDtos = smallWechatV1InnerServiceSMOImpl.querySmallWechats(smallWeChatDto);
        if (smallWeChatDtos == null || smallWeChatDtos.size() < 1) {
        if (ListUtil.isNull(smallWeChatDtos)) {
            smallWeChatDto = new SmallWeChatDto();
            smallWeChatDto.setAppId(MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, "appId"));
            smallWeChatDto.setAppSecret(MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, "appSecret"));
@@ -359,7 +435,7 @@
    }
    private void doSaveOnlinePay(SmallWeChatDto smallWeChatDto, String openId, String orderId, String feeName,
                                 double money, String state, String message,String ppId) {
                                 double money, String state, String message, String ppId) {
        OnlinePayPo onlinePayPo = new OnlinePayPo();
        onlinePayPo.setAppId(smallWeChatDto.getAppId());
        onlinePayPo.setMchId(smallWeChatDto.getMchId());
service-acct/src/main/java/com/java110/acct/payment/business/payFee/PayFeePaymentBusiness.java
@@ -1,15 +1,18 @@
package com.java110.acct.payment.business.payFee;
import com.alibaba.fastjson.JSONObject;
import com.java110.acct.integral.IComputeGiftIntegral;
import com.java110.acct.payment.IPaymentBusiness;
import com.java110.core.context.ICmdDataFlowContext;
import com.java110.core.factory.CallApiServiceFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.dto.fee.FeeDto;
import com.java110.dto.integral.GiftIntegralDto;
import com.java110.dto.payment.PaymentOrderDto;
import com.java110.utils.cache.CommonCache;
import com.java110.utils.util.MoneyUtil;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@@ -25,6 +28,10 @@
    private final static Logger logger = LoggerFactory.getLogger(PayFeePaymentBusiness.class);
    @Autowired
    private IComputeGiftIntegral computeGiftIntegralImpl;
    @Override
    public PaymentOrderDto unified(ICmdDataFlowContext context, JSONObject reqJson) {
@@ -35,14 +42,24 @@
        String feeName = orderInfo.getString("feeName");
        double money = Double.parseDouble(orderInfo.getString("receivedAmount"));
        GiftIntegralDto giftIntegralDto = computeGiftIntegralImpl.gift(money, reqJson.getIntValue("cycles"), reqJson.getString("communityId"));
        //这里防止 小数点不是 2位 比如 3位之类的 微信平台不支持
        money = MoneyUtil.computePriceScale(money,"1",2);
        money = MoneyUtil.computePriceScale(money, "1", 2);
        PaymentOrderDto paymentOrderDto = new PaymentOrderDto();
        paymentOrderDto.setOrderId(orderId);
        paymentOrderDto.setMoney(money);
        paymentOrderDto.setName(feeName);
        if (giftIntegralDto != null && giftIntegralDto.getMoney() > 0) {
            paymentOrderDto.setIsShare("Y");
            giftIntegralDto.setUserId(userId);
            paymentOrderDto.setGiftIntegralDto(giftIntegralDto);
        }
        return paymentOrderDto;
    }
service-job/src/main/java/com/java110/job/adapt/payment/integral/PayFeeGiftIntegralAdapt.java
File was deleted
service-job/src/main/java/com/java110/job/adapt/payment/integral/package-info.java
File was deleted
service-job/src/main/java/com/java110/job/smo/impl/MallInnerServiceSMOImpl.java
@@ -41,7 +41,7 @@
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
            return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK);
            return new ResultVo(ResultVo.CODE_OK, ResultVo.MSG_OK);
        }
        ResultVo resultVo = sendMallImpl.post("/mall/api/common.openCommonApi", paramIn);
@@ -54,7 +54,7 @@
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
            return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK);
            return new ResultVo(ResultVo.CODE_OK, ResultVo.MSG_OK);
        }
@@ -95,7 +95,7 @@
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
           return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK);
            return new ResultVo(ResultVo.CODE_OK, ResultVo.MSG_OK);
        }
        JSONObject paramIn = new JSONObject();
@@ -110,4 +110,24 @@
        return resultVo;
    }
    @Override
    public double computeIntegralMoney(@RequestBody int quantity) {
        String mallSwitch = MappingCache.getValue(MALL_DOMAIN, "MALL_SWITCH");
        if (!"ON".equals(mallSwitch)) {
            return 0;
        }
        JSONObject paramIn = new JSONObject();
        paramIn.put("quantity", quantity);
        paramIn.put("mallApiCode", "computeIntegralMoneyBmoImpl");
        ResultVo resultVo = sendMallImpl.post("/mall/api/common.openCommonApi", paramIn);
        if (resultVo.getCode() != ResultVo.CODE_OK) {
            throw new IllegalArgumentException(resultVo.getMsg());
        }
        return Double.parseDouble(resultVo.getData().toString());
    }
}