|
@@ -1,14 +1,19 @@
|
|
|
package cn.sikey.hmd.service.activation;
|
|
|
|
|
|
+import cn.sikey.framework.common.exception.ServiceException;
|
|
|
import cn.sikey.framework.common.pojo.CommonResult;
|
|
|
import cn.sikey.hmd.api.hmd.dto.activation.DeviceActivationDTO;
|
|
|
+import cn.sikey.hmd.api.hmd.vo.plans.PlansRespVO;
|
|
|
import cn.sikey.hmd.api.hmd.vo.qr.RemainingExpireTimeRespVO;
|
|
|
import cn.sikey.hmd.convert.DeviceActivationConvert;
|
|
|
import cn.sikey.hmd.dal.dataobject.DeviceActivationDO;
|
|
|
import cn.sikey.hmd.dal.mysql.DeviceActivationMapper;
|
|
|
+import cn.sikey.hmd.enums.ValidityEnum;
|
|
|
+import cn.sikey.hmd.service.plans.PlansService;
|
|
|
import cn.sikey.hmd.util.DateToolUtil;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.http.HttpStatus;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
@@ -26,6 +31,9 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
@Resource
|
|
|
private DeviceActivationMapper deviceActivationMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private PlansService plansService;
|
|
|
+
|
|
|
/**
|
|
|
* 更新设备激活
|
|
|
*
|
|
@@ -40,8 +48,14 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
public void updateDeviceActivation(String deviceId, LocalDateTime freeExpireTime,
|
|
|
LocalDateTime finalExpireTime,
|
|
|
LocalDateTime now, int plansValidity) {
|
|
|
+ PlansRespVO plansRespVO = plansService.queryPlans(plansValidity);
|
|
|
+ if (Objects.isNull(plansRespVO)) {
|
|
|
+ log.warn("[更新设备激活]不存在默认套餐");
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "不存在默认套餐");
|
|
|
+ }
|
|
|
+ Long addSeconds = plansRespVO.getValiditySecond();
|
|
|
// 最终时间
|
|
|
- LocalDateTime fExpireTime = DateToolUtil.calculateFinalExpireTime(freeExpireTime, finalExpireTime, now);
|
|
|
+ LocalDateTime fExpireTime = DateToolUtil.calculateFinalExpireTime(freeExpireTime, finalExpireTime, now, addSeconds);
|
|
|
log.info("[更新设备激活]设备编码:{},普通用户到期时间:{},原最终到期时间:{},当前时间:{}", deviceId, freeExpireTime, finalExpireTime, now);
|
|
|
deviceActivationMapper.updateDeviceActivation(deviceId, fExpireTime, plansValidity);
|
|
|
log.info("[更新设备激活]更新数据库成功,设备编码:{},普通用户到期时间:{},最终到期时间:{}", deviceId, freeExpireTime, fExpireTime);
|
|
@@ -57,13 +71,24 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
@Override
|
|
|
public CommonResult<RemainingExpireTimeRespVO> queryExpireTime(String deviceId, String apiType) {
|
|
|
DeviceActivationDO deviceActivationDO = deviceActivationMapper.queryDeviceActivation(deviceId);
|
|
|
-
|
|
|
RemainingExpireTimeRespVO remainingTimesExpireTimeVO = new RemainingExpireTimeRespVO();
|
|
|
int remainingDays;
|
|
|
+ int remainingSeconds;
|
|
|
if (Objects.isNull(deviceActivationDO)) {
|
|
|
// 激活设备 TODO 多次需限流,幂等
|
|
|
- saveDeviceActivation(deviceId, apiType);
|
|
|
- remainingDays = REMAINING_FREE_DAYS;
|
|
|
+
|
|
|
+ PlansRespVO plansRespVO = plansService.queryPlans(ValidityEnum.ZERO.getValue());
|
|
|
+ if (Objects.isNull(plansRespVO)) {
|
|
|
+ log.warn("[查询到期时间]不存在默认套餐");
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "不存在默认套餐");
|
|
|
+ }
|
|
|
+
|
|
|
+ remainingDays = (int) (plansRespVO.getValiditySecond() / DateToolUtil.DAY_SECOND);
|
|
|
+ // 秒
|
|
|
+ LocalDateTime finalExpireTime = saveDeviceActivation(deviceId, apiType, plansRespVO.getValiditySecond());
|
|
|
+
|
|
|
+ remainingSeconds = finalExpireTime.getSecond();
|
|
|
+ remainingTimesExpireTimeVO.setPlansValidity(plansRespVO.getValidity());
|
|
|
} else {
|
|
|
// 已激活设备
|
|
|
DeviceActivationDTO deviceActivationDTO = DeviceActivationConvert.INSTANCE.convertDeviceActivationDTO(deviceActivationDO);
|
|
@@ -71,8 +96,11 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
LocalDateTime finalExpireTime = deviceActivationDTO.getFinalExpireTime();
|
|
|
remainingDays = DateToolUtil.calculateRemainingDays(finalExpireTime);
|
|
|
remainingTimesExpireTimeVO.setPlansValidity(deviceActivationDTO.getPlansValidity());
|
|
|
+
|
|
|
+ remainingSeconds = finalExpireTime.getSecond();
|
|
|
}
|
|
|
|
|
|
+ remainingTimesExpireTimeVO.setRemainingSeconds(remainingSeconds);
|
|
|
remainingTimesExpireTimeVO.setDeviceId(deviceId);
|
|
|
remainingTimesExpireTimeVO.setApiType(apiType);
|
|
|
remainingTimesExpireTimeVO.setRemainingDays(remainingDays);
|
|
@@ -91,10 +119,11 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
/**
|
|
|
* 保存设备激活
|
|
|
*
|
|
|
- * @param deviceId 设备编码
|
|
|
- * @param apiType 乐行
|
|
|
+ * @param deviceId 设备编码
|
|
|
+ * @param apiType 类型
|
|
|
+ * @param remainingSecond 剩余秒
|
|
|
*/
|
|
|
- private void saveDeviceActivation(String deviceId, String apiType) {
|
|
|
+ private LocalDateTime saveDeviceActivation(String deviceId, String apiType, Long remainingSecond) {
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
DeviceActivationDO deviceActivationDO = new DeviceActivationDO();
|
|
|
deviceActivationDO.setDeviceId(deviceId);
|
|
@@ -102,14 +131,16 @@ public class DeviceActivationServiceImpl implements DeviceActivationService {
|
|
|
// 激活时间
|
|
|
deviceActivationDO.setActivationTime(now);
|
|
|
// 普通用户到期时间
|
|
|
- deviceActivationDO.setFreeExpireTime(DateToolUtil.calculateFutureDate(REMAINING_FREE_DAYS, now));
|
|
|
+ deviceActivationDO.setFreeExpireTime(DateToolUtil.calculateFutureDate(remainingSecond, now));
|
|
|
// 最终到期时间
|
|
|
- deviceActivationDO.setFinalExpireTime(DateToolUtil.calculateFutureDate(REMAINING_FREE_DAYS, now));
|
|
|
+ deviceActivationDO.setFinalExpireTime(DateToolUtil.calculateFutureDate(remainingSecond, now));
|
|
|
deviceActivationDO.setCreator(deviceId);
|
|
|
deviceActivationDO.setCreateTime(now);
|
|
|
deviceActivationDO.setUpdater(deviceId);
|
|
|
deviceActivationDO.setUpdateTime(now);
|
|
|
deviceActivationMapper.insert(deviceActivationDO);
|
|
|
+
|
|
|
+ return deviceActivationDO.getFinalExpireTime();
|
|
|
}
|
|
|
|
|
|
}
|