package com.sinata.rest.modular.mall.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.sinata.rest.common.lock.IdLock;
|
import com.sinata.rest.common.lock.IdLocker;
|
import com.sinata.rest.modular.mall.dao.MemMerchantBankMapper;
|
import com.sinata.rest.modular.mall.model.MemMerchantBank;
|
import com.sinata.rest.modular.mall.service.IMemMerchantBankService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Isolation;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
|
/**
|
* <p>
|
* 门店账户信息 服务实现类
|
* </p>
|
*
|
* @author goku
|
* @since 2023-03-23
|
*/
|
@Service
|
public class MemMerchantBankServiceImpl extends ServiceImpl<MemMerchantBankMapper, MemMerchantBank> implements IMemMerchantBankService {
|
|
final IdLocker locker = new IdLocker();
|
|
@Override
|
@Transactional(isolation = Isolation.REPEATABLE_READ)
|
public void addUserBank(Integer merchantId, BigDecimal balance, BigDecimal balanceFreeze, BigDecimal rice, BigDecimal froze, BigDecimal score) {
|
IdLock lock = locker.acquireLock(merchantId);
|
synchronized (lock) {
|
LambdaQueryWrapper<MemMerchantBank> wr = new LambdaQueryWrapper<>();
|
wr.eq(MemMerchantBank::getId, merchantId);
|
MemMerchantBank b = getOne(wr);
|
if (b != null) {
|
this.baseMapper.editUserBank(merchantId,
|
balance == null ? BigDecimal.ZERO : balance,
|
balanceFreeze == null ? BigDecimal.ZERO : balanceFreeze,
|
rice == null ? BigDecimal.ZERO : rice,
|
froze == null ? BigDecimal.ZERO : froze,
|
score == null ? BigDecimal.ZERO : score);
|
}
|
}
|
locker.releaseLock(lock);
|
}
|
|
@Override
|
public MemMerchantBank getMerchantBankByUserId(Integer userId) {
|
return this.baseMapper.getMerchantBankByUserId(userId);
|
}
|
}
|