package com.tourguide.common.huifu.biz; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.huifu.bspay.sdk.opps.core.net.BasePayRequest; import com.tourguide.common.huifu.properties.HuiFuProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.HashMap; import java.util.Map; /** * DouGong account split helper. */ @Component public class FenZhangUtil { private static final Logger log = LoggerFactory.getLogger(FenZhangUtil.class); private final HuiFuProperties huiFuProperties; public FenZhangUtil(HuiFuProperties huiFuProperties) { this.huiFuProperties = huiFuProperties; } public Map fenzhang(String reqSeqId, String reqDate, String ordAmt, String receiverHuifuId) throws Exception { DouGongRequestSupport.initBasePay(huiFuProperties); BigDecimal amount = new BigDecimal(ordAmt).setScale(2, RoundingMode.HALF_UP); Map paramsInfo = new HashMap<>(); paramsInfo.put("req_seq_id", reqSeqId); paramsInfo.put("req_date", reqDate); paramsInfo.put("out_huifu_id", huiFuProperties.getHuifuId()); paramsInfo.put("ord_amt", amount.toString()); paramsInfo.put("acct_split_bunch", acctSplitBunch(amount, receiverHuifuId)); paramsInfo.put("risk_check_data", riskCheckData()); paramsInfo.put("trans_fee_take_flag", "OUT"); log.info("调用斗拱主账户划账,reqSeqId={},receiverHuifuId={},amount={}", reqSeqId, receiverHuifuId, amount); Map response = BasePayRequest.requestBasePay( "v2/trade/acctpayment/pay", paramsInfo, null, false); log.info("斗拱主账户划账响应,reqSeqId={},response={}", reqSeqId, response); return response; } public Map queryFenzhang(String reqSeqId, String reqDate) throws Exception { DouGongRequestSupport.initBasePay(huiFuProperties); Map paramsInfo = new HashMap<>(); paramsInfo.put("huifu_id", huiFuProperties.getHuifuId()); paramsInfo.put("org_req_date", reqDate); paramsInfo.put("org_req_seq_id", reqSeqId); return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay/query", paramsInfo, null, false); } public Map payFromUser(String reqSeqId, String reqDate, String ordAmt, String outHuifuId) throws Exception { DouGongRequestSupport.initBasePay(huiFuProperties); BigDecimal amount = new BigDecimal(ordAmt).setScale(2, RoundingMode.HALF_UP); Map paramsInfo = new HashMap<>(); paramsInfo.put("req_seq_id", reqSeqId); paramsInfo.put("req_date", reqDate); paramsInfo.put("out_huifu_id", outHuifuId); paramsInfo.put("ord_amt", amount.toString()); paramsInfo.put("acct_split_bunch", acctSplitBunch(amount, huiFuProperties.getHuifuId())); paramsInfo.put("risk_check_data", riskCheckData()); paramsInfo.put("trans_fee_take_flag", "OUT"); return BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false); } private String acctSplitBunch(BigDecimal amount, String huifuId) { JSONObject acctInfo = new JSONObject(); acctInfo.put("div_amt", amount.toString()); acctInfo.put("huifu_id", huifuId); JSONArray acctInfos = new JSONArray(); acctInfos.add(acctInfo); JSONObject root = new JSONObject(); root.put("acct_infos", acctInfos); return root.toJSONString(); } private String riskCheckData() { JSONObject data = new JSONObject(); data.put("sub_product", "1"); data.put("transfer_type", "04"); return data.toJSONString(); } }