|
|
|
@ -170,8 +170,14 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void addBalance(String clientId, BigDecimal amount, String orderNo, String stationId) {
|
|
|
|
|
this.changeBalance(clientId, amount, orderNo, stationId, BalanceChangeTypeEnum.INCOME);
|
|
|
|
|
public void addBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId) {
|
|
|
|
|
this.changeBalance(clientId, amount, orderNo, enterpriseId, BalanceChangeTypeEnum.INCOME);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void reduceBalance(String clientId, BigDecimal amount, String orderNo, String enterpriseId) {
|
|
|
|
|
this.changeBalance(clientId, amount, orderNo, enterpriseId, BalanceChangeTypeEnum.REFUND);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -257,44 +263,73 @@ public class ClientServiceImpl extends ServiceImpl<ClientMapper, Client> impleme
|
|
|
|
|
|
|
|
|
|
// 统一金额交易
|
|
|
|
|
private void changeBalance(String keyId, BigDecimal amount, String orderNo,
|
|
|
|
|
String stationId, BalanceChangeTypeEnum changeTypeEnum) {
|
|
|
|
|
String enterpriseId, BalanceChangeTypeEnum changeTypeEnum) {
|
|
|
|
|
Client client = this.getClientByKeyId(keyId);
|
|
|
|
|
BigDecimal balance = client.getBanlance();
|
|
|
|
|
String remark;
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
amount = amount.setScale(2, RoundingMode.HALF_UP);
|
|
|
|
|
String amountStr = String.valueOf(amount);
|
|
|
|
|
if (changeTypeEnum.equals(BalanceChangeTypeEnum.INCOME)) { // 收入
|
|
|
|
|
balance = balance.add(amount);
|
|
|
|
|
remark = "废品回收结算,收入" + amountStr + "元";
|
|
|
|
|
|
|
|
|
|
// 更新商户资金
|
|
|
|
|
Enterprise enterprise = enterpriseService.getEnterpriseByStationId(stationId);
|
|
|
|
|
BigDecimal fund = enterprise.getFund();
|
|
|
|
|
if (fund.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("商户资金不足,请联系商户");
|
|
|
|
|
}
|
|
|
|
|
fund = fund.subtract(amount);
|
|
|
|
|
enterprise.setFund(fund);
|
|
|
|
|
enterpriseService.updateById(enterprise);
|
|
|
|
|
|
|
|
|
|
// 记录商户流水
|
|
|
|
|
EnterpriseAccountBill accountBill = new EnterpriseAccountBill();
|
|
|
|
|
accountBill.setEnterpriseId(enterprise.getId());
|
|
|
|
|
accountBill.setBillNumber(CommonUtil.getIdNumber(BusinessCodeEnum.BILL.getCode()));
|
|
|
|
|
accountBill.setAccountBalance(fund);
|
|
|
|
|
accountBill.setPayoutAmount(amount);
|
|
|
|
|
accountBill.setOrderNumber(orderNo);
|
|
|
|
|
accountBill.setRemark("支付给散户" + amountStr + "元");
|
|
|
|
|
accountBill.setCreatorTime(now);
|
|
|
|
|
accountBillMapper.insert(accountBill);
|
|
|
|
|
|
|
|
|
|
} else { // 微信提现
|
|
|
|
|
if (balance.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("余额不足");
|
|
|
|
|
}
|
|
|
|
|
balance = balance.subtract(amount);
|
|
|
|
|
remark = "微信提现" + amountStr + "元";
|
|
|
|
|
switch (changeTypeEnum) { // 收入
|
|
|
|
|
case INCOME:
|
|
|
|
|
balance = balance.add(amount);
|
|
|
|
|
remark = "废品回收结算,收入" + amountStr + "元";
|
|
|
|
|
|
|
|
|
|
// 更新商户资金
|
|
|
|
|
Enterprise enterprise = enterpriseService.getEnterpriseById(enterpriseId, true);
|
|
|
|
|
BigDecimal fund = enterprise.getFund();
|
|
|
|
|
if (fund.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("商户资金不足,请联系商户");
|
|
|
|
|
}
|
|
|
|
|
fund = fund.subtract(amount);
|
|
|
|
|
enterprise.setFund(fund);
|
|
|
|
|
enterpriseService.updateById(enterprise);
|
|
|
|
|
|
|
|
|
|
// 记录商户流水
|
|
|
|
|
EnterpriseAccountBill accountBill = new EnterpriseAccountBill();
|
|
|
|
|
accountBill.setEnterpriseId(enterprise.getId());
|
|
|
|
|
accountBill.setBillNumber(CommonUtil.getIdNumber(BusinessCodeEnum.BILL.getCode()));
|
|
|
|
|
accountBill.setAccountBalance(fund);
|
|
|
|
|
accountBill.setPayoutAmount(amount);
|
|
|
|
|
accountBill.setOrderNumber(orderNo);
|
|
|
|
|
accountBill.setRemark("支付给散户" + amountStr + "元");
|
|
|
|
|
accountBill.setCreatorTime(now);
|
|
|
|
|
accountBillMapper.insert(accountBill);
|
|
|
|
|
break;
|
|
|
|
|
case REFUND:
|
|
|
|
|
if (balance.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("余额不足");
|
|
|
|
|
}
|
|
|
|
|
balance = balance.subtract(amount);
|
|
|
|
|
remark = "退款给商户" + amountStr + "元";
|
|
|
|
|
|
|
|
|
|
// 更新商户资金
|
|
|
|
|
Enterprise enterprise1 = enterpriseService.getEnterpriseById(enterpriseId, true);
|
|
|
|
|
BigDecimal fund1 = enterprise1.getFund();
|
|
|
|
|
fund1 = fund1.add(amount);
|
|
|
|
|
enterprise1.setFund(fund1);
|
|
|
|
|
enterpriseService.updateById(enterprise1);
|
|
|
|
|
|
|
|
|
|
// 记录商户流水
|
|
|
|
|
EnterpriseAccountBill accountBill1 = new EnterpriseAccountBill();
|
|
|
|
|
accountBill1.setEnterpriseId(enterprise1.getId());
|
|
|
|
|
accountBill1.setBillNumber(CommonUtil.getIdNumber(BusinessCodeEnum.BILL.getCode()));
|
|
|
|
|
accountBill1.setAccountBalance(fund1);
|
|
|
|
|
accountBill1.setIncomeAmount(amount);
|
|
|
|
|
accountBill1.setOrderNumber(orderNo);
|
|
|
|
|
accountBill1.setRemark("散户退款到商户" + amountStr + "元");
|
|
|
|
|
accountBill1.setCreatorTime(now);
|
|
|
|
|
accountBillMapper.insert(accountBill1);
|
|
|
|
|
break;
|
|
|
|
|
case CASH_OUT: // 微信提现
|
|
|
|
|
if (balance.compareTo(amount) < 0) {
|
|
|
|
|
throw new BizIllegalException("余额不足");
|
|
|
|
|
}
|
|
|
|
|
balance = balance.subtract(amount);
|
|
|
|
|
remark = "微信提现" + amountStr + "元";
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 更新散户余额
|
|
|
|
|
client.setBanlance(balance);
|
|
|
|
|