Commit 46ff5826 by zhiwj

bug

parent 02a20bb2
......@@ -56,6 +56,8 @@ public interface Constants {
*/
String ENTERPRISE_BILLING_SMS_PACKAGE_COUNT = "enterprise_billing_sms_package_count";
String ENTERPRISE_BILLING_SMS_PACKAGE_COUNT_LOCK = "enterprise_billing_sms_package_count_lock";
/**
* 审批的url
*/
......
......@@ -2,6 +2,7 @@ package com.gic.enterprise.service;
import com.gic.enterprise.dto.BillingEnterpriseSmsPackageDTO;
import com.gic.enterprise.entity.TabBillingEnterpriseSmsPackage;
import org.redisson.api.RAtomicLong;
import java.util.List;
/**
......@@ -41,6 +42,7 @@ public interface BillingEnterpriseSmsPackageService {
/**
* 查询该商户套餐包里全部拥有的可用短信条数
* @return
*/
Integer getTotalSmsInPackageByEnterpriseId(Integer enterpriseId);
RAtomicLong getTotalSmsInPackageByEnterpriseId(Integer enterpriseId);
}
package com.gic.enterprise.service.impl;
import com.gic.commons.util.EntityUtil;
import com.gic.enterprise.constant.Constants;
import com.gic.enterprise.dao.mapper.TabBillingEnterpriseSmsPackageMapper;
import com.gic.enterprise.dto.BillingEnterpriseSmsPackageDTO;
import com.gic.enterprise.entity.TabBillingEnterpriseSmsPackage;
import com.gic.enterprise.service.BillingEnterpriseSmsPackageService;
import com.gic.redis.data.util.RedisUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -15,6 +21,8 @@ import java.util.List;
@Service("billingEnterpriseSmsPackageService")
public class BillingEnterpriseSmsPackageServiceImpl implements BillingEnterpriseSmsPackageService {
private Logger logger = LogManager.getLogger(BillingEnterpriseSmsPackageServiceImpl.class);
@Autowired
private TabBillingEnterpriseSmsPackageMapper tabBillingEnterpriseSmsPackageMapper;
......@@ -61,7 +69,17 @@ public class BillingEnterpriseSmsPackageServiceImpl implements BillingEnterprise
}
@Override
public Integer getTotalSmsInPackageByEnterpriseId(Integer enterpriseId) {
return tabBillingEnterpriseSmsPackageMapper.getTotalSmsInPackageByEnterpriseId(enterpriseId);
public RAtomicLong getTotalSmsInPackageByEnterpriseId(Integer enterpriseId) {
RedissonClient redisClient = RedisUtil.getRedisClient();
RAtomicLong smsCountR = redisClient.getAtomicLong(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT + enterpriseId);
long smsPackageCount = smsCountR.get();
if (smsPackageCount == 0) {
RedisUtil.lock(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT_LOCK + enterpriseId, 30L);
logger.info("redis中没有套餐包 查询数据库:{}", enterpriseId);
Integer totalSms = tabBillingEnterpriseSmsPackageMapper.getTotalSmsInPackageByEnterpriseId(enterpriseId);
smsCountR.set(totalSms);
RedisUtil.unlock(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT_LOCK + enterpriseId);
}
return smsCountR;
}
}
......@@ -12,12 +12,10 @@ import com.gic.enterprise.error.ErrorCode;
import com.gic.enterprise.response.EnterpriseServiceResponse;
import com.gic.enterprise.service.*;
import com.gic.mq.sdk.GicMQClient;
import com.gic.redis.data.util.RedisUtil;
import com.gic.store.utils.valid.ValidUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.redisson.api.RAtomicLong;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -50,8 +48,7 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
if (enterpriseId == null || sendCount == null) {
return EnterpriseServiceResponse.failure(ErrorCode.PARAMETER_ERROR);
}
RedissonClient redisClient = RedisUtil.getRedisClient();
RAtomicLong smsCountR = redisClient.getAtomicLong(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT + enterpriseId);
RAtomicLong smsCountR = billingEnterpriseSmsPackageService.getTotalSmsInPackageByEnterpriseId(enterpriseId);
long smsPackageCount = smsCountR.get();
if (smsPackageCount > sendCount) {
logger.info("enterpriseId:{}, 短信套餐包条数:{}, 发送条数:{}, 可以发送", enterpriseId, smsPackageCount, sendCount);
......@@ -101,8 +98,7 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
SmsRecordDTO smsRecordDTO = JSON.parseObject(arg, SmsRecordDTO.class);
// 判断是扣套餐包还是扣余额
RedissonClient redisClient = RedisUtil.getRedisClient();
RAtomicLong smsCount = redisClient.getAtomicLong(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT + smsRecordDTO.getEnterpriseId());
RAtomicLong smsCount = billingEnterpriseSmsPackageService.getTotalSmsInPackageByEnterpriseId(smsRecordDTO.getEnterpriseId());
smsRecordDTO.setCacheStatus(0);
smsRecordDTO.setDatabaseStatus(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment