Browse Source

新需求-增加删除家庭云成员功能,修改接口请求限流3秒1次改成1秒1一次,修改设备授权创建家庭云和创建家庭云相册中的的检验逻辑,如果存在则直接返回存在的Id

tea.yu 2 weeks ago
parent
commit
069fa9c962
18 changed files with 306 additions and 15 deletions
  1. 14 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/AppFamilyCloudController.java
  2. 45 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/vo/DelFamilyCloudMemberReqVO.java
  3. 20 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/vo/InviteFamilyMemberListRespVO.java
  4. 5 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/AuthorizeMapper.java
  5. 6 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/AuthorizePhotoMapper.java
  6. 16 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/InviteFamilyMemberMapper.java
  7. 5 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/enums/ApiEndpointsEnum.java
  8. 2 2
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/enums/RateLimit.java
  9. 12 4
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AbstractMcdiskService.java
  10. 8 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AppFamilyCloudService.java
  11. 69 7
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AppFamilyCloudServiceImpl.java
  12. 7 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizePhotoService.java
  13. 12 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizePhotoServiceImpl.java
  14. 7 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizeService.java
  15. 12 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizeServiceImpl.java
  16. 11 2
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/FamilyCloudServiceImpl.java
  17. 18 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/InviteFamilyMemberService.java
  18. 37 0
      sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/InviteFamilyMemberServiceImpl.java

+ 14 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/AppFamilyCloudController.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
 import cn.sikey.framework.common.pojo.CommonResult;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.AppOauthReqVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.ConfirmInvitationReqVO;
+import cn.sikey.mcdisk.controller.app.familycloud.vo.DelFamilyCloudMemberReqVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.QueryUserOauthRespVO;
 import cn.sikey.mcdisk.enums.RateLimit;
 import cn.sikey.mcdisk.pojo.McdiskResult;
@@ -111,4 +112,17 @@ public class AppFamilyCloudController {
         return CommonResult.success(mcdiskResult.getData());
     }*/
 
+    /**
+     * 删除家庭云成员
+     *
+     * @param req   请求参数
+     * @return      CommonResult<Void>
+     *
+     */
+    @RateLimit(key = "delFamilyCloudMember", type = RateLimit.LimitType.GLOBAL)
+    @PostMapping("/delFamilyCloudMember")
+    public CommonResult<Void> delFamilyCloudMember( @Validated @RequestBody DelFamilyCloudMemberReqVO req) {
+        return  appFamilyCloudService.delFamilyCloudMember(req);
+    }
+
 }

+ 45 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/vo/DelFamilyCloudMemberReqVO.java

@@ -0,0 +1,45 @@
+package cn.sikey.mcdisk.controller.app.familycloud.vo;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+/**
+ * 删除家庭云成员
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class DelFamilyCloudMemberReqVO {
+    private List<FamilyMember> memberList;
+
+    @Data
+    @Accessors(chain = true)
+    public static class FamilyMember {
+        /**
+         * 手机号
+         */
+        private String phoneNumber;
+        /**
+         * 用户Id
+         */
+        private String userId;
+    }
+
+    /**
+     * ticket
+     */
+    @NotBlank(message = "ticket是空")
+    private String ticket;
+
+    /**
+     * isAdmin
+     */
+    private Integer isAdmin;
+
+
+}

+ 20 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/controller/app/familycloud/vo/InviteFamilyMemberListRespVO.java

@@ -0,0 +1,20 @@
+package cn.sikey.mcdisk.controller.app.familycloud.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * 查询邀请用户加入家庭成员表中用户Id列表
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class InviteFamilyMemberListRespVO {
+    /**
+     * 用户id列表
+     */
+    private List<String> userIdList;
+}

+ 5 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/AuthorizeMapper.java

@@ -71,6 +71,11 @@ public interface AuthorizeMapper extends BaseMapper<AuthorizeDO> {
         update(updateWrapper);
     }
 
