feat: 多套餐开启
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package org.wfc.user.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
@@ -26,6 +27,7 @@ import org.wfc.user.api.domain.bo.UClientBo;
|
||||
import org.wfc.user.api.omada.domain.convert.OmadaConvert;
|
||||
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
|
||||
import org.wfc.user.domain.UAccount;
|
||||
import org.wfc.user.domain.UAccountPackage;
|
||||
import org.wfc.user.domain.UBill;
|
||||
import org.wfc.user.domain.UBillRule;
|
||||
import org.wfc.user.domain.UClient;
|
||||
@@ -35,6 +37,7 @@ import org.wfc.user.domain.vo.UAccountDashboardVo;
|
||||
import org.wfc.user.domain.vo.UCdrUserVo;
|
||||
import org.wfc.user.domain.vo.UClientCurrentVo;
|
||||
import org.wfc.user.mapper.UAccountMapper;
|
||||
import org.wfc.user.mapper.UAccountPackageMapper;
|
||||
import org.wfc.user.mapper.UBillMapper;
|
||||
import org.wfc.user.mapper.UBillRuleMapper;
|
||||
import org.wfc.user.mapper.UCdrMapper;
|
||||
@@ -88,6 +91,9 @@ public class UAccountServiceImpl extends ServiceImpl<UAccountMapper, UAccount> i
|
||||
@Lazy
|
||||
private IUClientService uClientService;
|
||||
|
||||
@Autowired
|
||||
private UAccountPackageMapper accountPackageMapper;
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void statAndCancelAuthUser() {
|
||||
// 定时任务查询所有未过期或刚过期(失效时间+定时任务间隔时间)的账户套餐,套餐过期/流量用完/时长用完则取消授权
|
||||
@@ -163,6 +169,28 @@ public class UAccountServiceImpl extends ServiceImpl<UAccountMapper, UAccount> i
|
||||
continue;
|
||||
}
|
||||
UAccount account = this.getOne(Wrappers.<UAccount>lambdaQuery().eq(UAccount::getUserId, loginClient.getUserId()), false);
|
||||
// 套餐失效,但是还有其他可用套餐
|
||||
if (!AccountUtil.isPackageValid(account, current)) {
|
||||
List<UAccountPackage> accountPackages = accountPackageMapper.selectList(Wrappers.<UAccountPackage>lambdaQuery()
|
||||
.eq(UAccountPackage::getAccountId, account.getId()).orderByAsc(UAccountPackage::getCreateTime));
|
||||
Optional<UAccountPackage> accountPackageOptional = accountPackages.stream().findFirst();
|
||||
if (accountPackageOptional.isPresent()) {
|
||||
wifiApi.reconnectClient(site.getSiteId(), client.getMac());
|
||||
UAccountPackage accountPackage = accountPackageOptional.get();
|
||||
BeanUtils.copyProperties(accountPackage, account);
|
||||
account.setTrafficUsed(0L);
|
||||
account.setDurationUsed(0L);
|
||||
account.setClientNumUsed(0);
|
||||
Date startTime = new Date();
|
||||
DateTime endTime = AccountUtil.getEndTime(accountPackage.getPeriodType(), accountPackage.getPeriodNum(), startTime);
|
||||
account.setStartTime(current);
|
||||
account.setEndTime(endTime);
|
||||
// 更新账号套餐和删除使用套餐
|
||||
this.updateById(account);
|
||||
accountPackageMapper.deleteById(accountPackage.getId());
|
||||
}
|
||||
}
|
||||
|
||||
// 套餐失效,但是有余额且没有已使用余额,reconnect
|
||||
if (AccountUtil.isPackageUnValidBalanceValid(account, current)) {
|
||||
wifiApi.reconnectClient(site.getSiteId(), client.getMac());
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.wfc.user.service.impl;
|
||||
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
@@ -26,7 +24,6 @@ import org.wfc.user.domain.UPackage;
|
||||
import org.wfc.user.domain.URateLimit;
|
||||
import org.wfc.user.domain.constant.OrderStatusEnum;
|
||||
import org.wfc.user.domain.constant.OrderTypeEnum;
|
||||
import org.wfc.user.domain.constant.PeriodTypeEnum;
|
||||
import org.wfc.user.mapper.UAccountPackageMapper;
|
||||
import org.wfc.user.mapper.UBillMapper;
|
||||
import org.wfc.user.mapper.UBillRuleMapper;
|
||||
@@ -115,7 +112,7 @@ public class UOrderServiceImpl extends ServiceImpl<UOrderMapper, UOrder> impleme
|
||||
}
|
||||
if (OrderTypeEnum.PACKAGE.getCode().equals(order.getType())) {
|
||||
// 套餐
|
||||
callbackPackage(order, account, false);
|
||||
callbackPackage(order, account, isValid);
|
||||
} else if (OrderTypeEnum.RECHARGE.getCode().equals(order.getType())) {
|
||||
// 充值
|
||||
// 更新账户余额
|
||||
@@ -206,33 +203,12 @@ public class UOrderServiceImpl extends ServiceImpl<UOrderMapper, UOrder> impleme
|
||||
account.setDurationUsed(0L);
|
||||
account.setClientNumUsed(0);
|
||||
Date current = new Date();
|
||||
DateTime endTime = getEndTime(uPackage, current);
|
||||
DateTime endTime = AccountUtil.getEndTime(uPackage.getPeriodType(), uPackage.getPeriodNum(), current);
|
||||
account.setStartTime(current);
|
||||
account.setEndTime(endTime);
|
||||
}
|
||||
}
|
||||
|
||||
private static DateTime getEndTime(UPackage uPackage, Date current) {
|
||||
DateTime endTime = null;
|
||||
// 计算有效时间
|
||||
switch (PeriodTypeEnum.getByCode(uPackage.getPeriodType())) {
|
||||
case HOUR:
|
||||
endTime = DateUtil.offset(current, DateField.HOUR, uPackage.getPeriodNum());
|
||||
break;
|
||||
case DAY:
|
||||
endTime = DateUtil.offset(current, DateField.DAY_OF_YEAR, uPackage.getPeriodNum());
|
||||
break;
|
||||
case MONTH:
|
||||
endTime = DateUtil.offset(current, DateField.MONTH, uPackage.getPeriodNum());
|
||||
break;
|
||||
case YEAR:
|
||||
endTime = DateUtil.offset(current, DateField.YEAR, uPackage.getPeriodNum());
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return endTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long saveOrder(UOrder order) {
|
||||
order.setUserId(SecurityUtils.getUserId());
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.wfc.user.util;
|
||||
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import org.wfc.user.domain.UAccount;
|
||||
import org.wfc.user.domain.constant.PeriodTypeEnum;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
@@ -69,4 +72,25 @@ public class AccountUtil {
|
||||
&& (!account.getDurationEnable() || account.getDurationUsed() <= account.getDuration()))
|
||||
&& (ObjectUtil.isNull(account.getBalanceUsed()) || account.getBalanceUsed().compareTo(BigDecimal.ZERO) == 0);
|
||||
}
|
||||
|
||||
public static DateTime getEndTime(Integer periodType, Integer periodNum, Date current) {
|
||||
DateTime endTime = null;
|
||||
// 计算有效时间
|
||||
switch (PeriodTypeEnum.getByCode(periodType)) {
|
||||
case HOUR:
|
||||
endTime = DateUtil.offset(current, DateField.HOUR, periodNum);
|
||||
break;
|
||||
case DAY:
|
||||
endTime = DateUtil.offset(current, DateField.DAY_OF_YEAR, periodNum);
|
||||
break;
|
||||
case MONTH:
|
||||
endTime = DateUtil.offset(current, DateField.MONTH, periodNum);
|
||||
break;
|
||||
case YEAR:
|
||||
endTime = DateUtil.offset(current, DateField.YEAR, periodNum);
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return endTime;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user