From 0fb6b9d8d414822668c401a2b507df1fe6d1fa2d Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 16 六月 2025 14:28:08 +0800
Subject: [PATCH] 用户权限管理

---
 framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java |  145 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 141 insertions(+), 4 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java b/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java
index 481b812..2d9ebf6 100644
--- a/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/member/serviceimpl/ClerkServiceImpl.java
@@ -1,14 +1,16 @@
 package cn.lili.modules.member.serviceimpl;
-
+import lombok.extern.slf4j.Slf4j;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.lili.cache.Cache;
 import cn.lili.cache.CachePrefix;
 import cn.lili.common.enums.ResultCode;
+import cn.lili.common.enums.ResultUtil;
 import cn.lili.common.exception.ServiceException;
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.security.enums.UserEnums;
 import cn.lili.common.utils.StringUtils;
 import cn.lili.common.vo.PageVO;
+import cn.lili.common.vo.ResultMessage;
 import cn.lili.modules.member.entity.dos.Clerk;
 import cn.lili.modules.member.entity.dos.Member;
 import cn.lili.modules.member.entity.dos.StoreClerkRole;
@@ -16,6 +18,7 @@
 import cn.lili.modules.member.entity.dto.ClerkAddDTO;
 import cn.lili.modules.member.entity.dto.ClerkEditDTO;
 import cn.lili.modules.member.entity.dto.ClerkQueryDTO;
+import cn.lili.modules.member.entity.dto.MemberAddDTO;
 import cn.lili.modules.member.entity.vo.ClerkVO;
 import cn.lili.modules.member.mapper.ClerkMapper;
 import cn.lili.modules.member.service.*;
@@ -43,6 +46,7 @@
  */
 @Service
 @Transactional(rollbackFor = Exception.class)
