|
|
|
@ -124,42 +124,6 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
|
|
|
|
|
this.updateById(client);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override // 金额交易!
|
|
|
|
|
public void changeBalanceById(String id, String openId, BigDecimal amount, BalanceChangeTypeEnum changeTypeEnum) {
|
|
|
|
|
LambdaQueryWrapper<Client> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
wrapper.eq(Client::getId, id).or().eq(Client::getWxOpenid, openId);
|
|
|
|
|
wrapper.last("for update");
|
|
|
|
|
Client client = this.getOne(wrapper);
|
|
|
|
|
BigDecimal balance = client.getBanlance();
|
|
|
|
|
String remark;
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入
|
|
|
|
|
balance = balance.add(amount);
|
|
|
|
|
remark = "废品回收结算,收入" + amount + "元";
|
|
|
|
|
} else { // 支出/提现
|
|
|
|
|
if (balance.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("余额不足");
|
|
|
|
|
}
|
|
|
|
|
balance = balance.subtract(amount);
|
|
|
|
|
remark = "微信提现" + amount + "元";
|
|
|
|
|
}
|
|
|
|
|
// 更新余额
|
|
|
|
|
client.setBanlance(balance);
|
|
|
|
|
client.setUpdateTime(now);
|
|
|
|
|
this.updateById(client);
|
|
|
|
|
|
|
|
|
|
// 添加流水记录
|
|
|
|
|
ClientAccountDetail accountDetail = new ClientAccountDetail();
|
|
|
|
|
accountDetail.setClientId(client.getId());
|
|
|
|
|
accountDetail.setAmount(amount);
|
|
|
|
|
accountDetail.setChangeType(changeTypeEnum);
|
|
|
|
|
accountDetail.setBanlance(balance);
|
|
|
|
|
accountDetail.setRemark(remark);
|
|
|
|
|
accountDetail.setCreatorTime(now);
|
|
|
|
|
accountDetailMapper.insert(accountDetail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Page<ClientAccountDetail> queryAccountStatementByPage(ClientAccountQuery clientAccountQuery) {
|
|
|
|
|
LambdaQueryWrapperX<ClientAccountDetail> wrapperX = new LambdaQueryWrapperX<>();
|
|
|
|
@ -172,11 +136,17 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void addBalance(String clientId, BigDecimal amount, String orderNo) {
|
|
|
|
|
this.changeBalance(clientId, amount, orderNo, BalanceChangeTypeEnum.INCOME);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public void cashBalance(String openId, Integer amount) throws Exception {
|
|
|
|
|
// 模拟提现成功
|
|
|
|
|
this.changeBalanceById(null, openId, new BigDecimal(amount), BalanceChangeTypeEnum.CASH_OUT);
|
|
|
|
|
this.changeBalance(openId, new BigDecimal(amount), null, BalanceChangeTypeEnum.CASH_OUT);
|
|
|
|
|
/* BatchTransferModel batchTransferModel = new BatchTransferModel()
|
|
|
|
|
.setAppid(wxPayV3Properties.getAppId())
|
|
|
|
|
.setOut_batch_no(PayKit.generateStr())
|
|
|
|
@ -246,7 +216,44 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
|
|
|
|
|
// System.out.println("签名算法:" + certificate.getSigAlgName());
|
|
|
|
|
// System.out.println("签名:" + certificate.getSignature().toString());
|
|
|
|
|
}
|
|
|
|
|
System.out.println("serialNo:" + serialNo);
|
|
|
|
|
// System.out.println("serialNo:" + serialNo);
|
|
|
|
|
return serialNo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 统一金额交易
|
|
|
|
|
private void changeBalance(String keyId, BigDecimal amount, String orderNo, BalanceChangeTypeEnum changeTypeEnum) {
|
|
|
|
|
LambdaQueryWrapper<Client> wrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
wrapper.eq(Client::getId, keyId).or().eq(Client::getWxOpenid, keyId);
|
|
|
|
|
wrapper.last("for update");
|
|
|
|
|
Client client = this.getOne(wrapper);
|
|
|
|
|
BigDecimal balance = client.getBanlance();
|
|
|
|
|
String remark;
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入
|
|
|
|
|
balance = balance.add(amount);
|
|
|
|
|
remark = "废品回收结算,收入" + amount + "元";
|
|
|
|
|
} else { // 支出/提现
|
|
|
|
|
if (balance.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("余额不足");
|
|
|
|
|
}
|
|
|
|
|
balance = balance.subtract(amount);
|
|
|
|
|
remark = "微信提现" + amount + "元";
|
|
|
|
|
}
|
|
|
|
|
// 更新余额
|
|
|
|
|
client.setBanlance(balance);
|
|
|
|
|
client.setUpdateTime(now);
|
|
|
|
|
this.updateById(client);
|
|
|
|
|
|
|
|
|
|
// 添加流水记录
|
|
|
|
|
ClientAccountDetail accountDetail = new ClientAccountDetail();
|
|
|
|
|
accountDetail.setClientId(client.getId());
|
|
|
|
|
accountDetail.setAmount(amount);
|
|
|
|
|
accountDetail.setChangeType(changeTypeEnum);
|
|
|
|
|
accountDetail.setBanlance(balance);
|
|
|
|
|
accountDetail.setRemark(remark);
|
|
|
|
|
accountDetail.setOrderNumber(orderNo);
|
|
|
|
|
accountDetail.setCreatorTime(now);
|
|
|
|
|
accountDetailMapper.insert(accountDetail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|