tangxiangan 9 months ago
parent
commit
687e3b6787

+ 3 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/enums/ProductNameEnum.java

@@ -12,6 +12,9 @@ public enum ProductNameEnum {
     MAC2("PDF Reader Pro for Mac (with PDF to Office)","PDF Reader Pro for Mac (With PDF to Office Pack)"),
     WIN2("PDF Reader Pro for Windows (with PDF to Office)","PDF Reader Pro for Windows (With PDF to Office Pack)"),
     CROSS1("PDF Reader Pro Permanent Cross-Platform Product","PDF Reader Pro Cross-Platform (With PDF to Office Pack)"),
+    PDF_TECH("PDFTech Editor","PDFTech Editor"),
+
+
     ;
 
     private final String databaseName;

+ 1 - 1
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/pojo/vo/SSODeletedMemberVO.java

@@ -21,7 +21,7 @@ public class SSODeletedMemberVO implements Serializable {
     @ExcelIgnore
     private String id;
 
-    @ExcelProperty(value = "Member Name")
+    @ExcelProperty(value = "User Name")
     @ColumnWidth(34)
     private String fullName;
 

+ 2 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/ScheduleSettingService.java

@@ -25,4 +25,6 @@ public interface ScheduleSettingService {
      * @param scheduleSettingDTO scheduleSettingDTO
      */
     void syncSetting(ScheduleSettingDTO scheduleSettingDTO);
+
+    void deleteByDirectoryId(String directoryId);
 }

+ 14 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/VppMemberService.java

@@ -68,6 +68,8 @@ public interface VppMemberService extends BeanConverter<VppMember, UserInfo> {
      */
     void update(VppMember vppMember);
 
+    void updateAll(VppMember vppMember);
+
     /**
      * 重置密码
      *
@@ -127,4 +129,16 @@ public interface VppMemberService extends BeanConverter<VppMember, UserInfo> {
      * 登出
      */
     void loginOut();
+
+    /**
+     * 删除目录下所有用户
+     * @param directoryId 目录id
+     */
+    void deleteDirectoryMember(String directoryId);
+
+    /**
+     * 直接删除用户
+     * @param memberId 用户id
+     */
+    void delete(String memberId);
 }

+ 7 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/VppTeamService.java

@@ -134,4 +134,11 @@ public interface VppTeamService {
      * @return VppTeam
      */
     VppTeam getDefaultTeam(String memberId);
+
+
+    /**
+     * 删除目录团队
+     * @param teamId 团队id
+     */
+    void deleteDirectoryTeam(String teamId);
 }

+ 10 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/DirectoryServiceImpl.java

@@ -105,7 +105,17 @@ public class DirectoryServiceImpl implements DirectoryService {
 
     @Override
     public void delete(String directoryId) {
+        Directory directory = getById(directoryId);
         domainService.unbindByDirectoryId(directoryId);
+        // 同步设置删掉 定时任务删掉
+        scheduleSettingService.deleteByDirectoryId(directoryId);
+        //删除团队 解绑所有序列码和设备
+        if (!StringUtils.isEmpty(directory.getTeamId())){
+            teamService.deleteDirectoryTeam(directory.getTeamId());
+        }
+        // 删除所有团队成员
+        vppMemberService.deleteDirectoryMember(directoryId);
+        // 删除目录
         directoryMapper.deleteByPrimaryKey(directoryId);
     }
 

+ 28 - 4
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/ScheduleSettingServiceImpl.java

@@ -45,7 +45,7 @@ public class ScheduleSettingServiceImpl implements ScheduleSettingService {
 
     /**
      * 同步设置
-     * @param scheduleSettingDTO
+     * @param scheduleSettingDTO scheduleSettingDTO
      */
     @Override
     public void syncSetting(ScheduleSettingDTO scheduleSettingDTO) {
@@ -57,25 +57,49 @@ public class ScheduleSettingServiceImpl implements ScheduleSettingService {
             //如果之前不为空,现在是立即同步,那么要把以前的定时任务给删掉
             if(!CollectionUtils.isEmpty(list)){
                 QuartzUtils.deleteJob("syncJob" + list.get(0).getScheduleSettingId(),"syncJobGroup");
+                scheduleSettingMapper.deleteByPrimaryKey(list.get(0).getScheduleSettingId());
             }
         }else {
+            String cronExpression = "";
+            if(scheduleSettingDTO.getType().equals(ScheduleSettingTypeEnum.PER_HOUR.value())){
+                cronExpression = "0 0 * * * ?";
+            }
+            if(scheduleSettingDTO.getType().equals(ScheduleSettingTypeEnum.SPECIFIED_TIME_EVERY_DAY.value())){
+                cronExpression = QuartzUtils.generateCronExpression(scheduleSetting.getTime());
+            }
             //先判断是否已有配置
             if(CollectionUtils.isEmpty(list)){
                 scheduleSetting.setScheduleSettingId(CommonUtils.generateId());
+                scheduleSetting.setType(scheduleSetting.getType());
+                if(scheduleSettingDTO.getType().equals(ScheduleSettingTypeEnum.SPECIFIED_TIME_EVERY_DAY.value())){
+                    scheduleSetting.setTime(scheduleSettingDTO.getTime());
+                }
                 scheduleSettingMapper.insertSelective(scheduleSetting);
                 //创建定时任务
                 QuartzUtils.scheduleJob("syncJob" + scheduleSetting.getScheduleSettingId(),"syncJobGroup", SyncJob.class,
                         "syncTrigger_" + scheduleSetting.getScheduleSettingId(),"syncTriggerGroup",
-                        "0 * * * *",scheduleSetting.getDirectoryId() );
+                        cronExpression,scheduleSetting.getDirectoryId() );
             }else {
                 list.get(0).setTime(scheduleSettingDTO.getTime());
                 list.get(0).setType(scheduleSettingDTO.getType());
                 scheduleSettingMapper.updateByPrimaryKeySelective(list.get(0));
-                QuartzUtils.rescheduleJob("syncTrigger_" + scheduleSetting.getScheduleSettingId(), "syncTriggerGroup", "0 * * * *",scheduleSetting);
+                QuartzUtils.rescheduleJob("syncTrigger_" + scheduleSetting.getScheduleSettingId(), "syncTriggerGroup", cronExpression,scheduleSetting);
             }
         }
     }
 
+    @Override
+    public void deleteByDirectoryId(String directoryId) {
+        List<ScheduleSetting> list = listByDirectoryId(directoryId);
+        if(CollectionUtils.isEmpty(list)){
+            return;
+        }
+        QuartzUtils.deleteJob("syncJob" + list.get(0).getScheduleSettingId(),"syncJobGroup");
+        ScheduleSettingExample scheduleSettingExample = new ScheduleSettingExample();
+        scheduleSettingExample.createCriteria().andDirectoryIdEqualTo(directoryId);
+        scheduleSettingMapper.deleteByExample(scheduleSettingExample);
+    }
+
     @PostConstruct
     public void initJob() {
         log.info("initJob start:--------------");
@@ -85,7 +109,7 @@ public class ScheduleSettingServiceImpl implements ScheduleSettingService {
                 //创建定时任务
                 QuartzUtils.scheduleJob("syncJob" + scheduleSetting.getScheduleSettingId(), "syncJobGroup", SyncJob.class,
                         "syncTrigger_" + scheduleSetting.getScheduleSettingId(), "syncTriggerGroup",
-                        "0 * * * * ?", scheduleSetting.getDirectoryId());
+                        "0 0 * * * ?", scheduleSetting.getDirectoryId());
             } else if (scheduleSetting.getType().equals(ScheduleSettingTypeEnum.SPECIFIED_TIME_EVERY_DAY.value())) {
                 //创建定时任务
                 QuartzUtils.scheduleJob("syncJob" + scheduleSetting.getScheduleSettingId(), "syncJobGroup", SyncJob.class,

+ 1 - 0
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/SyncServiceImpl.java

@@ -60,6 +60,7 @@ public class SyncServiceImpl implements SyncService {
         //修改数据库
         directory.setApplicationId(syncDTO.getApplicationID());
         directory.setClientSecrets(syncDTO.getClientSecrets());
+        //
         directory.setScope(syncDTO.getScope());
         directory.setTenantId(syncDTO.getTenantId());
         directory.setUpdateTime(new Date());

+ 5 - 3
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/VppDeviceServiceImpl.java

@@ -163,8 +163,10 @@ public class VppDeviceServiceImpl implements VppDeviceService {
         String model = devices.getModel();
         LicenseCodes code = licenseCodeService.getByCdKey(cdkey);
         VppMember vppMember = memberService.getById(code.getVppMemberId());
-
-        //更新设备状态
+        if(code.getValidFlag().equals(LicenseCodeStatusEnum.ASSIGNED.code())
+        ||code.getValidFlag().equals(LicenseCodeStatusEnum.CANCELED.code())){
+            return;
+        }
         devices.setStatus(DeviceStatusEnum.UNACTIVATED.code());
         devices.setCanceledDate(new Date());
         devices.setSubscriptionId(null);
@@ -185,7 +187,7 @@ public class VppDeviceServiceImpl implements VppDeviceService {
 
         log.info("send cancel email!");
         ThreadPoolSingleUtil.getInstance().excute(() -> {
-            if(!ObjectUtils.isEmpty(vppMember)&&!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value())){
+            if(!ObjectUtils.isEmpty(vppMember)&&(StringUtils.isEmpty(vppMember.getIsSso())||!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value()))){
                 Subscriptions subscriptions = subscriptionService.getById(code.getSubscriptionId());
                 Products product = productService.getById(subscriptions.getProductId());
                 String helpLink = vppLicenseCodeServiceImpl.getHelpLink(product.getCode());

+ 7 - 7
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/VppLicenseCodeServiceImpl.java

@@ -91,12 +91,12 @@ public class VppLicenseCodeServiceImpl implements VppLicenseCodeService {
             criteria.andTeamIdIn(teamIds);
         }
         List<LicenseCodes> list = licenseCodeMapper.selectByExample(example);
-        LicenseCodes vppLicenseCode = new LicenseCodes();
-        vppLicenseCode.setVppMemberId("");
-        vppLicenseCode.setUsedTimes((short) 0);
-        vppLicenseCode.setValidFlag(LicenseCodeStatusEnum.CANCELED.code());
-        vppLicenseCode.setUpdatedAt(new Date());
         if (!CollectionUtils.isEmpty(list)) {
+            LicenseCodes vppLicenseCode = new LicenseCodes();
+            vppLicenseCode.setVppMemberId("");
+            vppLicenseCode.setUsedTimes((short) 0);
+            vppLicenseCode.setValidFlag(LicenseCodeStatusEnum.CANCELED.code());
+            vppLicenseCode.setUpdatedAt(new Date());
             //用户id改为空,序列码状态变为取消授权
             licenseCodeMapper.updateByExampleSelective(vppLicenseCode, example);
             List<String> cdKeys = list.stream().map(LicenseCodes::getCdkey).collect(Collectors.toList());
@@ -258,7 +258,7 @@ public class VppLicenseCodeServiceImpl implements VppLicenseCodeService {
                 }
                 VppMember vppMember = vppMemberService.getById(key);
                 //非单点登录用户才发送邮件
-                if(!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value())){
+                if(StringUtils.isEmpty(vppMember.getIsSso())||!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value())){
                     // 根据平台发送序列码授权邮件
                     log.info("根据平台发送序列码授权邮件:productWin{};cdKeyWin:{};platformType:{}", productName, cdKey, platformType);
                     switch(platformType) {
@@ -382,7 +382,7 @@ public class VppLicenseCodeServiceImpl implements VppLicenseCodeService {
         licenseCodeMapper.updateByPrimaryKey(vppLicenseCode);
         // 解绑激活设备
         vppDeviceService.unBindByMemberId(null, Collections.singletonList(vppLicenseCode.getCdkey()));
-        if (!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value())){
+        if (StringUtils.isEmpty(vppMember.getIsSso())||!vppMember.getIsSso().equals(ValidStatusEnum.VALID.value())){
             // 发送邮件
             ThreadPoolSingleUtil.getInstance().excute(() -> {
                 String text = String.format(CaptchaActionEnum.CANCEL_LICENSE_ASSIGN.text(), vppMember.getEmail(), ProductNameEnum.getEnumByDatabaseName(products.getName()).viewName(), products.getName(), user.getEmail());

+ 19 - 4
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/VppMemberServiceImpl.java

@@ -5,10 +5,7 @@ import cn.kdan.pdf.tech.core.constant.VppMemberConstant;
 import cn.kdan.pdf.tech.core.enums.CaptchaActionEnum;
 import cn.kdan.pdf.tech.core.enums.RoleEnum;
 import cn.kdan.pdf.tech.core.mapper.VppMemberMapper;
-import cn.kdan.pdf.tech.core.model.VppMember;
-import cn.kdan.pdf.tech.core.model.VppMemberExample;
-import cn.kdan.pdf.tech.core.model.VppRTeamMemberRole;
-import cn.kdan.pdf.tech.core.model.VppTeam;
+import cn.kdan.pdf.tech.core.model.*;
 import cn.kdan.pdf.tech.core.params.VppMemberRegisterParam;
 import cn.kdan.pdf.tech.core.params.VppMemberResetPwdParam;
 import cn.kdan.pdf.tech.core.params.VppMemberUpdatePwdParam;
@@ -196,6 +193,13 @@ public class VppMemberServiceImpl implements VppMemberService {
         vppMemberMapper.updateByPrimaryKeySelective(vppMember);
     }
 
+    @Override
+    public void updateAll(VppMember vppMember) {
+        vppMemberMapper.updateByPrimaryKey(vppMember);
+    }
+
+
+
     @Override
     public boolean resetPassword(VppMemberResetPwdParam params) {
         VppMember member = getByAccount(params.getEmail());
@@ -303,6 +307,17 @@ public class VppMemberServiceImpl implements VppMemberService {
 
     }
 
+    @Override
+    public void deleteDirectoryMember(String directoryId) {
+        VppMemberExample example = new VppMemberExample();
+        example.createCriteria().andDirectoryIdEqualTo(directoryId);
+        vppMemberMapper.deleteByExample(example);
+    }
+    @Override
+    public void delete(String memberId) {
+        vppMemberMapper.deleteByPrimaryKey(memberId);
+    }
+
     private void validRegisterParam(VppMemberRegisterParam param) {
         //邮箱是否被注册 前后两次密码 密码位数 验证邮箱格式 邮件验证码错误
         if (!ObjectUtils.isEmpty(getByAccount(param.getEmail()))) {

+ 14 - 7
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/VppRTeamMemberRoleServiceImpl.java

@@ -361,13 +361,19 @@ public class VppRTeamMemberRoleServiceImpl implements VppRTeamMemberRoleService
         //如果删除用户,则是退出所有团队
         quitTeam(memberId, ids);
         //如果用户还有管理的团队就不退出公司
+        VppMember member = vppMemberService.getById(memberId);
+        //单点登录用户直接删除
+        if(member.getIsSso().equals(ValidStatusEnum.VALID.value())){
+            vppMemberService.delete(memberId);
+            return;
+        }
         List<VppRTeamMemberRoleVO> adminTeamList = listByMemberIdAdmin(memberId);
         if(CollectionUtils.isEmpty(adminTeamList)){
             //退出公司
-            VppMember member = new VppMember();
             member.setId(memberId);
             member.setCompanyId("");
             member.setRole(RoleEnum.TEAM_MEMBER.code());
+            member.setLoginTime(null);
             vppMemberService.update(member);
         }
     }
@@ -394,6 +400,7 @@ public class VppRTeamMemberRoleServiceImpl implements VppRTeamMemberRoleService
         VppMember member = new VppMember();
         member.setId(memberId);
         member.setRole(RoleEnum.TEAM_MEMBER.code());
+        member.setLoginTime(null);
         vppMemberService.update(member);
     }
 
@@ -623,21 +630,21 @@ public class VppRTeamMemberRoleServiceImpl implements VppRTeamMemberRoleService
             ids.add(vppRTeamMemberRoles.get(0).getTeamId());
             //sso用户只有一个默认团队,只需要解绑设备序列码,并且修改用户数据
             vppLicenseCodeService.unBindByMemberId(memberId, ids);
-            VppMember member = new VppMember();
-            member.setId(memberId);
+            VppMember member = vppMemberService.getById(memberId);
             member.setRole(RoleEnum.TEAM_MEMBER.code());
             member.setValidFlag(ValidStatusEnum.INVALID.value());
-            vppMemberService.update(member);
+            member.setLoginTime(null);
+            vppMemberService.updateAll(member);
         });
     }
 
     @Override
     public void revokeSSOMember(String memberId) {
-        VppMember member = new VppMember();
-        member.setId(memberId);
+        VppMember member = vppMemberService.getById(memberId);
         member.setRole(RoleEnum.TEAM_MEMBER.code());
         member.setValidFlag(ValidStatusEnum.REVOKED.value());
-        vppMemberService.update(member);
+        member.setLoginTime(null);
+        vppMemberService.updateAll(member);
     }
 
     @Override

+ 54 - 28
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/service/impl/VppTeamServiceImpl.java

@@ -236,7 +236,7 @@ public class VppTeamServiceImpl implements VppTeamService {
         if (!CollectionUtils.isEmpty(dto.getProductList())) {
             vppLicenseCodeList = vppLicenseCodeService.getByCompanyAndTeamId(member.getCompanyId(), vppTeam.getId());
             for (CreateTeamDTO.Product product : dto.getProductList()) {
-                List<LicenseCodes> collect = vppLicenseCodeList.stream().filter(c -> c.getProductId().equals(product.getProductId()) && c.getValidFlag() == 1).collect(Collectors.toList());
+                List<LicenseCodes> collect = vppLicenseCodeList.stream().filter(c -> c.getProductId().equals(product.getProductId()) && (c.getValidFlag() == 1 || c.getValidFlag() == 4)).collect(Collectors.toList());
                 if (collect.size() < product.getLicenseNumber()) {
                     throw new BackendRuntimeException(VppMemberConstant.INSUFFICIENT_QUANTITY_TO_ALLOCATE);
                 }
@@ -258,7 +258,7 @@ public class VppTeamServiceImpl implements VppTeamService {
         if (!CollectionUtils.isEmpty(dto.getProductList())) {
             // 从默认团队分配序列码到此团队
             for (CreateTeamDTO.Product product : dto.getProductList()) {
-                List<LicenseCodes> collect = vppLicenseCodeList.stream().filter(c -> c.getProductId().equals(product.getProductId()) && c.getValidFlag() == 1).collect(Collectors.toList());
+                List<LicenseCodes> collect = vppLicenseCodeList.stream().filter(c -> c.getProductId().equals(product.getProductId()) && (c.getValidFlag() == 1 || c.getValidFlag() == 4)).collect(Collectors.toList());
                 for (int i = 0; i < product.getLicenseNumber(); i++) {
                     LicenseCodes vppLicenseCode = collect.get(i);
                     vppLicenseCode.setTeamId(newVppTeam.getId());
@@ -604,32 +604,7 @@ public class VppTeamServiceImpl implements VppTeamService {
         // 删除团队,返还未授权序列码到默认团队,移动团队成员到默认团队
         vppTeam.setValidFlag("0");
         vppTeamMapper.updateByPrimaryKeySelective(vppTeam);
-        // 获取团队所有序列码
-        List<LicenseCodes> byCompanyAndTeamId = vppLicenseCodeService.getByCompanyAndTeamId(vppTeam.getCompanyId(), vppTeam.getId());
-        // 获取公司默认团队
-        VppTeamExample example = new VppTeamExample();
-        example.createCriteria().andCompanyIdEqualTo(member.getCompanyId()).andTypeEqualTo(1);
-        VppTeam defaultVppTeam = vppTeamMapper.selectByExample(example).get(0);
-        List<String> cdKeys = new ArrayList<>();
-        for (LicenseCodes vppLicenseCode : byCompanyAndTeamId) {
-            // 已授权or已激活
-            if (2 == vppLicenseCode.getValidFlag() || 3 == vppLicenseCode.getValidFlag()) {
-                vppLicenseCode.setMemberId(null);
-                vppLicenseCode.setVppMemberId(null);
-                vppLicenseCode.setValidFlag(4);
-                vppLicenseCode.setUpdatedAt(new Date());
-                vppLicenseCode.setUsedTimes(Short.valueOf("0"));
-                if (3 == vppLicenseCode.getValidFlag() && null != vppLicenseCode.getCdkey()) {
-                    // 解绑激活设备
-                    cdKeys.add(vppLicenseCode.getCdkey());
-                }
-            }
-            vppLicenseCode.setTeamId(defaultVppTeam.getId());
-            vppLicenseCodeService.updateByPrimaryKey(vppLicenseCode);
-        }
-        if (!CollectionUtils.isEmpty(cdKeys)) {
-            vppDeviceService.unBindByMemberId(null, cdKeys);
-        }
+        VppTeam defaultVppTeam = unbindDeviceANDCDKey(vppTeam, member);
         // 团队成员移到默认团队
         vppRTeamMemberRoleService.changeTeamMember(vppTeam.getId(), defaultVppTeam.getId());
         // 获取团队所有关联数据
@@ -671,6 +646,42 @@ public class VppTeamServiceImpl implements VppTeamService {
         }
     }
 
+    /**
+     * cdkey解绑 设备解绑
+     * @param vppTeam 团队
+     * @param member 用户
+     * @return
+     */
+    private VppTeam unbindDeviceANDCDKey(VppTeam vppTeam, VppMember member) {
+        // 获取公司默认团队
+        VppTeamExample example = new VppTeamExample();
+        example.createCriteria().andCompanyIdEqualTo(member.getCompanyId()).andTypeEqualTo(1);
+        VppTeam defaultVppTeam = vppTeamMapper.selectByExample(example).get(0);
+        // 获取团队所有序列码
+        List<LicenseCodes> byCompanyAndTeamId = vppLicenseCodeService.getByCompanyAndTeamId(vppTeam.getCompanyId(), vppTeam.getId());
+        List<String> cdKeys = new ArrayList<>();
+        for (LicenseCodes vppLicenseCode : byCompanyAndTeamId) {
+            // 已授权or已激活
+            if (2 == vppLicenseCode.getValidFlag() || 3 == vppLicenseCode.getValidFlag()) {
+                if (3 == vppLicenseCode.getValidFlag() && null != vppLicenseCode.getCdkey()) {
+                    // 解绑激活设备
+                    cdKeys.add(vppLicenseCode.getCdkey());
+                }
+                vppLicenseCode.setMemberId(null);
+                vppLicenseCode.setVppMemberId(null);
+                vppLicenseCode.setValidFlag(4);
+                vppLicenseCode.setUpdatedAt(new Date());
+                vppLicenseCode.setUsedTimes(Short.valueOf("0"));
+            }
+            vppLicenseCode.setTeamId(defaultVppTeam.getId());
+            vppLicenseCodeService.updateByPrimaryKey(vppLicenseCode);
+        }
+        if (!CollectionUtils.isEmpty(cdKeys)) {
+            vppDeviceService.unBindByMemberId(null, cdKeys);
+        }
+        return defaultVppTeam;
+    }
+
     @Override
     public void sendEmailForAddTeamAdmin(List<String> teamIds, String account) {
         //判断用户存不存在,若被添加管理员暂未注册,则先发送邀请注册邮件,注册成功后直接加入团队
@@ -941,4 +952,19 @@ public class VppTeamServiceImpl implements VppTeamService {
         return vppTeamMapper.selectByExample(example).get(0);
     }
 
+    @Override
+    public void deleteDirectoryTeam(String teamId) {
+        // 删除团队
+        VppTeam vppTeam = vppTeamMapper.selectByPrimaryKey(teamId);
+        vppTeam.setValidFlag(ValidStatusEnum.INVALID.value());
+        vppTeamMapper.updateByPrimaryKeySelective(vppTeam);
+        // 解绑设备
+        // 归还序列码
+        VppMember member = vppMemberService.getCurrentUser();
+        unbindDeviceANDCDKey(vppTeam, member);
+        // 删除团队所有关联关系
+        vppRTeamMemberRoleService.cleanTeamMember(teamId);
+
+    }
+
 }

+ 1 - 1
pdf-tech-core/src/main/java/cn/kdan/pdf/tech/core/utils/QuartzUtils.java

@@ -70,7 +70,7 @@ public class QuartzUtils {
     public static void rescheduleJob(String triggerName, String triggerGroupName, String cronExpression, ScheduleSetting scheduleSetting) {
         try {
             if (scheduleSetting.getType().equals(ScheduleSettingTypeEnum.PER_HOUR.value())) {
-                cronExpression = "0 * * * * ?";
+                cronExpression = "0 0 * * * ?";
             } else if (scheduleSetting.getType().equals(ScheduleSettingTypeEnum.SPECIFIED_TIME_EVERY_DAY.value())) {
                 cronExpression = generateCronExpression(scheduleSetting.getTime());
             }