+    default int deleteAuthorize(String deviceId) {
+        QueryWrapper<AuthorizeDO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_id", deviceId);
+        return delete(queryWrapper);
+    }
 }
 
 

+ 6 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/AuthorizePhotoMapper.java

@@ -52,6 +52,12 @@ public interface AuthorizePhotoMapper extends BaseMapper<AuthorizePhotoDO> {
         queryWrapper.eq("device_id", deviceId);
         return selectOne(queryWrapper);
     }
+
+    default int deleteAuthorizePhoto(String deviceId) {
+        QueryWrapper<AuthorizePhotoDO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_id", deviceId);
+        return delete(queryWrapper);
+    }
 }
 
 

+ 16 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/dal/mysql/InviteFamilyMemberMapper.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * @Author: nelson
  * @Date: 2025/6/5
@@ -18,4 +20,18 @@ public interface InviteFamilyMemberMapper extends BaseMapper<InviteFamilyMemberD
         queryWrapper.eq("device_id", deviceId);
         return selectOne(queryWrapper);
     }
+
+    default List<InviteFamilyMemberDO> queryAppOauthList(List<String> userIdList, String deviceId) {
+        QueryWrapper<InviteFamilyMemberDO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_id", deviceId);
+        queryWrapper.in("user_id", userIdList);
+        return selectList(queryWrapper);
+    }
+
+    default int deleteInviteFamilyMembers(List<String> userIdList, String deviceId) {
+        QueryWrapper<InviteFamilyMemberDO> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("device_id", deviceId);
+        queryWrapper.in("user_id", userIdList);
+        return delete(queryWrapper);
+    }
 }

+ 5 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/enums/ApiEndpointsEnum.java