+@Slf4j
 public class ClerkServiceImpl extends ServiceImpl<ClerkMapper, Clerk> implements ClerkService {
 
     @Autowired
@@ -57,7 +61,100 @@
     private Cache cache;
 
     @Override
+    public ResultMessage<Object> addClerk(ClerkAddDTO clerkAddDTO) {
+        int rolesMaxSize = 10;
+        try {
+            //瑙掕壊蹇呴�夛紝骞朵笖鏈�鍚庤缃�10涓�
+            if (clerkAddDTO.getRoles() != null && clerkAddDTO.getRoles().size() >= rolesMaxSize) {
+                throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN);
+            }
+            //鏍¢獙鏄惁宸茬粡鏄細鍛�
+            Member member = memberService.findByMobile(clerkAddDTO.getMobile());
+            if (member == null) {
+                //娣诲姞浼氬憳
+                MemberAddDTO memberAddDTO = new MemberAddDTO();
+                memberAddDTO.setMobile(clerkAddDTO.getMobile());
+                memberAddDTO.setPassword(clerkAddDTO.getPassword());
+                memberAddDTO.setUsername(clerkAddDTO.getUsername());
+                member = memberService.addMember(memberAddDTO);
+            } else {
+                //鏍¢獙瑕佹坊鍔犵殑浼氬憳鏄惁宸茬粡鏄簵涓�
+                if (Boolean.TRUE.equals(member.getHaveStore())) {
+                    throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
+                }
+                //鏍¢獙浼氬憳鐨勬湁鏁堟��
+                if (Boolean.FALSE.equals(member.getDisabled())) {
+                    throw new ServiceException(ResultCode.USER_STATUS_ERROR);
+                }
+            }
+            //娣诲姞搴楀憳
+            clerkAddDTO.setMemberId(member.getId());
+            clerkAddDTO.setShopkeeper(false);
+            clerkAddDTO.setStoreId(UserContext.getCurrentUser().getStoreId());
+            this.saveClerk(clerkAddDTO);
+            //淇敼姝や細鍛樻嫢鏈夊簵閾�
+            List<String> ids = new ArrayList<>();
+            ids.add(member.getId());
+            memberService.updateHaveShop(true, UserContext.getCurrentUser().getStoreId(), ids);
+        } catch (ServiceException se) {
+            log.info(se.getMsg(), se);
+            throw se;
+        } catch (Exception e) {
+            log.error("娣诲姞搴楀憳鍑洪敊", e);
+        }
+        return ResultUtil.success();
+    }
+    @Override
+    public Member addClerkReturnMember(ClerkAddDTO clerkAddDTO) {
+        int rolesMaxSize = 10;
+        Member member = null;
+        try {
+            //瑙掕壊蹇呴�夛紝骞朵笖鏈�鍚庤缃�10涓�
+            if (clerkAddDTO.getRoles() != null && clerkAddDTO.getRoles().size() >= rolesMaxSize) {
+                throw new ServiceException(ResultCode.PERMISSION_BEYOND_TEN);
+            }
+            //鏍¢獙鏄惁宸茬粡鏄細鍛�
+            member = memberService.findByMobile(clerkAddDTO.getMobile());
+            if (member == null) {
+                //娣诲姞浼氬憳
+                MemberAddDTO memberAddDTO = new MemberAddDTO();
+                memberAddDTO.setMobile(clerkAddDTO.getMobile());
+                memberAddDTO.setPassword(clerkAddDTO.getPassword());
+                memberAddDTO.setUsername(clerkAddDTO.getUsername());
+                member = memberService.addMember(memberAddDTO);
+            } else {
+                //鏍¢獙瑕佹坊鍔犵殑浼氬憳鏄惁宸茬粡鏄簵涓�
+                if (Boolean.TRUE.equals(member.getHaveStore())) {
+                    throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
+                }
+                //鏍¢獙浼氬憳鐨勬湁鏁堟��
+                if (Boolean.FALSE.equals(member.getDisabled())) {
+                    throw new ServiceException(ResultCode.USER_STATUS_ERROR);
+                }
+            }
+            //娣诲姞搴楀憳
+            clerkAddDTO.setMemberId(member.getId());
+            clerkAddDTO.setShopkeeper(false);
+            String storeId = UserContext.getCurrentUser().getStoreId();
+//            storeId = "1376433565247471616"; //娴嬭瘯鐢�
+            clerkAddDTO.setStoreId(storeId);
+            this.saveClerk(clerkAddDTO);
+            //淇敼姝や細鍛樻嫢鏈夊簵閾�
+            List<String> ids = new ArrayList<>();
+            ids.add(member.getId());
+            memberService.updateHaveShop(true,storeId, ids);
+
+        } catch (ServiceException se) {
+            log.info(se.getMsg(), se);
+            throw se;
+        } catch (Exception e) {
+            log.error("娣诲姞搴楀憳鍑洪敊", e);
+        }
+        return member;
+    }
+    @Override
     public IPage<ClerkVO> clerkForPage(PageVO page, ClerkQueryDTO clerkQueryDTO) {
+
 
         QueryWrapper<ClerkVO> clerkVOQueryWrapper = new QueryWrapper<>();
         clerkVOQueryWrapper.eq("li_clerk.store_id", UserContext.getCurrentUser().getStoreId());
@@ -159,9 +256,10 @@
             if (Boolean.TRUE.equals(clerk.getShopkeeper())) {
                 throw new ServiceException(ResultCode.CANT_EDIT_CLERK_SHOPKEEPER);
             }
-
+            String storeId = UserContext.getCurrentUser().getStoreId();
+//            storeId = "1376433565247471616";
             //鏍¢獙褰撳墠搴楀憳鏄惁鏄綋鍓嶅簵閾虹殑
-            if (!clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
+            if (!clerk.getStoreId().equals(storeId)) {
                 throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
             }
             if (Boolean.TRUE.equals(clerkEditDTO.getIsSuper())) {
@@ -186,8 +284,11 @@
 
             //閮ㄩ棬鏍¢獙
             if (CharSequenceUtil.isNotEmpty(clerkEditDTO.getDepartmentId())) {
+                System.out.println(clerkEditDTO.getDepartmentId());
+                System.out.println(storeDepartmentService.getById(clerkEditDTO.getDepartmentId()));
                 if (storeDepartmentService.getById(clerkEditDTO.getDepartmentId()) != null) {
                     clerk.setDepartmentId(clerkEditDTO.getDepartmentId());
+                    System.out.println(clerk);
                 } else {
                     throw new ServiceException(ResultCode.PERMISSION_NOT_FOUND_ERROR);
                 }
@@ -226,6 +327,7 @@
         //瑙掕壊鏍¢獙
         if (clerkAddDTO.getRoles() != null && !clerkAddDTO.getRoles().isEmpty()) {
             List<StoreRole> storeRoles = storeRoleService.list(clerkAddDTO.getRoles());
+            System.out.println(storeRoles);
             if (storeRoles.size() != clerkAddDTO.getRoles().size()) {
                 throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR);
             }
@@ -277,7 +379,9 @@
     @Override
     public void deleteClerk(List<String> ids) {
         QueryWrapper<Clerk> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("store_id", UserContext.getCurrentUser().getStoreId());
+        ;
+//        String storeId = "1376433565247471616";
+        queryWrapper.eq("store_id", UserContext.getCurrentUser().getId());
         queryWrapper.in("id", ids);
         List<Clerk> clerks = this.baseMapper.selectList(queryWrapper);
         if (!clerks.isEmpty()) {
@@ -291,6 +395,7 @@
             List<String> memberIds = new ArrayList<>();
             clerks.forEach(clerk -> {
                 //鏃犳硶鍒犻櫎褰撳墠鐧诲綍鐨勫簵鍛�
+                System.out.println(UserContext.getCurrentUser());
                 if (UserContext.getCurrentUser().getClerkId().equals(clerk.getId())) {
                     throw new ServiceException(ResultCode.CLERK_CURRENT_SUPPER);
                 }
@@ -331,6 +436,38 @@
     }
 
     @Override
+    public Member checkClerk(String memberId, String mobile) {
+        //鏍¢獙鏄惁宸茬粡鏄細鍛�
+        Member member = memberService.findByMobile(mobile);
+        System.out.println(member);
+        if (member != null) {
+            // 鏄綋鍓嶈处鍙蜂慨鏀�
+            if (memberId !=null && memberId.equals(member.getId())) {
+                return member;
+            }
+
+            //鏍¢獙瑕佹坊鍔犵殑浼氬憳鏄惁宸茬粡鏄簵涓�
+            if (Boolean.TRUE.equals(member.getHaveStore())) {
+                throw new ServiceException(ResultCode.STORE_APPLY_DOUBLE_ERROR);
+            }
+            //鏍¢獙浼氬憳鐨勬湁鏁堟��
+            if (Boolean.FALSE.equals(member.getDisabled())) {
+                throw new ServiceException(ResultCode.USER_STATUS_ERROR);
+            }
+            //鏍¢獙姝や細鍛樻槸鍚﹀凡缁忔槸搴楀憳
+            Clerk clerk = this.getClerkByMemberId(member.getId());
+            if (clerk != null && !clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
+                throw new ServiceException(ResultCode.CLERK_USER_ERROR);
+            }
+            if (clerk != null && clerk.getStoreId().equals(UserContext.getCurrentUser().getStoreId())) {
+                throw new ServiceException(ResultCode.CLERK_ALREADY_EXIT_ERROR);
+            }
+            return member;
+        }
+        return new Member();
+    }
+
+    @Override
     public void disable(String id, Boolean status) {
         Clerk clerk = this.getById(id);
         if (clerk == null) {

--
Gitblit v1.8.0