소스 검색

调用图灵业务,改成业务方实现

nelson 4 달 전
부모
커밋
4cf1a0dabe

+ 5 - 1
sikey-hmd-business/sikey-hmd-business-api/src/main/java/cn/sikey/hmd/api/hmd/vo/plans/PlansRespVO.java

@@ -26,9 +26,13 @@ public class PlansRespVO {
      */
     private Integer price;
     /**
-     * 有效期(1:1年)
+     * 有效期(0:默认天数1:1年)
      */
     private Integer validity;
+    /**
+     * 有效期天数
+     */
+    private Long validitySecond;
     /**
      * 套餐描述
      */

+ 4 - 0
sikey-hmd-business/sikey-hmd-business-api/src/main/java/cn/sikey/hmd/api/hmd/vo/qr/RemainingExpireTimeRespVO.java

@@ -49,4 +49,8 @@ public class RemainingExpireTimeRespVO {
      * 套餐有效期(1:1年)
      */
     private Integer plansValidity;
+    /**
+     * 剩余秒数
+     */
+    private Integer remainingSeconds;
 }

+ 1 - 1
sikey-hmd-business/sikey-hmd-business-biz/pom.xml

@@ -172,7 +172,7 @@
         </dependency>
 
         <!-- Redis 相关 -->
-        <!--<dependency>
+       <!-- <dependency>
             <groupId>cn.sikey.cloud</groupId>
             <artifactId>sikey-spring-boot-starter-redis</artifactId>
         </dependency>-->

+ 5 - 1
sikey-hmd-business/sikey-hmd-business-biz/src/main/java/cn/sikey/hmd/dal/dataobject/PlansDO.java

@@ -30,9 +30,13 @@ public class PlansDO extends BaseDO {
      */
     private Integer price;
     /**
-     * 有效期(1:1年)
+     * 有效期(0:默认天数1:1年)
      */
     private Integer validity;
+    /**
+     * 有效期秒
+     */
+    private Integer validitySecond;
     /**
      * 套餐描述
      */

+ 1 - 1
sikey-hmd-business/sikey-hmd-business-biz/src/main/java/cn/sikey/hmd/enums/ValidityEnum.java

@@ -14,7 +14,7 @@ import java.util.Arrays;
 @Getter
 public enum ValidityEnum implements IntArrayValuable {
 
-    YEAR(1, "年");
+    ZERO(0, "0:默认天数"),YEAR(1, "年");
 
     public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ValidityEnum::getValue).toArray();
 

+ 0 - 3
sikey-hmd-business/sikey-hmd-business-biz/src/main/java/cn/sikey/hmd/service/activation/DeviceActivationService.java

@@ -13,9 +13,6 @@ import java.time.LocalDateTime;
  */
 public interface DeviceActivationService {
 
-    // 首次激活设备,免费天数
-    int REMAINING_FREE_DAYS = 100;
-
     void updateDeviceActivation(String deviceId, LocalDateTime freeExpireTime, LocalDateTime finalExpireTime, LocalDateTime now, int plansValidity);
 
     CommonResult<RemainingExpireTimeRespVO> queryExpireTime(String deviceId, String apiType);

+ 40 - 9
sikey-hmd-business/sikey-hmd-business-biz/src/main/java/cn/sikey/hmd/service/activation/DeviceActivationServiceImpl.java

@@ -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();
     }
 
 }

+ 12 - 9
sikey-hmd-business/sikey-hmd-business-biz/src/main/java/cn/sikey/hmd/util/DateToolUtil.java

@@ -18,6 +18,8 @@ import java.time.temporal.ChronoUnit;
 @UtilityClass
 public class DateToolUtil {
 
+    public static final int DAY_SECOND = 24 * 60 * 60;
+
     /**
      * 剩余天数计算
      *
@@ -53,16 +55,16 @@ public class DateToolUtil {
     /**
      * 计算几天后的未来日期
      *
-     * @param totalFreeDays 天数
+     * @param remainingSecond 秒
      * @param localDateTime 当前日期
      * @return
      */
-    public static LocalDateTime calculateFutureDate(Integer totalFreeDays, LocalDateTime localDateTime) {
-        if (totalFreeDays == null || totalFreeDays < 0 || localDateTime == null) {
+    public static LocalDateTime calculateFutureDate(Long remainingSecond, LocalDateTime localDateTime) {
+        if (remainingSecond == null || remainingSecond < 0 || localDateTime == null) {
             throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "参数总免费天数,当前日期有误");
         }
 
-        return localDateTime.plusDays(totalFreeDays);
+        return localDateTime.plusSeconds(remainingSecond);
     }
 
     /**
@@ -71,26 +73,27 @@ public class DateToolUtil {
      * @param freeExpireTime  普通用户过期时间
      * @param finalExpireTime 最终过期时间
      * @param now             当前时间
+     * @param addSeconds      秒
      * @return
      */
     public static LocalDateTime calculateFinalExpireTime(LocalDateTime freeExpireTime,
                                                          LocalDateTime finalExpireTime,
-                                                         LocalDateTime now) {
+                                                         LocalDateTime now, Long addSeconds) {
         // 首次购买VIP(通过时间戳相等性判断)
         if (freeExpireTime.isEqual(finalExpireTime)) {
             // 处理普通用户剩余权益
             if (freeExpireTime.isAfter(now)) {
                 long remainingDays = ChronoUnit.DAYS.between(now, freeExpireTime);
-                return now.plusYears(1).plusDays(remainingDays);
+                return now.plusSeconds(addSeconds).plusDays(remainingDays);
             }
             // 统一处理过期逻辑(包含当天过期)
-            return now.plusYears(1);
+            return now.plusSeconds(addSeconds);
         }
 
         // 非首次购买VIP(直接续期逻辑)
         return finalExpireTime.isBefore(now)
-                ? now.plusYears(1)                // 已过期:从当前时间续期
-                : finalExpireTime.plusYears(1);    // 未过期:延续原有效期
+                ? now.plusSeconds(addSeconds)                // 已过期:从当前时间续期
+                : finalExpireTime.plusSeconds(addSeconds);    // 未过期:延续原有效期
     }
 
 }