|
@@ -1,17 +1,23 @@
|
|
|
package com.szwl.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.RandomUtil;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.szwl.feign.bean.PayFeign;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.szwl.constant.JoinpayConstant;
|
|
|
-import com.szwl.model.entity.TJoinpayMch;
|
|
|
+import com.szwl.feign.bean.PayFeign;
|
|
|
import com.szwl.mapper.TJoinpayMchMapper;
|
|
|
+import com.szwl.model.bo.BalanceBo;
|
|
|
+import com.szwl.model.bo.SettlementRecordBo;
|
|
|
+import com.szwl.model.entity.TJoinpayMch;
|
|
|
+import com.szwl.model.entity.WithdrawalRecord;
|
|
|
import com.szwl.model.utils.AESUtil;
|
|
|
import com.szwl.model.utils.Constant;
|
|
|
import com.szwl.model.utils.HttpClientUtils;
|
|
|
import com.szwl.model.utils.RSAUtil;
|
|
|
import com.szwl.service.TJoinpayMchService;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.szwl.service.WithdrawalRecordService;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.codec.digest.DigestUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
@@ -39,6 +45,10 @@ import java.util.*;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoinpayMch> implements TJoinpayMchService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ WithdrawalRecordService withdrawalRecordService;
|
|
|
+
|
|
|
@Autowired
|
|
|
PayFeign payFeign;
|
|
|
|
|
@@ -127,12 +137,10 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
|
|
|
requestJson.put("aes_key", RSAUtil.encrypt(aes_key1 + ":" + aes_key2, JoinpayConstant.publickey));
|
|
|
|
|
|
-// logger.info("请求参数:" + requestJson);
|
|
|
|
|
|
org.json.JSONObject jsonObject;
|
|
|
try {
|
|
|
jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
-// logger.info("响应参数:" + jsonObject);
|
|
|
|
|
|
if (jsonObject.has("resp_code")) {
|
|
|
mch.setRespCode(jsonObject.getString("resp_code"));
|
|
@@ -217,10 +225,6 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
requestData.put("id_card_no", mch.getIdCardNo());
|
|
|
}
|
|
|
}
|
|
|
-// requestData.put("legal_person", AESUtil.encrypt(legal_person, aes_key1 , aes_key2 ));
|
|
|
-// requestData.put("legal_person", mch.getLegalPerson());
|
|
|
-// requestData.put("id_card_no", AESUtil.encrypt(id_card_no, aes_key1 , aes_key2 ));
|
|
|
-// requestData.put("id_card_no", mch.getIdCardNo());
|
|
|
|
|
|
if (JoinpayConstant.alt_merchant_type2 == mch.getAltMerchantType() || JoinpayConstant.alt_merchant_type3 == mch.getAltMerchantType()) {
|
|
|
// 企业用对公账户
|
|
@@ -240,10 +244,7 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
}
|
|
|
|
|
|
requestData.put("bank_account_name", mch.getBankAccountName());
|
|
|
-// requestData.put("bank_account_name", AESUtil.encrypt(bank_account_name, aes_key1 , aes_key2 ));
|
|
|
requestData.put("bank_account_no", mch.getBankAccountNo());
|
|
|
-// requestData.put("bank_account_no", AESUtil.encrypt(bank_account_no, aes_key1 , aes_key2 ));
|
|
|
-// requestData.put("bank_channel_no", AESUtil.encrypt(bank_channel_no, aes_key1 , aes_key2 ));
|
|
|
requestData.put("bank_channel_no", mch.getBankChannelNo());
|
|
|
if (mch.getSettMode() != null) {
|
|
|
requestData.put("sett_mode", mch.getSettMode());
|
|
@@ -260,15 +261,8 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
// 结算周期:1
|
|
|
requestData.put("risk_day", 1);
|
|
|
}
|
|
|
-// mch.setLegal_person(legal_person);
|
|
|
-// mch.setId_card_no(id_card_no);
|
|
|
-// mch.setAlt_merchant_type(alt_merchant_type);
|
|
|
-// mch.setBank_account_name(bank_account_name);
|
|
|
-// mch.setBank_account_no(bank_account_no);
|
|
|
-// mch.setBank_channel_no(bank_channel_no);
|
|
|
if (mch.getAltMerchantType() == 12) {
|
|
|
String alt_mch_name = mch.getBankAccountName();
|
|
|
-// mch.setAlt_mch_name(alt_mch_name);
|
|
|
}
|
|
|
JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
|
|
|
requestJson.put("method", "altmch.modify");
|
|
@@ -284,12 +278,10 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
requestJson.put("sign", sign.toUpperCase());
|
|
|
requestJson.put("aes_key", RSAUtil.encrypt(aes_key1 + ":" + aes_key2, JoinpayConstant.publickey));
|
|
|
|
|
|
-// logger.info("请求参数:" + requestJson);
|
|
|
|
|
|
org.json.JSONObject jsonObject;
|
|
|
try {
|
|
|
jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
-// logger.info("响应参数:" + jsonObject);
|
|
|
|
|
|
if (jsonObject.has("resp_code")) {
|
|
|
mch.setRespCode(jsonObject.getString("resp_code"));
|
|
@@ -361,13 +353,11 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
|
|
|
String sign = createMD5Sign(requestJson, JoinpayConstant.key);
|
|
|
requestJson.put("sign", sign.toUpperCase());
|
|
|
-// logger.info("请求参数:" + requestJson);
|
|
|
String back = null;
|
|
|
org.json.JSONObject jsonObject;
|
|
|
try {
|
|
|
|
|
|
jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
-// logger.info("响应参数:" + jsonObject);
|
|
|
|
|
|
// 判断请求是否正确,受理成功
|
|
|
if (jsonObject.has("resp_code")) {
|
|
@@ -674,6 +664,213 @@ public class TJoinpayMchServiceImpl extends ServiceImpl<TJoinpayMchMapper, TJoin
|
|
|
return back;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public BalanceBo getBalance(TJoinpayMch mch) {
|
|
|
+ String url = "https://www.joinpay.com/allocFunds";
|
|
|
+ BalanceBo balanceBo = new BalanceBo();
|
|
|
+
|
|
|
+ JSONObject requestData = new JSONObject(new LinkedHashMap());
|
|
|
+ requestData.put("alt_mch_no", mch.getAltMchNo());
|
|
|
+
|
|
|
+ JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
|
|
|
+ requestJson.put("method", "altAccount.get");
|
|
|
+ requestJson.put("version", "1.0");
|
|
|
+ requestJson.put("data", requestData);
|
|
|
+ // 32位随机字符串
|
|
|
+ String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
|
|
|
+ requestJson.put("rand_str", uuid);
|
|
|
+ requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
|
|
|
+ requestJson.put("mch_no", JoinpayConstant.mch_no);
|
|
|
+
|
|
|
+ String sign = createMD5Sign(requestJson, JoinpayConstant.key);
|
|
|
+ requestJson.put("sign", sign.toUpperCase());
|
|
|
+
|
|
|
+ org.json.JSONObject jsonObject;
|
|
|
+ try {
|
|
|
+
|
|
|
+ jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
+ log.info("查询余额返回数据:{}", jsonObject);
|
|
|
+
|
|
|
+ // 判断请求是否正确,受理成功
|
|
|
+ if (jsonObject.has("resp_code")) {
|
|
|
+ String resp_code = jsonObject.getString("resp_code");
|
|
|
+ if (JoinpayConstant.resp_code1.equals(resp_code)) {
|
|
|
+ // 处理data
|
|
|
+ if (jsonObject.has("data")) {
|
|
|
+ org.json.JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ // 更新账户的金额
|
|
|
+
|
|
|
+ if (data.has("alt_avil_balance")) {
|
|
|
+ // 可提现金额
|
|
|
+ BigDecimal altAvilBalance = new BigDecimal(data.getString("alt_avil_balance")).divide(new BigDecimal(100));
|
|
|
+ balanceBo.setWithdrawableBalance(altAvilBalance);
|
|
|
+ if (data.has("alt_main_balance")) {
|
|
|
+ BigDecimal altMainBalance = new BigDecimal(data.getString("alt_main_balance")).divide(new BigDecimal(100));
|
|
|
+ balanceBo.setReceivableBalance(altMainBalance.subtract(altAvilBalance));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return balanceBo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String withdraw(TJoinpayMch mch, WithdrawalRecord withdrawalRecord) {
|
|
|
+ String url = "https://www.joinpay.com/allocFunds";
|
|
|
+ JSONObject requestData = new JSONObject(new LinkedHashMap());
|
|
|
+ //分账方编号
|
|
|
+ requestData.put("alt_mch_no", mch.getAltMchNo());
|
|
|
+ //结算金额
|
|
|
+ requestData.put("settle_amount", String.valueOf(withdrawalRecord.getAmount()));
|
|
|
+ //结算请求号
|
|
|
+ String mch_order_no = RandomUtil.randomNumbers(18);
|
|
|
+ requestData.put("mch_order_no", mch_order_no);
|
|
|
+ //通知地址
|
|
|
+ requestData.put("callback_url",JoinpayConstant.Jiesuan_Url);
|
|
|
+ JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
|
|
|
+ requestJson.put("method", "altSettle.launch");
|
|
|
+ requestJson.put("version", "1.1");
|
|
|
+ requestJson.put("data", requestData);
|
|
|
+ // 32位随机字符串
|
|
|
+ String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
|
|
|
+ requestJson.put("rand_str", uuid);
|
|
|
+ requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
|
|
|
+ requestJson.put("mch_no", JoinpayConstant.mch_no);
|
|
|
+ String sign = createMD5Sign(requestJson, JoinpayConstant.key);
|
|
|
+ requestJson.put("sign", sign.toUpperCase());
|
|
|
+ log.info("提现参数:{}", requestJson);
|
|
|
+
|
|
|
+ org.json.JSONObject jsonObject;
|
|
|
+ try {
|
|
|
+ jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
+ log.info("提现结果:{}", jsonObject);
|
|
|
+ // 判断请求是否正确,受理成功
|
|
|
+ if(jsonObject.has("resp_code")){
|
|
|
+ String respCode = jsonObject.getString("resp_code");
|
|
|
+ if(JoinpayConstant.resp_code1.equals(respCode)){
|
|
|
+ org.json.JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ String bizCode = data.getString("biz_code");
|
|
|
+ if(JoinpayConstant.biz_code1.equals(bizCode)){
|
|
|
+ // 申请提现成功,保存记录
|
|
|
+ withdrawalRecord.setCreateDate(new Date());
|
|
|
+ withdrawalRecord.setOrderNo(mch_order_no);
|
|
|
+ withdrawalRecord.setStatus(0);
|
|
|
+ withdrawalRecordService.save(withdrawalRecord);
|
|
|
+ return bizCode;
|
|
|
+ }else{
|
|
|
+ // 提现失败
|
|
|
+ String bizMsg = data.getString("biz_msg");
|
|
|
+ return bizMsg;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 受理失败
|
|
|
+ String respMsg = jsonObject.getString("resp_msg");
|
|
|
+ return respMsg;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return "提现失败";
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SettlementRecordBo> getAutoSettlement(TJoinpayMch joinpayMch, String date) {
|
|
|
+ String url = "https://www.joinpay.com/allocFunds";
|
|
|
+ JSONObject requestData = new JSONObject(new LinkedHashMap());
|
|
|
+ //分账方编号
|
|
|
+ requestData.put("alt_mch_no", joinpayMch.getAltMchNo());
|
|
|
+ //结算日期
|
|
|
+ requestData.put("settle_date", date);
|
|
|
+ JSONObject requestJson = new JSONObject(new TreeMap<String, Object>());
|
|
|
+ requestJson.put("method", "altSettle.getAutoSettle");
|
|
|
+ requestJson.put("version", "1.1");
|
|
|
+ requestJson.put("data", requestData);
|
|
|
+ // 32位随机字符串
|
|
|
+ String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
|
|
|
+ requestJson.put("rand_str", uuid);
|
|
|
+ requestJson.put("sign_type", JoinpayConstant.sign_type_MD5);
|
|
|
+ requestJson.put("mch_no", JoinpayConstant.mch_no);
|
|
|
+ String sign = createMD5Sign(requestJson, JoinpayConstant.key);
|
|
|
+ requestJson.put("sign", sign.toUpperCase());
|
|
|
+
|
|
|
+ List<SettlementRecordBo> recordBos = new ArrayList<>();
|
|
|
+ org.json.JSONObject jsonObject;
|
|
|
+ try {
|
|
|
+ jsonObject = HttpClientUtils.postJson(url, requestJson.toString());
|
|
|
+ // 判断请求是否正确,受理成功
|
|
|
+ if(jsonObject.has("resp_code")){
|
|
|
+ String respCode = jsonObject.getString("resp_code");
|
|
|
+ if(JoinpayConstant.resp_code1.equals(respCode)){
|
|
|
+ org.json.JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ String bizCode = data.getString("biz_code");
|
|
|
+ if(JoinpayConstant.biz_code1.equals(bizCode)){
|
|
|
+ org.json.JSONArray recordList = data.getJSONArray("record_list");
|
|
|
+ for (int i = 0; i < recordList.length(); i++) {
|
|
|
+ org.json.JSONObject record = recordList.getJSONObject(i);
|
|
|
+ if(record.has("order_status")) {
|
|
|
+ // 结算状态
|
|
|
+ String orderStatus = record.getString("order_status");
|
|
|
+ // 结算时间
|
|
|
+ String settleDate = record.getString("settle_date");
|
|
|
+ // 结算流水号
|
|
|
+ String serialNo = record.getString("settle_trx_no");
|
|
|
+ // 银行账户
|
|
|
+ String altMchName = record.getString("alt_mch_name");
|
|
|
+ // 银行账号
|
|
|
+ String bankAccountNo = record.getString("bank_account_no");
|
|
|
+ // 结算金额
|
|
|
+ String settleAmount = record.getString("settle_amount");
|
|
|
+ // 结算描述
|
|
|
+ String bizMsg = record.getString("biz_msg");
|
|
|
+ SettlementRecordBo recordBo = new SettlementRecordBo();
|
|
|
+ if(JoinpayConstant.order_status2.equals(orderStatus)){
|
|
|
+ // 结算成功
|
|
|
+ recordBo.setAdminId(joinpayMch.getAdminId());
|
|
|
+ recordBo.setSerialNo(serialNo);
|
|
|
+ recordBo.setBankAccountNo(bankAccountNo);
|
|
|
+ recordBo.setBankAccountName(altMchName);
|
|
|
+ recordBo.setAmount(new BigDecimal(settleAmount));
|
|
|
+ recordBo.setDate(settleDate);
|
|
|
+ recordBo.setStatus(1);
|
|
|
+ } else if(JoinpayConstant.order_status3.equals(orderStatus)){
|
|
|
+ // 结算失败
|
|
|
+ recordBo.setAdminId(joinpayMch.getAdminId());
|
|
|
+ recordBo.setSerialNo(serialNo);
|
|
|
+ recordBo.setBankAccountNo(bankAccountNo);
|
|
|
+ recordBo.setBankAccountName(altMchName);
|
|
|
+ recordBo.setAmount(new BigDecimal(settleAmount));
|
|
|
+ recordBo.setDate(settleDate);
|
|
|
+ recordBo.setStatus(2);
|
|
|
+ recordBo.setFailReason(bizMsg);
|
|
|
+ } else if(JoinpayConstant.order_status4.equals(orderStatus)){
|
|
|
+ // 结算中
|
|
|
+ recordBo.setAdminId(joinpayMch.getAdminId());
|
|
|
+ recordBo.setSerialNo(serialNo);
|
|
|
+ recordBo.setBankAccountNo(bankAccountNo);
|
|
|
+ recordBo.setBankAccountName(altMchName);
|
|
|
+ recordBo.setAmount(new BigDecimal(settleAmount));
|
|
|
+ recordBo.setDate(settleDate);
|
|
|
+ recordBo.setStatus(0);
|
|
|
+ }
|
|
|
+ recordBos.add(recordBo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return recordBos;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 获取随机字符串
|