Files
jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/adapay/service/AdapayMemberService.java

184 lines
8.5 KiB
Java
Raw Normal View History

2023-06-06 16:18:25 +08:00
package com.jsowell.adapay.service;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
2023-06-09 09:44:20 +08:00
import com.huifu.adapay.core.exception.BaseAdaPayException;
2023-06-06 16:18:25 +08:00
import com.huifu.adapay.model.Member;
2023-06-09 09:44:20 +08:00
import com.huifu.adapay.model.SettleAccount;
2023-06-07 16:04:10 +08:00
import com.jsowell.adapay.dto.AdapayMemberInfoDTO;
2023-06-15 14:06:33 +08:00
import com.jsowell.adapay.response.QueryMemberResponse;
2023-06-13 11:28:15 +08:00
import com.jsowell.adapay.vo.AdapayAccountBalanceVO;
2023-06-14 16:57:49 +08:00
import com.jsowell.adapay.vo.AdapayMemberVO;
2023-06-14 14:48:58 +08:00
import com.jsowell.adapay.vo.AdapaySettleAccountVO;
2023-06-09 08:18:42 +08:00
import com.jsowell.common.exception.BusinessException;
2023-06-07 16:04:10 +08:00
import com.jsowell.common.util.StringUtils;
2023-06-06 16:18:25 +08:00
import com.jsowell.common.util.id.IdUtils;
2023-06-15 14:26:53 +08:00
import com.jsowell.pile.domain.AdapayMemberAccount;
import com.jsowell.pile.service.IAdapayMemberAccountService;
2023-06-06 16:18:25 +08:00
import lombok.extern.slf4j.Slf4j;
2023-06-07 15:10:35 +08:00
import org.springframework.beans.factory.annotation.Autowired;
2023-06-07 16:04:10 +08:00
import org.springframework.beans.factory.annotation.Value;
2023-06-06 16:18:25 +08:00
import org.springframework.stereotype.Service;
2023-06-14 16:23:16 +08:00
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
2023-06-06 16:18:25 +08:00
2023-06-13 11:28:15 +08:00
import java.math.BigDecimal;
2023-06-06 16:18:25 +08:00
import java.util.Map;
@Slf4j
@Service
public class AdapayMemberService {
2023-06-07 15:10:35 +08:00
2023-06-07 16:04:10 +08:00
@Value("${adapay.appId}")
private String ADAPAY_APP_ID;
2023-06-15 14:26:53 +08:00
@Autowired
private IAdapayMemberAccountService adapayMemberAccountService;
2023-06-06 16:18:25 +08:00
/**
2023-06-09 09:44:20 +08:00
* 创建汇付会员
* @param dto
* @throws Exception
2023-06-06 16:18:25 +08:00
*/
2023-06-14 16:23:16 +08:00
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
2023-06-07 16:04:10 +08:00
public void createMember(AdapayMemberInfoDTO dto) throws Exception {
2023-06-15 14:26:53 +08:00
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(dto.getMerchantId());
if (adapayMemberAccount != null) {
2023-06-09 15:34:35 +08:00
return;
}
2023-06-07 16:04:10 +08:00
log.info("=======execute CreateMember begin=======");
Map<String, Object> memberParams = Maps.newHashMap();
2023-06-15 14:26:53 +08:00
String adapayMemberId = "AM" + IdUtils.getMemberId();
memberParams.put("member_id", adapayMemberId);
2023-06-07 16:04:10 +08:00
memberParams.put("app_id", ADAPAY_APP_ID);
memberParams.put("location", dto.getLocation());
memberParams.put("email", dto.getEmail());
memberParams.put("gender", dto.getGender());
memberParams.put("nickname", dto.getNickname());
log.info("创建用户,请求参数:" + JSON.toJSONString(memberParams));
Map<String, Object> member = Member.create(memberParams);
log.info("创建用户,返回参数:" + JSON.toJSONString(member));
log.info("=======execute CreateMember end=======");
2023-06-09 09:44:20 +08:00
if (member == null || StringUtils.equals((String) member.get("status"), "failed")) {
2023-06-09 08:18:42 +08:00
String errorMsg = member == null ? "创建汇付用户失败" : (String) member.get("error_msg");
throw new BusinessException("00500001", errorMsg);
2023-06-07 16:04:10 +08:00
}
2023-06-09 09:44:20 +08:00
// 创建结算账户
2023-06-14 16:23:16 +08:00
Map<String, Object> accountInfo = Maps.newHashMap();
// 银行卡号
accountInfo.put("card_id", dto.getCardId());
// 银行卡对应的户名
accountInfo.put("card_name", dto.getCardName());
// 证件号,银行账户类型为对私时,必填
accountInfo.put("cert_id", dto.getCertId());
// 证件类型仅支持00-身份证,银行账户类型为对私时,必填
accountInfo.put("cert_type", "00");
// 手机号
accountInfo.put("tel_no", dto.getTelNo());
// 银行编码,详见附录 银行代码,银行账户类型对公时,必填
accountInfo.put("bank_code", dto.getBankCode());
// 银行账户类型1-对公2-对私
accountInfo.put("bank_acct_type", dto.getBankAcctType());
// 银行账户开户银行所在省份编码 (省市编码),银行账户类型为对公时,必填
2023-06-14 16:29:51 +08:00
accountInfo.put("prov_code", dto.getProvCode());
2023-06-14 16:23:16 +08:00
// 银行账户开户银行所在地区编码(省市编码),银行账户类型为对公时,必填
accountInfo.put("area_code", dto.getAreaCode());
Map<String, Object> settleCountParams = Maps.newHashMap();
2023-06-15 14:26:53 +08:00
settleCountParams.put("member_id", adapayMemberId);
2023-06-14 16:23:16 +08:00
settleCountParams.put("app_id", ADAPAY_APP_ID);
// channel String Y 目前仅支持bank_account银行卡
settleCountParams.put("channel", "bank_account");
settleCountParams.put("account_info", accountInfo);
Map<String, Object> settleCount = SettleAccount.create(settleCountParams);
log.info("创建汇付结算账户result:{}", settleCount);
if (settleCount == null || StringUtils.equals((String) settleCount.get("status"), "failed")) {
2023-06-14 16:29:51 +08:00
String errorMsg = settleCount == null ? "创建汇付结算账户失败" : (String) settleCount.get("error_msg");
2023-06-14 16:23:16 +08:00
throw new BusinessException("00500001", errorMsg);
}
2023-06-15 14:26:53 +08:00
String settleAccountId = (String) settleCount.get("id");
// 保存到数据库
adapayMemberAccount = new AdapayMemberAccount();
adapayMemberAccount.setMerchantId(dto.getMerchantId());
adapayMemberAccount.setAdapayMemberId(adapayMemberId);
adapayMemberAccount.setSettleAccountId(settleAccountId);
adapayMemberAccountService.insertAdapayMemberAccount(adapayMemberAccount);
2023-06-07 16:04:10 +08:00
}
2023-06-08 15:00:30 +08:00
2023-06-09 09:44:20 +08:00
/**
* 查询汇付会员信息
* @param merchantId
* @return
*/
2023-06-14 16:57:49 +08:00
public AdapayMemberVO selectAdapayMember(String merchantId) {
AdapayMemberVO resultVO = new AdapayMemberVO();
2023-06-14 16:56:25 +08:00
2023-06-08 15:00:30 +08:00
return resultVO;
}
2023-06-09 09:44:20 +08:00
2023-06-15 14:06:33 +08:00
2023-06-09 09:44:20 +08:00
/**
2023-06-15 14:06:33 +08:00
* 查询汇付会员信息
2023-06-09 09:44:20 +08:00
*/
2023-06-15 14:06:33 +08:00
public void queryAdapayMemberInfo(String adapayMemberId) throws BaseAdaPayException {
Map<String, Object> memberParams = Maps.newHashMap();
memberParams.put("member_id", adapayMemberId);
memberParams.put("app_id", ADAPAY_APP_ID);
log.info("查询用户,请求参数:{}", JSON.toJSONString(memberParams));
Map<String, Object> member = Member.query(memberParams);
QueryMemberResponse queryMemberResponse = JSON.parseObject(JSON.toJSONString(member), QueryMemberResponse.class);
log.info("查询用户,返回参数:{}", JSON.toJSONString(queryMemberResponse));
}
2023-06-09 09:44:20 +08:00
2023-06-15 14:06:33 +08:00
/**
* 查询汇付结算账户信息
*/
public void queryAdapaySettleAccount(String adapayMemberId, String settleAccountId) throws BaseAdaPayException {
2023-06-09 09:44:20 +08:00
Map<String, Object> settleCountParams = Maps.newHashMap();
2023-06-15 14:06:33 +08:00
settleCountParams.put("settle_account_id", settleAccountId);
settleCountParams.put("member_id", adapayMemberId);
2023-06-09 09:44:20 +08:00
settleCountParams.put("app_id", ADAPAY_APP_ID);
2023-06-15 14:06:33 +08:00
log.info("查询汇付结算账户信息param:{}", JSON.toJSONString(settleCountParams));
Map<String, Object> settleCount = SettleAccount.query(settleCountParams);
QueryMemberResponse.SettleAccount settleAccount = JSON.parseObject(JSON.toJSONString(settleCount), QueryMemberResponse.SettleAccount.class);
log.info("查询汇付结算账户信息result:{}", JSON.toJSONString(settleAccount));
2023-06-09 09:44:20 +08:00
}
2023-06-13 09:20:24 +08:00
/**
* 查询汇付会员账户余额
*/
2023-06-13 11:28:15 +08:00
public AdapayAccountBalanceVO queryAdapayAccountBalance(String merchantId) throws BaseAdaPayException {
AdapayAccountBalanceVO vo = AdapayAccountBalanceVO.builder().build();
// 通过merchantId 查询出汇付会员id 和 结算账户id用来查询余额
2023-06-15 14:40:11 +08:00
AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.selectByMerchantId(merchantId);
if (adapayMemberAccount == null) {
2023-06-13 11:28:15 +08:00
return vo;
}
2023-06-15 14:40:11 +08:00
String settle_account_id = adapayMemberAccount.getAdapayMemberId();
String member_id = adapayMemberAccount.getAdapayMemberId();
2023-06-13 11:28:15 +08:00
Map<String, Object> queryParams = Maps.newHashMap();
queryParams.put("settle_account_id", settle_account_id);
queryParams.put("member_id", member_id);
queryParams.put("app_id", ADAPAY_APP_ID);
Map<String, Object> settleCount = SettleAccount.balance(queryParams);
2023-06-13 11:33:13 +08:00
if (settleCount == null || settleCount.isEmpty() || "succeeded".equals(settleCount.get("status"))) {
2023-06-13 11:28:15 +08:00
return vo;
}
vo.setFrzBalance(new BigDecimal((String) settleCount.get("frz_balance")));
vo.setAcctBalance(new BigDecimal((String) settleCount.get("acct_balance")));
vo.setAvlBalance(new BigDecimal((String) settleCount.get("avl_balance")));
vo.setLastAvlBalance(new BigDecimal((String) settleCount.get("last_avl_balance")));
return vo;
2023-06-13 09:20:24 +08:00
}
2023-06-14 14:48:58 +08:00
public AdapaySettleAccountVO selectSettleAccount(String merchantId) {
AdapaySettleAccountVO vo = new AdapaySettleAccountVO();
2023-06-15 14:40:11 +08:00
2023-06-14 14:48:58 +08:00
return vo;
}
2023-06-06 16:18:25 +08:00
}