From feedd62ec46b9faada80505387526acf914cf4c5 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 11 十月 2026 22:49:44 +0800
Subject: [PATCH] 海西州-同仁堂 1.添加操作日志生成

---
 yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java |   52 ++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
index 84e3bb6..6099e11 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java
@@ -25,11 +25,13 @@
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
+import cn.iocoder.yudao.module.system.mq.producer.user.AdminUserProducer;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import cn.iocoder.yudao.module.system.service.dept.PostService;
 import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
 import cn.iocoder.yudao.module.system.service.tenant.TenantService;
+import cn.iocoder.yudao.framework.operatelog.core.util.OperateLogUtils;
 import com.google.common.annotations.VisibleForTesting;
 import com.mzt.logapi.context.LogRecordContext;
 import com.mzt.logapi.service.impl.DiffParseFunction;
@@ -54,7 +56,7 @@
 /**
  * 鍚庡彴鐢ㄦ埛 Service 瀹炵幇绫�
  *
- * @author 鑺嬮亾婧愮爜
+ * @author 瓒呯骇绠$悊鍛�
  */
 @Service("adminUserService")
 @Slf4j
@@ -88,6 +90,9 @@
     @Resource
     private ConfigApi configApi;
 
+    @Resource
+    private AdminUserProducer adminUserProducer;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_CREATE_SUB_TYPE, bizNo = "{{#user.id}}",
@@ -112,6 +117,10 @@
         if (CollectionUtil.isNotEmpty(user.getPostIds())) {
             userPostMapper.insertBatch(convertList(user.getPostIds(),
                     postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
+        }
+        // 2.3 鍒嗛厤鐢ㄦ埛瑙掕壊
+        if (CollUtil.isNotEmpty(createReqVO.getRoleIds())) {
+            permissionService.assignUserRole(user.getId(), createReqVO.getRoleIds());
         }
 
         // 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
@@ -158,6 +167,8 @@
         userMapper.updateById(updateObj);
         // 2.2 鏇存柊宀椾綅
         updateUserPost(updateReqVO, updateObj);
+        // 2.3 鏄电О / 澶村儚鍙樺寲鏃讹紝鍙戦�佹秷鎭緵涓嬫父璁㈤槄锛堝 IM 妯″潡鎺� FRIEND_INFO_UPDATED锛�
+        publishUserProfileUpdatedIfChanged(oldUser, updateReqVO.getNickname(), updateReqVO.getAvatar());
 
         // 3. 璁板綍鎿嶄綔鏃ュ織涓婁笅鏂�
         LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(oldUser, UserSaveReqVO.class));
@@ -188,12 +199,30 @@
 
     @Override
     public void updateUserProfile(Long id, UserProfileUpdateReqVO reqVO) {
-        // 鏍¢獙姝g‘鎬�
-        validateUserExists(id);
+        // 1. 鏍¢獙姝g‘鎬�
+        AdminUserDO oldUser = validateUserExists(id);
         validateEmailUnique(id, reqVO.getEmail());
         validateMobileUnique(id, reqVO.getMobile());
-        // 鎵ц鏇存柊
+
+        // 2. 鎵ц鏇存柊
         userMapper.updateById(BeanUtils.toBean(reqVO, AdminUserDO.class).setId(id));
+
+        // 3. 鏄电О / 澶村儚鍙樺寲鏃讹紝鍙戦�佹秷鎭緵涓嬫父璁㈤槄锛堝 IM 妯″潡鎺� FRIEND_INFO_UPDATED锛�
+        publishUserProfileUpdatedIfChanged(oldUser, reqVO.getNickname(), reqVO.getAvatar());
+    }
+
+    /**
+     * 浠呭綋 nickname 鎴� avatar 璺熸棫鍊间笉涓�鑷存椂锛屽彂閫� AdminUserProfileUpdateMessage
+     */
+    private void publishUserProfileUpdatedIfChanged(AdminUserDO oldUser, String newNickname, String newAvatar) {
+        boolean nicknameChanged = newNickname != null && !ObjUtil.equal(oldUser.getNickname(), newNickname);
+        boolean avatarChanged = newAvatar != null && !ObjUtil.equal(oldUser.getAvatar(), newAvatar);
+        if (!nicknameChanged && !avatarChanged) {
+            return;
+        }
+        adminUserProducer.sendUserProfileUpdateMessage(oldUser.getId(),
+                nicknameChanged ? newNickname : null,
+                avatarChanged ? newAvatar : null);
     }
 
     @Override
@@ -329,6 +358,11 @@
         }
         return userMapper.selectByIds(ids);
     }
+
+    public List<AdminUserDO> getUserListAll() {
+        return userMapper.selectList();
+    }
+
 
     @Override
     public void validateUserList(Collection<Long> ids) {
@@ -473,6 +507,8 @@
     }
 
     @Override
+    @LogRecord(type = SYSTEM_USER_TYPE, subType = SYSTEM_USER_IMPORT_SUB_TYPE, bizNo = "0",
+            success = SYSTEM_USER_IMPORT_SUCCESS)
     @Transactional(rollbackFor = Exception.class) // 娣诲姞浜嬪姟锛屽紓甯稿垯鍥炴粴鎵�鏈夊鍏�
     public UserImportRespVO importUserList(List<UserImportExcelVO> importUsers, boolean isUpdateSupport) {
         // 1.1 鍙傛暟鏍¢獙
@@ -526,6 +562,9 @@
             userMapper.updateById(updateUser);
             respVO.getUpdateUsernames().add(importUser.getUsername());
         });
+        // 璁板綍瀵煎叆缁撴灉姹囨�伙紝渚� @LogRecord 鐨� success 鏂囨寮曠敤
+        OperateLogUtils.putImportSummary(respVO.getCreateUsernames(), respVO.getUpdateUsernames(),
+                respVO.getFailureUsernames());
         return respVO;
     }
 
@@ -535,6 +574,11 @@
     }
 
     @Override
+    public List<AdminUserDO> getDeptUsers(Collection<Long> deptIds) {
+        return userMapper.selectListByDeptIds(deptIds);
+    }
+
+    @Override
     public boolean isPasswordMatch(String rawPassword, String encodedPassword) {
         return passwordEncoder.matches(rawPassword, encodedPassword);
     }

--
Gitblit v1.9.3