|
|
@@ -1,6 +1,7 @@
|
|
|
package com.sckw.payment.service.wallet;
|
|
|
|
|
|
-
|
|
|
+import cn.hutool.core.util.NumberUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
@@ -11,7 +12,9 @@ import com.sckw.core.common.enums.StringConstant;
|
|
|
import com.sckw.core.model.enums.EntTypeEnum;
|
|
|
import com.sckw.core.model.enums.SystemTypeEnum;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
+import com.sckw.core.web.response.BaseResult;
|
|
|
import com.sckw.core.web.response.result.PageDataResult;
|
|
|
+import com.sckw.payment.api.model.WalletFreeze;
|
|
|
import com.sckw.payment.enums.PrepayTypEnum;
|
|
|
import com.sckw.payment.model.KwpBizWallet;
|
|
|
import com.sckw.payment.model.KwpBizWalletPrepay;
|
|
|
@@ -244,6 +247,7 @@ public class KwpBizWalletService {
|
|
|
|
|
|
/**
|
|
|
* 过滤条件
|
|
|
+ *
|
|
|
* @param request
|
|
|
* @param wallet
|
|
|
* @return
|
|
|
@@ -281,7 +285,7 @@ public class KwpBizWalletService {
|
|
|
if (entId == null) {
|
|
|
return "";
|
|
|
}
|
|
|
- KwsEnterpriseResDto enterpriseResDto= remoteSystemService.queryEnterpriseByEntId(entId);
|
|
|
+ KwsEnterpriseResDto enterpriseResDto = remoteSystemService.queryEnterpriseByEntId(entId);
|
|
|
if (enterpriseResDto == null) {
|
|
|
return "";
|
|
|
}
|
|
|
@@ -311,6 +315,7 @@ public class KwpBizWalletService {
|
|
|
|
|
|
/**
|
|
|
* 新增钱包校验
|
|
|
+ *
|
|
|
* @param request
|
|
|
*/
|
|
|
private void checkAddWallet(KwpBizWalletSaveRequest request) {
|
|
|
@@ -467,5 +472,141 @@ public class KwpBizWalletService {
|
|
|
return walletPrepayExcelVO;
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public BaseResult<Boolean> freezeMoney(WalletFreeze walletFreeze) {
|
|
|
+ log.info("冻结钱包:{}", JSONObject.toJSONString(walletFreeze));
|
|
|
+ KwpBizWallet one = kwpBizWalletRepository.getOne(new LambdaQueryWrapper<KwpBizWallet>()
|
|
|
+ .eq(KwpBizWallet::getSupEntId, walletFreeze.getSaleEntId())
|
|
|
+ .eq(KwpBizWallet::getProEntId, walletFreeze.getBuyEntId()).eq(KwpBizWallet::getState, 1)
|
|
|
+ );
|
|
|
+ if (Objects.isNull(one)) {
|
|
|
+ return BaseResult.failed("钱包不存在,请核实");
|
|
|
+ }
|
|
|
+ BigDecimal amount = one.getAmount();
|
|
|
+ if (NumberUtil.isLess(amount, walletFreeze.getMoney())) {
|
|
|
+ return BaseResult.failed("可用余额不足");
|
|
|
+ }
|
|
|
+ one.setAmount(NumberUtil.sub(amount, walletFreeze.getMoney()));
|
|
|
+ one.setPrepayAmount(NumberUtil.add(one.getPrepayAmount(), walletFreeze.getMoney()));
|
|
|
+ one.setUpdateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletRepository.updateById(one);
|
|
|
+ //新增订单
|
|
|
+ KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
|
|
|
+ kwpBizWalletPrepay.setWalletId(one.getId());
|
|
|
+ kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
|
|
|
+ kwpBizWalletPrepay.setChangeAmount(walletFreeze.getMoney());
|
|
|
+ kwpBizWalletPrepay.setAmount(one.getAmount());
|
|
|
+ kwpBizWalletPrepay.setPrepayAmount(one.getPrepayAmount());
|
|
|
+ kwpBizWalletPrepay.setType(2);
|
|
|
+ kwpBizWalletPrepay.setRemark(StrUtil.format("[订单号:{}]冻结", walletFreeze.getOrderNo()));
|
|
|
+ kwpBizWalletPrepay.setVoucherUrl("");
|
|
|
+ kwpBizWalletPrepay.setCreateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setUpdateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
|
|
|
+ return BaseResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public BaseResult<Boolean> dealMoney(WalletFreeze walletFreeze) {
|
|
|
+ Long tTradeOrderId = walletFreeze.getTTradeOrderId();
|
|
|
+ KwpBizWalletPrepay one = kwpBizWalletPrepayRepository.getOne(new LambdaQueryWrapper<KwpBizWalletPrepay>()
|
|
|
+ .eq(KwpBizWalletPrepay::getOrderId, tTradeOrderId)
|
|
|
+ .eq(KwpBizWalletPrepay::getType, 2)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ if (Objects.isNull(one)) {
|
|
|
+ return BaseResult.failed("冻结订单不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ KwpBizWallet wallet = kwpBizWalletRepository.getById(one.getWalletId());
|
|
|
+ if (Objects.isNull(wallet) || Objects.equals(wallet.getState(), 0)) {
|
|
|
+ return BaseResult.failed("钱包不存在或状态异常");
|
|
|
+ }
|
|
|
+ BigDecimal changeAmount = one.getChangeAmount();//冻结金额
|
|
|
+ //钱包实际可用
|
|
|
+ BigDecimal amount = wallet.getAmount();
|
|
|
+ //新增解冻订单
|
|
|
+ amount = NumberUtil.add(amount, changeAmount);
|
|
|
+ KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
|
|
|
+ kwpBizWalletPrepay.setWalletId(one.getId());
|
|
|
+ kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
|
|
|
+ kwpBizWalletPrepay.setChangeAmount(changeAmount);
|
|
|
+ kwpBizWalletPrepay.setAmount(amount);
|
|
|
+ kwpBizWalletPrepay.setPrepayAmount(NumberUtil.sub(wallet.getPrepayAmount(), changeAmount));
|
|
|
+ kwpBizWalletPrepay.setType(3);
|
|
|
+ kwpBizWalletPrepay.setRemark(StrUtil.format("[{}][结算]解冻订单总金额", walletFreeze.getOrderNo()));
|
|
|
+ kwpBizWalletPrepay.setVoucherUrl("");
|
|
|
+ kwpBizWalletPrepay.setCreateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setUpdateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
|
|
|
+
|
|
|
+ //新增消费订单
|
|
|
+ KwpBizWalletPrepay kwpBizWalletPrepay2 = new KwpBizWalletPrepay();
|
|
|
+ kwpBizWalletPrepay2.setWalletId(one.getId());
|
|
|
+ kwpBizWalletPrepay2.setOrderId(walletFreeze.getTTradeOrderId());
|
|
|
+ kwpBizWalletPrepay2.setChangeAmount(walletFreeze.getMoney());
|
|
|
+ kwpBizWalletPrepay2.setAmount(NumberUtil.sub(amount, walletFreeze.getMoney()));
|
|
|
+ kwpBizWalletPrepay2.setPrepayAmount(kwpBizWalletPrepay.getPrepayAmount());
|
|
|
+ kwpBizWalletPrepay2.setType(4);
|
|
|
+ kwpBizWalletPrepay2.setRemark(StrUtil.format("[{}][结算]扣除订单总金额", walletFreeze.getOrderNo()));
|
|
|
+ kwpBizWalletPrepay2.setVoucherUrl("");
|
|
|
+ kwpBizWalletPrepay2.setCreateTime(new Date());
|
|
|
+ kwpBizWalletPrepay2.setUpdateTime(new Date());
|
|
|
+ kwpBizWalletPrepay2.setCreateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepay2.setUpdateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
|
|
|
+
|
|
|
+ wallet.setAmount(kwpBizWalletPrepay2.getAmount());
|
|
|
+ wallet.setPrepayAmount(kwpBizWalletPrepay2.getPrepayAmount());
|
|
|
+ kwpBizWalletRepository.updateById(wallet);
|
|
|
+ return BaseResult.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public BaseResult<Boolean> unfreezeMoney(WalletFreeze walletFreeze) {
|
|
|
+ log.info("解冻钱包:{}", JSONObject.toJSONString(walletFreeze));
|
|
|
+ Long tTradeOrderId = walletFreeze.getTTradeOrderId();
|
|
|
+ KwpBizWalletPrepay one = kwpBizWalletPrepayRepository.getOne(new LambdaQueryWrapper<KwpBizWalletPrepay>()
|
|
|
+ .eq(KwpBizWalletPrepay::getOrderId, tTradeOrderId)
|
|
|
+ .eq(KwpBizWalletPrepay::getType, 2)
|
|
|
+ .last("limit 1")
|
|
|
+ );
|
|
|
+ if (Objects.isNull(one)) {
|
|
|
+ return BaseResult.failed("冻结订单不存在");
|
|
|
+ }
|
|
|
|
|
|
+ KwpBizWallet wallet = kwpBizWalletRepository.getById(one.getWalletId());
|
|
|
+ if (Objects.isNull(wallet) || Objects.equals(wallet.getState(), 0)) {
|
|
|
+ return BaseResult.failed("钱包不存在或状态异常");
|
|
|
+ }
|
|
|
+ BigDecimal changeAmount = one.getChangeAmount();//冻结金额
|
|
|
+ //钱包实际可用
|
|
|
+ BigDecimal amount = wallet.getAmount();
|
|
|
+ //新增解冻订单
|
|
|
+ amount = NumberUtil.add(amount, changeAmount);
|
|
|
+ KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
|
|
|
+ kwpBizWalletPrepay.setWalletId(one.getId());
|
|
|
+ kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
|
|
|
+ kwpBizWalletPrepay.setChangeAmount(changeAmount);
|
|
|
+ kwpBizWalletPrepay.setAmount(amount);
|
|
|
+ kwpBizWalletPrepay.setPrepayAmount(NumberUtil.sub(wallet.getPrepayAmount(), changeAmount));
|
|
|
+ kwpBizWalletPrepay.setType(3);
|
|
|
+ kwpBizWalletPrepay.setRemark(StrUtil.format("[订单号:{}]解冻", walletFreeze.getOrderNo()));
|
|
|
+ kwpBizWalletPrepay.setVoucherUrl("");
|
|
|
+ kwpBizWalletPrepay.setCreateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setUpdateTime(new Date());
|
|
|
+ kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
|
|
|
+ kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
|
|
|
+
|
|
|
+
|
|
|
+ wallet.setAmount(amount);
|
|
|
+ wallet.setPrepayAmount(kwpBizWalletPrepay.getPrepayAmount());
|
|
|
+ kwpBizWalletRepository.updateById(wallet);
|
|
|
+ return BaseResult.success();
|
|
|
+ }
|
|
|
}
|