死锁问题

This commit is contained in:
wanggeng 2024-06-25 14:02:58 +08:00
parent cbdf804c9c
commit e00d6f413e

View File

@ -53,6 +53,8 @@ import java.util.*;
@Service
public class AccountRechargeServiceImpl extends DefaultBaseService implements IAccountRechargeService {
private final Object lock = new Object();
@Autowired
private IAccountRechargeDao accountRechargeDao;
@ -277,64 +279,67 @@ public class AccountRechargeServiceImpl extends DefaultBaseService implements IA
@Override
public AccountRechargePayDTO saveAccount(String thirdParty, AccountRechargeVO accountRechargeVO) {
String userId = StringUtils.isEmpty(accountRechargeVO.getUserId()) ? userUtil.getUserId(null) : accountRechargeVO.getUserId();
// 查看该用户今日的记录, 超过50条不能再创建
Integer count = accountRechargeDao.getTodayByAccountId(userId);
if (count > 50) {
throw new SaveException("禁止操作");
}
accountRechargeVO.setThirdParty(thirdParty);
accountRechargeVO.setAccountId(userId);
accountRechargeVO.setRechargeCheck("0");
accountRechargeVO.setReconciliationStatus("0");
Integer totalMoney = PayUtil.buiderMoney(accountRechargeVO.getRechargeMoney());
AccountRechargePayDTO payDTO = new AccountRechargePayDTO();
synchronized (lock) {
String userId = StringUtils.isEmpty(accountRechargeVO.getUserId()) ? userUtil.getUserId(null) : accountRechargeVO.getUserId();
// 查看该用户今日的记录, 超过50条不能再创建
Integer count = accountRechargeDao.getTodayByAccountId(userId);
if (count > 50) {
throw new SaveException("禁止操作");
}
accountRechargeVO.setThirdParty(thirdParty);
accountRechargeVO.setAccountId(userId);
accountRechargeVO.setRechargeCheck("0");
accountRechargeVO.setReconciliationStatus("0");
Integer totalMoney = PayUtil.buiderMoney(accountRechargeVO.getRechargeMoney());
/* if (totalMoney < 10 || totalMoney > 200000) { // 最大2000块,最小1毛
throw new SaveException("金额输入错误");
}*/
AccountRechargePayDTO payDTO = new AccountRechargePayDTO();
Map<String, Object> params = HashMapUtil.beanToMap(accountRechargeVO);
if ("微信".equals(thirdParty)) {
String accountRechargeId = getUUID("wx");
params.put("rechargeType", "2");
params.put("accountRechargeId", accountRechargeId);
params.put("rechargeFinalTime", DateUtil.getTime());
Map<String, Object> params = HashMapUtil.beanToMap(accountRechargeVO);
if ("微信".equals(thirdParty)) {
String brcode = WXPay.createPay(accountRechargeId, totalMoney, ProjectConfigUtil.getText("RechargePayTitle"));
String accountRechargeId = getUUID("wx");
params.put("rechargeType", "2");
params.put("accountRechargeId", accountRechargeId);
params.put("rechargeFinalTime", DateUtil.getTime());
payDTO.setAccountRechargeId(accountRechargeId);
payDTO.setThirdParty(thirdParty);
payDTO.setThirdPartyPayUrl(brcode);
String brcode = WXPay.createPay(accountRechargeId, totalMoney, ProjectConfigUtil.getText("RechargePayTitle"));
payDTO.setAccountRechargeId(accountRechargeId);
payDTO.setThirdParty(thirdParty);
payDTO.setThirdPartyPayUrl(brcode);
}
if ("支付宝".equals(thirdParty)) {
String accountRechargeId = getUUID("zfb");
params.put("rechargeType", "2");
params.put("accountRechargeId", accountRechargeId);
params.put("rechargeFinalTime", DateUtil.getTime());
String brcode = ALiPay.createPay(accountRechargeId, totalMoney, ProjectConfigUtil.getText("RechargePayTitle"));
payDTO.setAccountRechargeId(accountRechargeId);
payDTO.setThirdParty(thirdParty);
payDTO.setThirdPartyPayUrl(brcode);
}
if ("对公转账".equals(thirdParty)) {
String accountRechargeId = getUUID("oto");
params.put("rechargeType", "1");
params.put("accountRechargeId", accountRechargeId);
payDTO.setAccountRechargeId(accountRechargeId);
}
String currentDate = DateUtil.getTime();
params.put("creator", userId);
params.put("gmtCreate", currentDate);
params.put("modifier", userId);
params.put("gmtModified", currentDate);
params.put("isDelete", 0);
accountRechargeDao.save(params);
}
if ("支付宝".equals(thirdParty)) {
String accountRechargeId = getUUID("zfb");
params.put("rechargeType", "2");
params.put("accountRechargeId", accountRechargeId);
params.put("rechargeFinalTime", DateUtil.getTime());
String brcode = ALiPay.createPay(accountRechargeId, totalMoney, ProjectConfigUtil.getText("RechargePayTitle"));
payDTO.setAccountRechargeId(accountRechargeId);
payDTO.setThirdParty(thirdParty);
payDTO.setThirdPartyPayUrl(brcode);
}
if ("对公转账".equals(thirdParty)) {
String accountRechargeId = getUUID("oto");
params.put("rechargeType", "1");
params.put("accountRechargeId", accountRechargeId);
payDTO.setAccountRechargeId(accountRechargeId);
}
String currentDate = DateUtil.getTime();
params.put("creator", userId);
params.put("gmtCreate", currentDate);
params.put("modifier", userId);
params.put("gmtModified", currentDate);
params.put("isDelete", 0);
accountRechargeDao.save(params);
return payDTO;
}