/** * */ package com.zteits.pay.biz; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.clouds.common.cache.sys.SysCodeValueCacheUtil; import com.clouds.common.constants.CodeValKindEnum; import com.clouds.common.constants.RechargeCardEnum; import com.clouds.common.utils.AmountUtils; import com.clouds.common.utils.DateUtil; import com.clouds.common.utils.SequenceUtil; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.util.CollectionUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.AccountTypeEnum; import com.zteits.clouds.api.apibase.constants.PayTypeEnum; import com.zteits.clouds.api.apibase.constants.SequenceTypeEnum; import com.zteits.clouds.api.dto.pay.AccountDetailsDTO; import com.zteits.clouds.api.dto.pay.AcctPersonDTO; import com.zteits.clouds.api.dto.pay.account.dto.AccountInOutDetailForPageDTO; import com.zteits.clouds.api.dto.pay.account.dto.AccountRecordDetailDTO; import com.zteits.clouds.api.dto.pay.account.param.AccoutRecordDetailRequest; import com.zteits.clouds.api.dto.pay.account.param.AcctInOutDetailForPageRequest; import com.zteits.clouds.api.dto.pay.param.AccountDetailsRequest; import com.zteits.clouds.api.dto.pay.param.AcctPayoutForPageRequest; import com.zteits.clouds.api.dto.pay.param.AcctPersonRequest; import com.zteits.clouds.api.service.pay.AccountRechargeService; import com.zteits.pay.dao.TdCAcctPayoutDao; import com.zteits.pay.dao.TdCAcctPersonDao; import com.zteits.pay.dao.TdCAcctSourceDao; import com.zteits.pay.domain.TdCAcctPayout; import com.zteits.pay.domain.TdCAcctPerson; import com.zteits.pay.domain.TdCAcctSource; import com.zteits.pay.pagepager.PageBeanUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; /** * @author hxz * */ @Service("com.zteits.pay.biz.AccountRechargeServiceImpl") public class AccountRechargeServiceImpl implements AccountRechargeService { private static final Logger logger = LoggerFactory.getLogger(AccountRechargeServiceImpl.class); /** * account person */ @Autowired private TdCAcctPersonDao tdCAcctPersonDao; @Autowired private TdCAcctPayoutDao tdCAcctPayoutDao; /** * 充值流水 */ @Autowired private TdCAcctSourceDao tdCAcctSourceDao; @Override public BizResult getAccountDetails(AccountDetailsRequest accountDetailsRequest) { List> mapList = new ArrayList<>(); TdCAcctSource tdCAcctSource = new TdCAcctSource(); tdCAcctSource.setCustId(accountDetailsRequest.getCustId()); tdCAcctSource.setAcctType(accountDetailsRequest.getAcctType()); tdCAcctSource.setOrgId(accountDetailsRequest.getOrgId()); List acctSourceDOList = tdCAcctSourceDao.getAcctSource(tdCAcctSource); if (CollectionUtil.isNotEmpty(acctSourceDOList)) { for (TdCAcctSource sourceDo : acctSourceDOList) { Map detail = new HashMap(); if(AccountTypeEnum.ACCT_SEND_RECHARGE.value().equals(sourceDo.getAcctType())) { detail.put("payType","充值赠送"); }else{ detail.put("payType", SysCodeValueCacheUtil.getCodeValueName(CodeValKindEnum.PAY_TYPE, sourceDo.getRechargeType() + "") + ""); } detail.put("payFee", "+¥" + AmountUtils.changeF2Y(sourceDo.getRechargeFee() + "")); detail.put("optTime", DateUtil.getDateString(sourceDo.getCreateDate(), DateUtil.DATETIME_FORMAT) + ""); detail.put("desc", "成功"); mapList.add(detail); } } AcctPayoutForPageRequest request = new AcctPayoutForPageRequest(); request.setCustId(accountDetailsRequest.getCustId()); if(accountDetailsRequest.getAcctType() != null) { List acctTypeList = new ArrayList<>(); acctTypeList.add(accountDetailsRequest.getAcctType()); request.setAcctTypeList(acctTypeList); } request.setOrgId(accountDetailsRequest.getOrgId()); List acctPayoutDOList = tdCAcctPayoutDao.getAcctPayoutList(request); if (CollectionUtil.isNotEmpty(acctPayoutDOList)) { for (TdCAcctPayout payout : acctPayoutDOList) { Map detail = new HashMap(); detail.put("payType", SysCodeValueCacheUtil .getCodeValueName(CodeValKindEnum.SYS_CODE_TRADE_TYPE, payout.getTradeType() + "") + ""); detail.put("payFee", "-¥" + AmountUtils.changeF2Y(payout.getTradeFee() + "")); detail.put("optTime", DateUtil.getDateString(payout.getCreateDate(), DateUtil.DATETIME_FORMAT) + ""); detail.put("desc", "成功"); mapList.add(detail); } } AccountDetailsDTO accountDetailsDTO = new AccountDetailsDTO(); accountDetailsDTO.setMapList(mapList); return new BizResult(accountDetailsDTO); } @Override public BizResult openAccount(AcctPersonRequest acctPersonRequest) { // 1 创建充值赠送账户 Integer acc = AccountTypeEnum.ACCT_SEND_RECHARGE.value(); openInnerAccount(acctPersonRequest, acc); // 2 创建充值账户 Integer account = AccountTypeEnum.ACCT_RECHARGE.value(); AcctPersonDTO acctPersonDTO = openInnerAccount(acctPersonRequest, account); return new BizResult<>(acctPersonDTO); } @Override public BizResult> queryAccountInOutDetailsForPage(AcctInOutDetailForPageRequest requestQ) { PageInfo pageInfo = tdCAcctPersonDao.queryAccountInOutDetailsForPage(requestQ); PageBean pageBean = new PageBean<>(); PageBeanUtil.copyProperties(pageInfo, pageBean, AccountInOutDetailForPageDTO.class); if(pageBean != null && CollectionUtil.isNotEmpty(pageBean.getDataList())){ for(AccountInOutDetailForPageDTO dto : pageBean.getDataList()){ if(dto.getType() == 1){ if(AccountTypeEnum.ACCT_SEND_RECHARGE.value().equals(dto.getAcctType())) { dto.setPayDetail("充值赠送"); }else if(AccountTypeEnum.ACCT_SEND_RECHARGE_ABC.value().equals(dto.getAcctType())) { dto.setPayDetail("农行补贴"); }else { dto.setPayDetail(SysCodeValueCacheUtil.getCodeValueName(CodeValKindEnum.PAY_TYPE, dto.getPayType() + "")); } dto.setPayState(-5 == dto.getPayType() ? "退款成功" : "充值成功"); dto.setChangeFeeDetail("+" + AmountUtils.changeF2Y(dto.getChangeFee() + "")); dto.setOpTime(DateUtil.getDateString(dto.getCreateDate(), DateUtil.DATETIME_FORMAT) + ""); }else{ dto.setPayState(6 == dto.getPayType() ? "提现成功" : "支付成功"); dto.setPayDetail(SysCodeValueCacheUtil.getCodeValueName(CodeValKindEnum.SYS_CODE_TRADE_TYPE, dto.getPayType() + "")); dto.setChangeFeeDetail("-" + AmountUtils.changeF2Y(dto.getChangeFee() + "")); dto.setOpTime(DateUtil.getDateString(dto.getCreateDate(), DateUtil.DATETIME_FORMAT) + ""); } } } return new BizResult<>(pageBean); } @Override public BizResult queryAccountRecordDetails(AccoutRecordDetailRequest req) { //根据订单编号查询记录 List list = tdCAcctPersonDao.queryAccountRecordDetails(req); if(CollectionUtils.isEmpty(list)){ return new BizResult<>(); } //数据封装 AccountRecordDetailDTO dto = new AccountRecordDetailDTO(); String paymentDetails = ""; for(AccountInOutDetailForPageDTO acctDto : list){ paymentDetails += AccountTypeEnum.getDesc(acctDto.getAcctType()) + "-" + acctDto.getChangeFee().divide(new BigDecimal("100")) + " "; } dto.setOrderId(req.getOrderId()); dto.setPayTime(list.get(0).getTradeTime()); dto.setPaymentDetails(paymentDetails); dto.setTradeType(list.get(0).getTradeType()); return new BizResult<>(dto); } private AcctPersonDTO openInnerAccount(AcctPersonRequest acctPersonRequest, Integer acc) { TdCAcctPerson acctPersonDo = new TdCAcctPerson(); BeanUtils.copyProperties(acctPersonRequest, acctPersonDo); // 账户id acctPersonDo.setAcctId(SequenceUtil.getNextId(SequenceTypeEnum.ACCOUNT_ID_P_SQE)); //账户类型 acctPersonDo.setAcctType(acc); // 账户顺序 默认为 1 if (acctPersonRequest.getAcctBalance() == null) { acctPersonDo.setAcctBalance(new BigDecimal(0)); } else { acctPersonDo.setAcctBalance(acctPersonRequest.getAcctBalance()); } acctPersonDo.setAcctOrder(1); acctPersonDo.setAcctBalance(new BigDecimal(0)); acctPersonDo.setAcctOrder(acc); acctPersonDo.setDataState(1); acctPersonDo.setCreateDate(new Date()); Integer i = tdCAcctPersonDao.insertAcctPerson(acctPersonDo); AcctPersonDTO acctPersonDTO = new AcctPersonDTO(); BeanUtils.copyProperties(acctPersonDo, acctPersonDTO); return acctPersonDTO; } }