|
@@ -2,9 +2,9 @@ package com.fs.company.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.fs.common.core.redis.RedisCache;
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
|
+import com.fs.company.constant.CompanyTrafficConstants;
|
|
import com.fs.company.domain.Company;
|
|
import com.fs.company.domain.Company;
|
|
import com.fs.company.domain.CompanyTrafficRecord;
|
|
import com.fs.company.domain.CompanyTrafficRecord;
|
|
import com.fs.company.domain.CompanyTrafficRecordLog;
|
|
import com.fs.company.domain.CompanyTrafficRecordLog;
|
|
@@ -18,9 +18,11 @@ import com.fs.system.domain.SysConfig;
|
|
import com.fs.system.service.ISysConfigService;
|
|
import com.fs.system.service.ISysConfigService;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
+import javax.annotation.PostConstruct;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
@@ -42,15 +44,48 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
|
|
@Autowired
|
|
@Autowired
|
|
private ICompanyTrafficRecordLogService companyTrafficRecordLogService;
|
|
private ICompanyTrafficRecordLogService companyTrafficRecordLogService;
|
|
|
|
|
|
|
|
+ //启动时初始化流量
|
|
|
|
+ @PostConstruct
|
|
|
|
+ public void init() {
|
|
|
|
+ List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
|
|
|
|
+ for (CompanyTrafficRecord companyTrafficRecord : companyTrafficRecords) {
|
|
|
|
+ // 获取公司流量
|
|
|
|
+ Long balance = companyTrafficRecord.getBalance();
|
|
|
|
+ // 获取部门ID
|
|
|
|
+ Long deptId = companyTrafficRecord.getDeptId();
|
|
|
|
+ // 获取公司ID
|
|
|
|
+ Long companyId = companyTrafficRecord.getCompanyId();
|
|
|
|
+ // 缓存 key=CACHE_KEY:deptId:companyId value=剩余流量
|
|
|
|
+ redisCache.setCacheObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId + ":" + companyId, balance);
|
|
|
|
+ // 缓存 key=CACHE_KEY:deptId value=部门ID
|
|
|
|
+ calculateTotalTrafficByDeptId(deptId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Scheduled(cron = "0 0 3 * * ?")
|
|
|
|
+ public void refreshTraffic() {
|
|
|
|
+ List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
|
|
|
|
+ for (CompanyTrafficRecord companyTrafficRecord : companyTrafficRecords) {
|
|
|
|
+ updateRedisCache(companyTrafficRecord);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //通过redis更新表流量并添加扣除日志
|
|
|
|
+ private void updateRedisCache(CompanyTrafficRecord companyTrafficRecord){
|
|
|
|
+ Long balance = redisCache.getCacheObject(CompanyTrafficConstants.CACHE_KEY
|
|
|
|
+ + ":" + companyTrafficRecord.getDeptId()
|
|
|
|
+ + ":" + companyTrafficRecord.getCompanyId());
|
|
|
|
+ if(balance != null)
|
|
|
|
+ baseMapper.updateById(CompanyTrafficRecord.builder().id(companyTrafficRecord.getId()).balance(balance).build());
|
|
|
|
+ }
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public boolean recharge(CompanyTrafficRecordChargeParam record) {
|
|
public boolean recharge(CompanyTrafficRecordChargeParam record) {
|
|
CompanyTrafficRecord companyTrafficRecord = new CompanyTrafficRecord();
|
|
CompanyTrafficRecord companyTrafficRecord = new CompanyTrafficRecord();
|
|
- //校验参数companyId userId
|
|
|
|
|
|
+ //校验参数companyId
|
|
if (record.getCompanyId() == null || !validCompany(record))
|
|
if (record.getCompanyId() == null || !validCompany(record))
|
|
throw new IllegalArgumentException("销售公司异常");
|
|
throw new IllegalArgumentException("销售公司异常");
|
|
- if (record.getUserId() == null)
|
|
|
|
- throw new IllegalArgumentException("操作用户异常");
|
|
|
|
|
|
|
|
//查询公司流量记录
|
|
//查询公司流量记录
|
|
CompanyTrafficRecord companyRecord = baseMapper.selectOne(new LambdaQueryWrapper<CompanyTrafficRecord>()
|
|
CompanyTrafficRecord companyRecord = baseMapper.selectOne(new LambdaQueryWrapper<CompanyTrafficRecord>()
|
|
@@ -72,7 +107,8 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
|
|
}else{
|
|
}else{
|
|
companyTrafficRecord.setBalance(trafficAmount);
|
|
companyTrafficRecord.setBalance(trafficAmount);
|
|
companyTrafficRecord.setCompanyId(record.getCompanyId());
|
|
companyTrafficRecord.setCompanyId(record.getCompanyId());
|
|
- companyTrafficRecord.setCompanyName(record.getCompanyName());
|
|
|
|
|
|
+ companyTrafficRecord.setDeptId(record.getCompany().getDeptId());
|
|
|
|
+ companyTrafficRecord.setCompanyName(record.getCompany().getCompanyName());
|
|
companyTrafficRecord.setCreateTime(new Date());
|
|
companyTrafficRecord.setCreateTime(new Date());
|
|
companyTrafficRecord.setCreateBy(record.getUserId());
|
|
companyTrafficRecord.setCreateBy(record.getUserId());
|
|
baseMapper.insert(companyTrafficRecord);
|
|
baseMapper.insert(companyTrafficRecord);
|
|
@@ -92,15 +128,49 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
|
|
default:
|
|
default:
|
|
throw new IllegalArgumentException("非法的操作类型");
|
|
throw new IllegalArgumentException("非法的操作类型");
|
|
}
|
|
}
|
|
- //记录日志
|
|
|
|
|
|
+ // 更新Redis缓存
|
|
|
|
+ updateRedisCache(record, companyTrafficRecord);
|
|
|
|
+
|
|
return doLog(companyTrafficRecord,record);
|
|
return doLog(companyTrafficRecord,record);
|
|
}
|
|
}
|
|
|
|
|
|
- private void updateTraffic(Long id,CompanyTrafficRecord record){
|
|
|
|
- //将查询出的数据的is_del设置为1
|
|
|
|
- this.update(new LambdaUpdateWrapper<CompanyTrafficRecord>()
|
|
|
|
- .eq(CompanyTrafficRecord::getId, id));
|
|
|
|
- //更新redis缓存
|
|
|
|
|
|
+ private boolean validCompany(CompanyTrafficRecordChargeParam record){
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setCompanyId(record.getCompanyId());
|
|
|
|
+ company.setIsDel(0);
|
|
|
|
+ List<Company> companies = companyService.selectCompanyList(company);
|
|
|
|
+ if(companies != null && companies.size() == 1){
|
|
|
|
+ record.setCompany(companies.get(0));
|
|
|
|
+ return true;
|
|
|
|
+ }else{
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 更新Redis缓存
|
|
|
|
+ * @param record 充值参数
|
|
|
|
+ * @param companyTrafficRecord 公司流量记录
|
|
|
|
+ */
|
|
|
|
+ private void updateRedisCache(CompanyTrafficRecordChargeParam record, CompanyTrafficRecord companyTrafficRecord) {
|
|
|
|
+ if (record.getCompany() != null && record.getCompany().getDeptId() != null) {
|
|
|
|
+ // 更新缓存 key=CACHE_KEY:deptId:companyId value=剩余流量
|
|
|
|
+ redisCache.setCacheObject(CompanyTrafficConstants.CACHE_KEY + ":" + record.getCompany().getDeptId() + ":" + record.getCompanyId(),
|
|
|
|
+ companyTrafficRecord.getBalance());
|
|
|
|
+
|
|
|
|
+ // 计算该部门下所有公司流量总和
|
|
|
|
+ calculateTotalTrafficByDeptId(record.getCompany().getDeptId());
|
|
|
|
+ }else {
|
|
|
|
+ // 抛出异常
|
|
|
|
+ throw new IllegalArgumentException("缓存ID异常");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 部门下所有公司流量总和
|
|
|
|
+ * */
|
|
|
|
+ private void calculateTotalTrafficByDeptId(Long deptId) {
|
|
|
|
+ Long totalTraffic = baseMapper.calculateTotalTrafficByDeptId(deptId);
|
|
|
|
+ redisCache.setCacheObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, totalTraffic);
|
|
}
|
|
}
|
|
|
|
|
|
private boolean doLog(CompanyTrafficRecord companyTrafficRecord,CompanyTrafficRecordChargeParam record){
|
|
private boolean doLog(CompanyTrafficRecord companyTrafficRecord,CompanyTrafficRecordChargeParam record){
|
|
@@ -112,7 +182,6 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
|
|
.createTime(new Date())
|
|
.createTime(new Date())
|
|
.operationType(record.getOperationType())
|
|
.operationType(record.getOperationType())
|
|
.userId(record.getUserId())
|
|
.userId(record.getUserId())
|
|
- .userName(record.getUserName())
|
|
|
|
.remark(record.getRemark())
|
|
.remark(record.getRemark())
|
|
.userName(record.getUserName())
|
|
.userName(record.getUserName())
|
|
.build());
|
|
.build());
|
|
@@ -131,18 +200,7 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
|
|
return baseMapper.selectById(id);
|
|
return baseMapper.selectById(id);
|
|
}
|
|
}
|
|
|
|
|
|
- private boolean validCompany(CompanyTrafficRecordChargeParam record){
|
|
|
|
- Company company = new Company();
|
|
|
|
- company.setCompanyId(record.getCompanyId());
|
|
|
|
- company.setIsDel(0);
|
|
|
|
- List<Company> companies = companyService.selectCompanyList(company);
|
|
|
|
- if(companies != null && companies.size() == 1){
|
|
|
|
- record.setCompanyName(companies.get(0).getCompanyName());
|
|
|
|
- return true;
|
|
|
|
- }else{
|
|
|
|
- return false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
/** 充值金额转换流量KB*/
|
|
/** 充值金额转换流量KB*/
|
|
@Override
|
|
@Override
|
|
public Long trafficConversion(Long amount) {
|
|
public Long trafficConversion(Long amount) {
|