Commit 64879c5b by zhiwj

bug

parent 7ce60eed
......@@ -50,5 +50,5 @@ public interface BillingSmsRecordService {
void updateCacheStatus(Integer smsRecordId);
void updateDatabaseStatus(Integer smsRecordId);
void updateDatabaseStatus(SmsRecordDTO smsRecordDTO);
}
......@@ -76,10 +76,12 @@ public class BillingSmsRecordServiceImpl implements BillingSmsRecordService{
}
@Override
public void updateDatabaseStatus(Integer smsRecordId) {
public void updateDatabaseStatus(SmsRecordDTO smsRecordDTO) {
TabBillingSmsRecord smsRecord = new TabBillingSmsRecord();
smsRecord.setSmsRecordId(smsRecordId);
smsRecord.setSmsRecordId(smsRecordDTO.getSmsRecordId());
smsRecord.setDatabaseStatus(1);
smsRecord.setDeductionTime(new Date());
smsRecord.setAppName(smsRecordDTO.getAppName());
tabBillingSmsRecordMapper.updateByPrimaryKeySelective(smsRecord);
}
}
......@@ -98,18 +98,23 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
GicMQClient client = GICMQClientUtil.getClientInstance();
try {
logger.info("国内短信缓存扣费:{}", arg);
SmsRecordDTO smsRecordDTO = JSON.parseObject(arg, SmsRecordDTO.class);
smsRecordDTO.setCacheStatus(0);
smsRecordDTO.setDatabaseStatus(0);
Integer smsRecordId = billingSmsRecordService.saveSmsRecord(smsRecordDTO);
smsRecordDTO.setSmsRecordId(smsRecordId);
// 判断是扣套餐包还是扣余额
RedissonClient redisClient = RedisUtil.getRedisClient();
RAtomicLong smsCount = redisClient.getAtomicLong(Constants.ENTERPRISE_BILLING_SMS_PACKAGE_COUNT + smsRecordDTO.getEnterpriseId());
// 缓存扣费
int deductType = deduct(smsCount, smsRecordDTO.getEnterpriseId());
smsRecordDTO.setDeductType(deductType);
smsRecordDTO.setCacheStatus(0);
smsRecordDTO.setDatabaseStatus(0);
// 缓存扣费 0套餐包 4余额
Integer fee = accountStandardService.queryUnitFee(smsRecordDTO.getEnterpriseId(), AccountStandardEnum.SMS.getCode());
int deductType = deduct(smsCount, smsRecordDTO.getEnterpriseId(), fee);
smsRecordDTO.setPayType(deductType);
smsRecordDTO.setFee((double)fee/1000);
Integer smsRecordId = billingSmsRecordService.saveSmsRecord(smsRecordDTO);
smsRecordDTO.setSmsRecordId(smsRecordId);
// 队列
client.sendMessage("smsDbMq", JSON.toJSONString(smsRecordDTO));
......@@ -121,7 +126,7 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
return ServiceResponse.success();
}
private int deduct(RAtomicLong rSmsCount, Integer enterpriseId) {
private int deduct(RAtomicLong rSmsCount, Integer enterpriseId, Integer fee) {
long smsCount = rSmsCount.get();
if (smsCount > 0) {
// 套餐包计费
......@@ -129,15 +134,14 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
if (!smsCountDeduct) {
// 设置失败 重新计算
// todo 这里不知道要不要加个延时之类的
return deduct(rSmsCount, enterpriseId);
return deduct(rSmsCount, enterpriseId, fee);
} else {
return 1;
return 0;
}
} else {
// 账户计费
Integer fee = accountStandardService.queryUnitFee(enterpriseId, AccountStandardEnum.SMS.getCode());
billingAccountService.deductAccountByCache(fee.doubleValue() / 1000, enterpriseId);
return 2;
return 4;
}
}
......@@ -155,17 +159,17 @@ public class SmsRecordApiServiceImpl implements SmsRecordApiService {
}
}
Integer deductType = smsRecordDTO.getDeductType();
if (deductType == 1) {
Integer deductType = smsRecordDTO.getPayType();
if (deductType == 0) {
// 短信套餐包扣费
Integer enterpriseSmsPackageId = billingEnterpriseSmsPackageService.deduct(smsRecordDTO.getEnterpriseId());
smsRecordDTO.setEnterpriseSmsPackageId(enterpriseSmsPackageId);
} else if (deductType == 2) {
} else if (deductType == 4) {
// 余额扣费
Integer unitFee = accountStandardService.queryUnitFee(smsRecordDTO.getEnterpriseId(), AccountStandardEnum.SMS.getCode());
billingAccountService.deductAccountByDatabase(unitFee.doubleValue() / 1000, smsRecordDTO.getEnterpriseId());
}
billingSmsRecordService.updateDatabaseStatus(smsRecordDTO.getSmsRecordId());
billingSmsRecordService.updateDatabaseStatus(smsRecordDTO);
return ServiceResponse.success();
}
}
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