| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- package com.ydtech.modules.ttqf.service.impl;
- import cn.hutool.extra.spring.SpringUtil;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.ipaynow.jiaxin.domain.QueryPresignResultModel;
- import com.ipaynow.jiaxin.response.BillDownloadResponse;
- import com.ipaynow.jiaxin.response.ReceiptlDownloadResponse;
- import com.ydtech.core.page.HttpResult;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.admin.constants.ManagementSource;
- import com.ydtech.modules.admin.dao.SysAmountAuditingMapper;
- import com.ydtech.modules.admin.dao.SysUserAccountHistoryMapper;
- import com.ydtech.modules.admin.dao.SysUserBankCardMapper;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.model.po.SysAmountAuditingEntity;
- import com.ydtech.modules.admin.model.po.SysAmountAuditingHistory;
- import com.ydtech.modules.admin.model.po.SysUserAccount;
- import com.ydtech.modules.admin.model.po.SysUserAccountHistory;
- import com.ydtech.modules.admin.model.vo.SysAmountAuditingVo;
- import com.ydtech.modules.admin.service.*;
- import com.ydtech.modules.lg.model.PushLgEntity;
- import com.ydtech.modules.lg.service.PushLgEntityService;
- import com.ydtech.modules.ttqf.LgInformationPush;
- import com.ydtech.modules.ttqf.PayConstantStatus;
- import com.ydtech.modules.ttqf.RetrieveTTQFApi;
- import com.ydtech.modules.ttqf.TtqfDecrypt;
- import com.ydtech.modules.ttqf.dao.PaySignCallbackMapper;
- import com.ydtech.modules.ttqf.dao.PayTtqfLogMapper;
- import com.ydtech.modules.ttqf.dao.PaymentNoticeMapper;
- import com.ydtech.modules.ttqf.entity.PaySignCallback;
- import com.ydtech.modules.ttqf.entity.PayTtqfLog;
- import com.ydtech.modules.ttqf.entity.PayUserSign;
- import com.ydtech.modules.ttqf.entity.PaymentNoticeEntity;
- import com.ydtech.modules.ttqf.entity.response.TtqfResponse;
- import com.ydtech.modules.ttqf.entity.vo.UserWithdrawal;
- import com.ydtech.modules.ttqf.entity.vo.WithdrawalFRes;
- import com.ydtech.modules.ttqf.service.PayUserSignService;
- import com.ydtech.modules.ttqf.service.TtqfService;
- import com.ydtech.utils.StringUtils;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.ObjectUtils;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.Objects;
- @Slf4j
- @Service
- public class TtqfServiceImpl implements TtqfService {
- @Autowired
- private PayTtqfLogMapper logMapper;
- @Autowired
- private SysSwitchConfigService sysSwitchConfigService;
- @Autowired
- private PayUserSignService userSignService;
- @Autowired
- private SysAmountAuditingService sysAmountAuditingService;
- @Autowired
- private PaySignCallbackMapper signCallbackMapper;
- @Autowired
- private PaymentNoticeMapper noticeMapper;
- @Autowired
- private PayUserSignService signService;
- @Autowired
- private SysAmountAuditingHistoryService sysAmountAuditingHistoryService;
- @Autowired
- private SysUserAccountService sysUserAccountService;
- @Autowired
- private SysUserAccountHistoryMapper sysUserAccountHistoryMapper;
- @Autowired
- private SysAmountAuditingMapper amountAuditingMapper;
- @Autowired
- private PushLgEntityService pushLgEntityService;
- @Autowired
- private SysUserService userService;
- @Override
- public Object getUserPay(String userId) {
- QueryWrapper<PayTtqfLog> queryWrapper = new QueryWrapper<>();
- queryWrapper.select("lo.mch_batch_no,\n" +
- "\tlo.mch_order_no,\n" +
- "\tlo.amount,\n" +
- "\tlo.fee_amount,\n" +
- "\tn.`status`,\n" +
- "\tn.message,\n" +
- "\tn.pay_time ").eq("user_id",userId);
- return new Object();
- }
- @Override
- public TtqfResponse userSign(String obj) {
- try {
- String parse = TtqfDecrypt.parse(obj);
- if (!StringUtils.isEmpty(parse)){
- //保存签约回调信息
- PaySignCallback paySignCallback = JSONObject.parseObject(parse, PaySignCallback.class);
- paySignCallback.setCreateTime(new Date());
- int insert = signCallbackMapper.insert(paySignCallback);
- if (0 < insert){
- //用户签约回调成功之后更新为签约状态并支持线上打款 签约成功更新状态
- userSignService.updateUserSign(paySignCallback);
- SpringUtil.getBean(LgInformationPush.class).push(paySignCallback);
- }
- }
- }catch (Exception r){
- log.info("接收签约通知回调保存失败 + PaySignCallback ================={}", r.getMessage());
- }
- return TtqfResponse.ok();
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public TtqfResponse paymentNotice(String obj) {
- String parse = TtqfDecrypt.parse(obj);
- if (!StringUtils.isEmpty(parse)){
- PaymentNoticeEntity noticeEntity = JSONObject.parseObject(parse, PaymentNoticeEntity.class);
- if (null != noticeEntity){
- LambdaQueryWrapper<PaymentNoticeEntity> paymentNoticeEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
- paymentNoticeEntityLambdaQueryWrapper.eq(PaymentNoticeEntity::getMchOrderNo, noticeEntity.getMchOrderNo());
- PaymentNoticeEntity notice = noticeMapper.selectOne(paymentNoticeEntityLambdaQueryWrapper);
- if (null == notice){
- noticeEntity.setCreateTime(new Date());
- noticeMapper.insert(noticeEntity);
- }
- }
- LambdaQueryWrapper<PayTtqfLog> wrapper = new LambdaQueryWrapper<>();
- wrapper.eq(PayTtqfLog::getMchOrderNo, noticeEntity.getMchOrderNo());
- PayTtqfLog ttqfLog = logMapper.selectOne(wrapper);
- SysAmountAuditingVo amountAuditingVo = new SysAmountAuditingVo();
- amountAuditingVo.setAmount(noticeEntity.getAmount());
- amountAuditingVo.setUserId(ttqfLog.getUserId());
- writeRecord(amountAuditingVo,ttqfLog.getSysAmountAuditingId(),noticeEntity.getFeeAmount());
- }
- log.info("接收打款通知回调 + paymentNotice ================={}", parse);
- return TtqfResponse.ok();
- }
- public void writeRecord(SysAmountAuditingVo sysAmountAuditingVo,String id,BigDecimal feeAmount){
- SysAmountAuditingEntity sysAmountAuditingEntity = sysAmountAuditingService.getById(id);
- if (ObjectUtils.isEmpty(sysAmountAuditingEntity)){
- return;
- }
- sysAmountAuditingVo.setId(sysAmountAuditingEntity.getId());
- //提现审核金额
- BigDecimal amount = sysAmountAuditingVo.getAmount();
- //提现人
- String userId = sysAmountAuditingVo.getUserId();
- // 用户扣减金额
- if (StringUtils.isNotEmpty(userId)) {
- //提现人账户
- SysUserAccount sysUserAccount = sysUserAccountService.getById(userId);
- if (ObjectUtils.isNotEmpty(sysUserAccount)) {
- //已到账金额 = 原先的到账金额+ 已到账的金额
- sysUserAccount.setSumAmountAccount((sysUserAccount.getSumAmountAccount() == null ? BigDecimal.ZERO : sysUserAccount.getSumAmountAccount()).add(amount));
- //支付中的金额 = 原先的支付金额 -去提现的金额
- sysUserAccount.setSumAmountPayment((sysUserAccount.getSumAmountPayment() == null ? BigDecimal.ZERO : sysUserAccount.getSumAmountPayment()).subtract(amount));
- sysUserAccountService.updateById(sysUserAccount);
- }
- sysAmountAuditingVo.setAuditingStatus("3");
- sysAmountAuditingVo.setAuditingTime(new Date());
- sysAmountAuditingVo.setBankNumber(sysAmountAuditingEntity.getBankNumber());
- sysAmountAuditingVo.setUserName(userService.getByUserId(sysAmountAuditingEntity.getUserId()).getName());
- sysAmountAuditingVo.setUserId(sysAmountAuditingEntity.getUserId());
- BeanUtils.copyProperties(sysAmountAuditingVo, sysAmountAuditingEntity);
- sysAmountAuditingEntity.setCreateTime(null);
- amountAuditingMapper.updateById(sysAmountAuditingEntity);
- //通过审核表id查询历史记录表
- LambdaQueryWrapper<SysUserAccountHistory> lqw = new LambdaQueryWrapper<>();
- lqw.eq(SysUserAccountHistory::getAuditiingId, sysAmountAuditingEntity.getId());
- lqw.eq(SysUserAccountHistory::getUserId, userId);
- //插入轨迹表审核成功数据
- SysUserAccountHistory sysUserAccountHistory = sysUserAccountHistoryMapper.selectOne(lqw);
- //插入轨迹表
- SysAmountAuditingHistory sysAmountAuditingHistory = new SysAmountAuditingHistory(null, sysAmountAuditingEntity.getId(), amount, userId, new Date(), "4", "1", sysUserAccountHistory.getId());
- sysAmountAuditingHistoryService.save(sysAmountAuditingHistory);
- sendCollect(sysAmountAuditingEntity,sysAmountAuditingHistory.getAuditingStatus(),feeAmount);
- }
- }
- @Override
- public HttpResult billDownload(Integer type, String date) {
- BillDownloadResponse response = RetrieveTTQFApi.billDownload(type, date);
- if (PayConstantStatus.BIZ_CODE.equals(response.getBizCode())){
- return HttpResult.ok(response.getResultModel().getBillUrl());
- }
- return HttpResult.error(response.getBizMsg());
- }
- @Override
- public HttpResult receiptDownload(String mchOrderNo, String orderNo) {
- ReceiptlDownloadResponse response = RetrieveTTQFApi.receiptDownload(mchOrderNo,orderNo);
- if (PayConstantStatus.BIZ_CODE.equals(response.getBizCode())){
- return HttpResult.ok(response.getResultModel().getReceiptUrl());
- }
- return HttpResult.error(response.getBizMsg());
- }
- @Override
- public HttpResult queryPressing(UserWithdrawal withdrawal) {
- if (!sysSwitchConfigService.getBalanceExtractStatus()){
- return HttpResult.ok(WithdrawalFRes.builder().bizCode("0").msg("").url("").build());
- }
- SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(withdrawal.getUserId());
- if (Objects.isNull(sysUser)){
- return HttpResult.error("用户不存在,请检查");
- }
- if (StringUtils.isEmpty(sysUser.getIdentity())){
- return HttpResult.error("用户身份证号不存在,请检查");
- }
- if (!ManagementSource.MS_02.getCode().equals(sysUser.getManagementSource())){
- return HttpResult.ok(WithdrawalFRes.builder().bizCode("0").msg("").url("").build());
- }
- PayUserSign payUserSign = signService.selectOne(sysUser.getIdentity(),sysUser.getId());
- if (!Objects.isNull(payUserSign)){
- String signUrl = RetrieveTTQFApi.contractH5(sysUser.getIdentity());
- if (Objects.equals(PayConstantStatus.SIGN_STATUS,payUserSign.getSign()) &&
- Objects.equals(PayConstantStatus.AUTH_STATUS,payUserSign.getAuthStatus())){
- return HttpResult.ok(WithdrawalFRes.builder().bizCode("3").msg("已签约").url(signUrl).build());
- }
- return HttpResult.ok(WithdrawalFRes.builder().bizCode("2").msg("签约中").url(signUrl).build());
- }
- try {
- boolean sign = false;
- QueryPresignResultModel resultModel = RetrieveTTQFApi.queryPressing(sysUser.getIdentity());
- if (Objects.equals(PayConstantStatus.SIGN_STATUS,resultModel.getSignStatus()) &&
- Objects.equals(PayConstantStatus.AUTH_STATUS,resultModel.getAuthStatus())){
- sign = true;
- }
- return HttpResult.ok(WithdrawalFRes.builder().bizCode(sign ? "3" : "1").url("").msg(sign ? "已签约" : "未签约").build());
- }catch (Exception e){
- log.info("查询签约状态异常:{}", e.getMessage());
- return HttpResult.error();
- }
- }
- @Override
- public HttpResult signingAddress(UserWithdrawal withdrawal) {
- try {
- SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(withdrawal.getUserId());
- if (Objects.isNull(sysUser)){
- return HttpResult.error("用户不存在,请检查");
- }
- if (StringUtils.isEmpty(sysUser.getIdentity())){
- return HttpResult.error("用户身份证号不存在,请检查");
- }
- String pres = RetrieveTTQFApi.pres(sysUser, withdrawal);
- if (!StringUtils.isEmpty(pres)){
- signService.saveUserSign(sysUser.getIdentity(),sysUser.getId());
- }
- return HttpResult.ok(WithdrawalFRes.builder().bizCode("").url(pres).msg("").build());
- }catch (Exception e){
- log.error("获取用户签约信息异常{}",e.getMessage());
- throw new SystemException("提现申请提交失败");
- }
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public HttpResult userCashOut(UserWithdrawal withdrawal) {
- try {
- SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(withdrawal.getUserId());
- if (Objects.isNull(sysUser)){
- return HttpResult.error("用户不存在,请检查");
- }
- if (StringUtils.isEmpty(sysUser.getIdentity())){
- return HttpResult.error("用户身份证号不存在,请检查");
- }
- if (!ManagementSource.MS_02.getCode().equals(sysUser.getManagementSource())){
- return HttpResult.error("用户不是个代,请线下申请提现");
- }
- boolean balance = RetrieveTTQFApi.extractBalance(sysUser, withdrawal);
- return HttpResult.ok(balance);
- }catch (Exception e){
- log.error("提现申请提交失败{}",e.getMessage());
- throw new RuntimeException("提现申请提交失败");
- }
- }
- public void sendCollect(SysAmountAuditingEntity sysAmountAuditingEntity,String auditingStatus,BigDecimal feeAmount ){
- PushLgEntity lgEntity = new PushLgEntity();
- lgEntity.setApplicationTime(new Date());
- lgEntity.setBusinessUmber(sysAmountAuditingEntity.getId());
- lgEntity.setPayee(sysAmountAuditingEntity.getUserName());
- lgEntity.setPayeeId(sysAmountAuditingEntity.getUserId());
- lgEntity.setReceivingAccount(sysAmountAuditingEntity.getBankNumber());
- lgEntity.setExtractMoney(sysAmountAuditingEntity.getAmount());
- lgEntity.setServiceCharge(feeAmount);
- lgEntity.setExtractStatus(auditingStatus);
- pushLgEntityService.sendLgData(lgEntity);
- }
- }
|