@@ -45,6 +45,11 @@ public enum ApiEndpointsEnum {
 
     // 刷新Token oauth2/refreshToken
     REFRESH_TOKEN("/open-mpplatform/oauth2/refreshToken"),
+
+    /**
+     * 删除家庭云成员
+     */
+    DELETE_CLOUD_MEMBER("/richlifeApp/devapp/andAlbum/openApi/deleteCloudMember")
     ;
 
 

+ 2 - 2
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/enums/RateLimit.java

@@ -22,8 +22,8 @@ public @interface RateLimit {
     // 每3秒允许的请求数
     int limit() default 1;
 
-    // 时间窗口设为3
-    int expire() default 3;
+    // 时间窗口设为1
+    int expire() default 1;
 
     LimitType type() default LimitType.USER;
 

+ 12 - 4
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AbstractMcdiskService.java

@@ -215,7 +215,7 @@ public class AbstractMcdiskService {
      * @param accessToken  accessToken
      * @return
      */
-    public void validateCloudNameUniqueness(String newCloudName, Integer accountType, String ticket, String accessToken) {
+    public McdiskResult validateCloudNameUniqueness(String newCloudName, Integer accountType, String ticket, String accessToken) {
         McdiskResult familyCloud = queryFamilyCloud(accountType, ticket, accessToken);
         String jsonStr = JSONUtil.toJsonStr(familyCloud.getData());
         JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
@@ -226,9 +226,13 @@ public class AbstractMcdiskService {
             String existingName = cloudInfo.getStr("cloudName");
 
             if (StringUtils.isNotBlank(existingName) && StringUtils.equalsIgnoreCase(existingName.trim(), newCloudName.trim())) {
-                throw new ServiceException(HttpStatus.HTTP_INTERNAL_ERROR, "已存在家庭云名称");
+                log.info("已存在家庭云名称");
+                Map<String, String> map = new HashMap<>();
+                map.put("cloudID",  cloudInfo.getStr("cloudID"));
+                return McdiskResult.success(map);
             }
         }
+        return null;
     }
 
     /**
@@ -240,7 +244,7 @@ public class AbstractMcdiskService {
      * @param accessToken accessToken
      * @return
      */
-    public void validateCloudPhotoNameUniqueness(String photoName, String cloudId, String ticket, String accessToken) {
+    public McdiskResult validateCloudPhotoNameUniqueness(String photoName, String cloudId, String ticket, String accessToken) {
         McdiskResult familyCloud = queryCloudPhoto(cloudId, ticket, accessToken);
         String jsonStr = JSONUtil.toJsonStr(familyCloud.getData());
         JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
@@ -251,9 +255,13 @@ public class AbstractMcdiskService {
             String existingPhotoName = cloudInfo.getStr("photoName");
 
             if (StringUtils.isNotBlank(existingPhotoName) && StringUtils.equalsIgnoreCase(existingPhotoName.trim(), photoName.trim())) {
-                throw new ServiceException(HttpStatus.HTTP_INTERNAL_ERROR, "已存在家庭云相册名称");
+                log.info("已存在家庭云相册名称");
+                Map<String, String> map = new HashMap<>();
+                map.put("photoID",  cloudInfo.getStr("photoID"));
+                return McdiskResult.success(map);
             }
         }
+        return null;
     }
 
     /**

+ 8 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AppFamilyCloudService.java

@@ -1,7 +1,9 @@
 package cn.sikey.mcdisk.service;
 
+import cn.sikey.framework.common.pojo.CommonResult;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.AppOauthReqVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.ConfirmInvitationReqVO;
+import cn.sikey.mcdisk.controller.app.familycloud.vo.DelFamilyCloudMemberReqVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.QueryUserOauthRespVO;
 import cn.sikey.mcdisk.pojo.McdiskResult;
 
@@ -20,4 +22,10 @@ public interface AppFamilyCloudService {
 
     QueryUserOauthRespVO queryUserOauth(AppOauthReqVO appOauthReqVO);
 
+    /**
+     * 删除家庭云成员
+     * @param req   请求参数
+     * @return
+     */
+    CommonResult<Void> delFamilyCloudMember(DelFamilyCloudMemberReqVO req);
 }

+ 69 - 7
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AppFamilyCloudServiceImpl.java

@@ -2,24 +2,20 @@ package cn.sikey.mcdisk.service;
 
 import cn.hutool.json.JSONObject;
 import cn.sikey.framework.common.exception.ServiceException;
-import cn.sikey.mcdisk.controller.app.familycloud.vo.AppOauthReqVO;
-import cn.sikey.mcdisk.controller.app.familycloud.vo.ConfirmInvitationReqVO;
-import cn.sikey.mcdisk.controller.app.familycloud.vo.InviteFamilyMemberRespVO;
-import cn.sikey.mcdisk.controller.app.familycloud.vo.QueryUserOauthRespVO;
+import cn.sikey.framework.common.pojo.CommonResult;
+import cn.sikey.mcdisk.controller.app.familycloud.vo.*;
 import cn.sikey.mcdisk.controller.app.wristwatch.vo.AuthorizeRespVO;
 import cn.sikey.mcdisk.dal.dataobject.InviteFamilyMemberDO;
 import cn.sikey.mcdisk.enums.ApiEndpointsEnum;
 import cn.sikey.mcdisk.enums.ChannelTypeEnum;
 import cn.sikey.mcdisk.enums.CodeStatusEnum;
-import cn.sikey.mcdisk.enums.IsAuthorizeEnum;
 import cn.sikey.mcdisk.pojo.McdiskResult;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @Author: nelson
@@ -33,6 +29,9 @@ public class AppFamilyCloudServiceImpl extends AbstractMcdiskService implements
     @Resource
     private AuthorizeService authorizeService;
 
+    @Resource
+    private AuthorizePhotoService authorizePhotoService;
+
     /**
      * 确认邀请
      *
@@ -130,4 +129,67 @@ public class AppFamilyCloudServiceImpl extends AbstractMcdiskService implements
         return queryUserOauthRespVO;
     }
 
+    /**
+     * 删除家庭云成员
+     *
+     * @param req 请求参数
+     * @return
+     */
+    @Override
+    public CommonResult<Void> delFamilyCloudMember(DelFamilyCloudMemberReqVO req) {
+        String ticket = req.getTicket();
+        // 设备是否认证
+        AuthorizeRespVO authorizeRespVO = authorizeService.queryOauth(ticket);
+        if (Objects.isNull(authorizeRespVO)) {
+            throw new ServiceException(CodeStatusEnum.NOT_ACTIVATED.getCode(), CodeStatusEnum.NOT_ACTIVATED.getDescription());
+        }
+        Map<String, String> fFamilyMemberMap = new HashMap<>();
+        List<String> userIdList = new ArrayList<>();
+        for (DelFamilyCloudMemberReqVO.FamilyMember item: req.getMemberList()) {
+            userIdList.add(item.getUserId());
+            fFamilyMemberMap.put(item.getUserId(), item.getPhoneNumber());
+        }
+        // 用户是否认证
+        InviteFamilyMemberListRespVO inviteFamilyMemberListRespVO = inviteFamilyMemberService.queryAppOauthList(userIdList, ticket);
+        if (Objects.isNull(inviteFamilyMemberListRespVO)) {
+            throw new ServiceException(CodeStatusEnum.USER_HAS_NOT_BEEN_AUTHENTICATED.getCode(), CodeStatusEnum.USER_HAS_NOT_BEEN_AUTHENTICATED.getDescription());
+        }
+
+        // 准备请求参数
+        String apiUrl = mcdiskConfig.getPath() + ApiEndpointsEnum.DELETE_CLOUD_MEMBER.getPath();
+
+        List<JSONObject> memberAccountInfos = new ArrayList<>();
+        for (String userId: inviteFamilyMemberListRespVO.getUserIdList()) {
+            if (fFamilyMemberMap.containsKey(userId)) {
+                JSONObject memberAccountInfo = new JSONObject();
+                memberAccountInfo.set("account", fFamilyMemberMap.get(userId));
+                memberAccountInfo.set("accountType", "1");
+                memberAccountInfos.add(memberAccountInfo);
+            }
+
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.set("cloudID", authorizeRespVO.getCloudId());
+        jsonObject.set("memberAccountInfo", memberAccountInfos);
+        String jsonBody = jsonObject.toString();
+
+        // 准备请求头
+        Map<String, String> headers = getHeaders(ticket, authorizeRespVO.getAccessToken());
+
+        // 发送请求
+        McdiskResult mcdiskResult = getMcdiskResult(apiUrl, jsonBody, headers);
+        log.info("[删除家庭云成员]返回数据:{}", mcdiskResult);
+
+        if (mcdiskResult.getCode() == 0) {
+            if (req.getIsAdmin() == 1) {// 是管理员,则删除二张关系表所有数据
+                authorizeService.deleteAuthorize(ticket);
+                authorizePhotoService.deleteAuthorizePhoto(ticket);
+                inviteFamilyMemberService.deleteInviteFamilyMembers(userIdList, ticket);
+            } else if (req.getIsAdmin() == 2) {//非管理员,则删除成员表中的自己
+                inviteFamilyMemberService.deleteInviteFamilyMembers(userIdList, ticket);
+            }
+        }
+        return CommonResult.success();
+    }
+
 }

+ 7 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizePhotoService.java

@@ -18,4 +18,11 @@ public interface AuthorizePhotoService {
 
     void notifyWatchAuthorization(NotifyWatchAuthorizationReqVO notifyWatchAuthorizationReqVO);
 
+    /**
+     * 删除授权相册信息
+     * @param deviceId 设备编码
+     *
+     */
+    void deleteAuthorizePhoto(String deviceId);
+
 }

+ 12 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizePhotoServiceImpl.java

@@ -130,4 +130,16 @@ public class AuthorizePhotoServiceImpl implements AuthorizePhotoService {
         AuthorizePhotoDO authorizePhotoD = authorizePhotoMapper.queryOauthPhotoByDeviceId(oauthPhotoReqVO.getTicket());
         return AuthorizePhotoConvert.INSTANCE.convertOauthRespVO(authorizePhotoD);
     }
+
+    /**
+     * 删除授权相册信息
+     * @param deviceId 设备编码
+     *
+     */
+    @Override
+    public void deleteAuthorizePhoto(String deviceId) {
+        int num = authorizePhotoMapper.deleteAuthorizePhoto(deviceId);
+        log.info("[删除授权相册信息]deleteAuthorizePhoto num:{}", num);
+    }
+
 }

+ 7 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizeService.java

@@ -26,4 +26,11 @@ public interface AuthorizeService {
     void notifyParentsAuthorization(NotifyParentsAuthorizationReqVO notifyParentsAuthorizationReqVO);
 
     void updateAuthorizeAccessTokenByDeviceId(String deviceId);
+
+    /**
+     * 删除授权信息
+     * @param deviceId 设备编码
+     *
+     */
+    void deleteAuthorize(String deviceId);
 }

+ 12 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/AuthorizeServiceImpl.java

@@ -295,4 +295,16 @@ public class AuthorizeServiceImpl extends AbstractMcdiskService implements Autho
     public void updateAuthorizeAccessTokenByDeviceId(String deviceId) {
         authorizeMapper.updateAuthorizeAccessTokenByDeviceId(deviceId);
     }
+
+
+    /**
+     * 删除授权信息
+     * @param deviceId 设备编码
+     *
+     */
+    @Override
+    public void deleteAuthorize(String deviceId) {
+        int num = authorizeMapper.deleteAuthorize(deviceId);
+        log.info("[删除授权信息]deleteAuthorize num:{}", num);
+    }
 }

+ 11 - 2
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/FamilyCloudServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.http.HttpStatus;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import cn.sikey.framework.common.exception.ServiceException;
 import cn.sikey.mcdisk.controller.app.wristwatch.vo.DeleteContentsReqVO;
 import cn.sikey.mcdisk.controller.app.wristwatch.vo.GetFileUploadURLReqVO;
@@ -42,7 +43,11 @@ public class FamilyCloudServiceImpl extends AbstractMcdiskService implements Fam
     public McdiskResult createFamilyCloud(String cloudName, Integer accountType, String ticket, String accessToken) {
 
         // 校验家庭云名称
-        validateCloudNameUniqueness(cloudName, accountType, ticket, accessToken);
+        McdiskResult result = validateCloudNameUniqueness(cloudName, accountType, ticket, accessToken);
+        if (Objects.nonNull(result)) {
+            log.info("createFamilyCloud:{}", JSONUtil.toJsonStr(result));
+            return result;
+        }
 
         // 准备请求参数
         String apiUrl = mcdiskConfig.getPath() + ApiEndpointsEnum.CREATE_FAMILY_CLOUD.getPath();
@@ -72,7 +77,11 @@ public class FamilyCloudServiceImpl extends AbstractMcdiskService implements Fam
     public McdiskResult createCloudPhoto(String cloudID, Integer theme, String photoName, String ticket, String accessToken) {
 
         // 校验家庭云下的相册唯一性
-        validateCloudPhotoNameUniqueness(photoName, cloudID, ticket, accessToken);
+        McdiskResult result = validateCloudPhotoNameUniqueness(photoName, cloudID, ticket, accessToken);
+        if (Objects.nonNull(result)) {
+            log.info("createCloudPhoto:{}", JSONUtil.toJsonStr(result));
+            return result;
+        }
 
         // 准备请求参数
         String apiUrl = mcdiskConfig.getPath() + ApiEndpointsEnum.CREATE_CLOUD_PHOTO.getPath();

+ 18 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/InviteFamilyMemberService.java

@@ -1,8 +1,11 @@
 package cn.sikey.mcdisk.service;
 
+import cn.sikey.mcdisk.controller.app.familycloud.vo.InviteFamilyMemberListRespVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.InviteFamilyMemberRespVO;
 import cn.sikey.mcdisk.dal.dataobject.InviteFamilyMemberDO;
 
+import java.util.List;
+
 /**
  * @Author: nelson
  * @Date: 2025/6/5
@@ -11,5 +14,20 @@ import cn.sikey.mcdisk.dal.dataobject.InviteFamilyMemberDO;
 public interface InviteFamilyMemberService {
     InviteFamilyMemberRespVO queryAppOauth(String userId,String deviceId);
 
+    /**
+     * 查询邀请用户加入家庭成员表中的用户Id列表
+     * @param userIdList    用户Id列表
+     * @param deviceId      设备编码
+     * @return
+     */
+    InviteFamilyMemberListRespVO queryAppOauthList(List<String> userIdList, String deviceId);
+
+    /**
+     * 根据用户Id列表批量删除保存邀请用户加入家庭成员
+     * @param userIdList
+     * @param deviceId
+     */
+    void deleteInviteFamilyMembers(List<String> userIdList, String deviceId);
+
     void saveInviteFamilyMember(InviteFamilyMemberDO inviteFamilyMemberDO);
 }

+ 37 - 0
sikey-mcdisk-business/sikey-mcdisk-business-biz/src/main/java/cn/sikey/mcdisk/service/InviteFamilyMemberServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.sikey.mcdisk.service;
 
+import cn.sikey.mcdisk.controller.app.familycloud.vo.InviteFamilyMemberListRespVO;
 import cn.sikey.mcdisk.controller.app.familycloud.vo.InviteFamilyMemberRespVO;
 import cn.sikey.mcdisk.convert.OauthConvert;
 import cn.sikey.mcdisk.dal.dataobject.InviteFamilyMemberDO;
@@ -8,6 +9,9 @@ import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @Author: nelson
  * @Date: 2025/6/5
@@ -33,6 +37,39 @@ public class InviteFamilyMemberServiceImpl extends AbstractMcdiskService impleme
         return OauthConvert.INSTANCE.convertInviteFamilyMemberRespVO(queryAppOauth);
     }
 
+    /**
+     * 查询app用户认证列表
+     *
+     * @param userIdList    用户id列表
+     * @param deviceId      设备编码
+     * @return InviteFamilyMemberListRespVO
+     */
+    @Override
+    public InviteFamilyMemberListRespVO queryAppOauthList(List<String> userIdList, String deviceId) {
+        List<InviteFamilyMemberDO> queryAppOauthList = inviteFamilyMemberMapper.queryAppOauthList(userIdList, deviceId);
+        InviteFamilyMemberListRespVO respV0 = new InviteFamilyMemberListRespVO();
+        List<String> strList = new ArrayList<>();
+        for (InviteFamilyMemberDO item : queryAppOauthList) {
+            strList.add(item.getUserId());
+        }
+        respV0.setUserIdList(strList);
+        return respV0;
+    }
+
+
+    /**
+     * 根据用户Id列表批量删除保存邀请用户加入家庭成员
+     *
+     * @param userIdList    用户id列表
+     * @param deviceId      设备编码
+     *
+     */
+    @Override
+    public void deleteInviteFamilyMembers(List<String> userIdList, String deviceId) {
+       int num = inviteFamilyMemberMapper.deleteInviteFamilyMembers(userIdList, deviceId);
+       log.info("[删除保存邀请用户加入家庭成员]deleteInviteFamilyMember num:{}", num);
+    }
+
     /**
      * 保存邀请用户加入家庭成员
      *