|
@@ -0,0 +1,162 @@
|
|
|
|
+package com.fs.company.service.impl;
|
|
|
|
+
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
+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.fs.common.core.redis.RedisCache;
|
|
|
|
+import com.fs.company.domain.Company;
|
|
|
|
+import com.fs.company.domain.CompanyTrafficRecord;
|
|
|
|
+import com.fs.company.domain.CompanyTrafficRecordLog;
|
|
|
|
+import com.fs.company.mapper.CompanyTrafficRecordMapper;
|
|
|
|
+import com.fs.company.param.CompanyTrafficRecordChargeParam;
|
|
|
|
+import com.fs.company.param.CompanyTrafficRecordQueryParam;
|
|
|
|
+import com.fs.company.service.ICompanyService;
|
|
|
|
+import com.fs.company.service.ICompanyTrafficRecordLogService;
|
|
|
|
+import com.fs.company.service.ICompanyTrafficRecordService;
|
|
|
|
+import com.fs.system.domain.SysConfig;
|
|
|
|
+import com.fs.system.service.ISysConfigService;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
+
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficRecordMapper, CompanyTrafficRecord> implements ICompanyTrafficRecordService {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ RedisCache redisCache;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ISysConfigService iSysConfigService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ICompanyService companyService;
|
|
|
|
+
|
|
|
|
+ private SysConfig config;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ICompanyTrafficRecordLogService companyTrafficRecordLogService;
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
+ public boolean recharge(CompanyTrafficRecordChargeParam record) {
|
|
|
|
+ CompanyTrafficRecord companyTrafficRecord = new CompanyTrafficRecord();
|
|
|
|
+ //校验参数companyId userId
|
|
|
|
+ if (record.getCompanyId() == null || !validCompany(record))
|
|
|
|
+ throw new IllegalArgumentException("销售公司异常");
|
|
|
|
+ if (record.getUserId() == null)
|
|
|
|
+ throw new IllegalArgumentException("操作用户异常");
|
|
|
|
+
|
|
|
|
+ //查询公司流量记录
|
|
|
|
+ CompanyTrafficRecord companyRecord = baseMapper.selectOne(new LambdaQueryWrapper<CompanyTrafficRecord>()
|
|
|
|
+ .eq(CompanyTrafficRecord::getCompanyId, record.getCompanyId()));
|
|
|
|
+
|
|
|
|
+ switch (record.getOperationType()) {
|
|
|
|
+ //充值
|
|
|
|
+ case 1:
|
|
|
|
+ //获取转换后的流量
|
|
|
|
+ Long trafficAmount = trafficConversion(record.getChargeAmount());
|
|
|
|
+ record.setChangeTraffic(trafficAmount);//用于处理日志
|
|
|
|
+ if(companyRecord != null) {
|
|
|
|
+ //不是第一次充值 增加流量
|
|
|
|
+ companyTrafficRecord.setBalance(companyRecord.getBalance() + trafficAmount);
|
|
|
|
+ companyTrafficRecord.setId(companyRecord.getId());
|
|
|
|
+ companyTrafficRecord.setUpdateTime(new Date());
|
|
|
|
+ companyTrafficRecord.setUpdateBy(record.getUserId());
|
|
|
|
+ baseMapper.updateById(companyTrafficRecord);
|
|
|
|
+ }else{
|
|
|
|
+ companyTrafficRecord.setBalance(trafficAmount);
|
|
|
|
+ companyTrafficRecord.setCompanyId(record.getCompanyId());
|
|
|
|
+ companyTrafficRecord.setCompanyName(record.getCompanyName());
|
|
|
|
+ companyTrafficRecord.setCreateTime(new Date());
|
|
|
|
+ companyTrafficRecord.setCreateBy(record.getUserId());
|
|
|
|
+ baseMapper.insert(companyTrafficRecord);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ //扣除
|
|
|
|
+ case 2:
|
|
|
|
+ //扣除流量
|
|
|
|
+ /*if (companyRecord.getBalance() < record.getChangeTraffic())
|
|
|
|
+ throw new IllegalArgumentException("公司流量余额不足");*/
|
|
|
|
+ companyTrafficRecord.setBalance(companyTrafficRecord.getBalance() - record.getChangeTraffic());
|
|
|
|
+ companyTrafficRecord.setId(companyRecord.getId());
|
|
|
|
+ companyTrafficRecord.setUpdateTime(new Date());
|
|
|
|
+ companyTrafficRecord.setUpdateBy(record.getUserId());
|
|
|
|
+ baseMapper.updateById(companyTrafficRecord);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ throw new IllegalArgumentException("非法的操作类型");
|
|
|
|
+ }
|
|
|
|
+ //记录日志
|
|
|
|
+ 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 doLog(CompanyTrafficRecord companyTrafficRecord,CompanyTrafficRecordChargeParam record){
|
|
|
|
+ return companyTrafficRecordLogService.save(CompanyTrafficRecordLog.builder()
|
|
|
|
+ .balance(companyTrafficRecord.getBalance())
|
|
|
|
+ .trafficAmount(record.getChangeTraffic())
|
|
|
|
+ .chargeAmount(record.getChargeAmount())
|
|
|
|
+ .companyId(record.getCompanyId())
|
|
|
|
+ .createTime(new Date())
|
|
|
|
+ .operationType(record.getOperationType())
|
|
|
|
+ .userId(record.getUserId())
|
|
|
|
+ .userName(record.getUserName())
|
|
|
|
+ .remark(record.getRemark())
|
|
|
|
+ .userName(record.getUserName())
|
|
|
|
+ .build());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<CompanyTrafficRecord> selectList(CompanyTrafficRecordQueryParam record) {
|
|
|
|
+ return baseMapper.selectList(new LambdaQueryWrapper<CompanyTrafficRecord>()
|
|
|
|
+ .eq(record.getCompanyId() != null,CompanyTrafficRecord::getCompanyId, record.getCompanyId())
|
|
|
|
+ .in(record.getCompanyIds() != null && !record.getCompanyIds().isEmpty(),CompanyTrafficRecord::getCompanyId, record.getCompanyIds())
|
|
|
|
+ .between(record.getCreateTimeStart() != null && record.getCreateTimeEnd() != null,CompanyTrafficRecord::getCreateTime, record.getCreateTimeStart(),record.getCreateTimeEnd()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public CompanyTrafficRecord selectById(Long 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*/
|
|
|
|
+ @Override
|
|
|
|
+ public Long trafficConversion(Long amount) {
|
|
|
|
+ if(this.config == null) {
|
|
|
|
+ this.config = iSysConfigService.selectConfigByConfigKey("statis.config");
|
|
|
|
+ }
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(this.config.getConfigValue());
|
|
|
|
+ float trafficPrice = jsonObject.getFloatValue("trafficPrice");
|
|
|
|
+ double trafficGB = amount / trafficPrice;
|
|
|
|
+ return (long) (trafficGB * 1024 * 1024);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void refreshPrice() {
|
|
|
|
+ this.config = iSysConfigService.selectConfigByConfigKey("statis.config");
|
|
|
|
+ }
|
|
|
|
+}
|