Kaynağa Gözat

1、优化拉黑日志,处理拉黑状态时记录备注谁拉黑的

yys 1 ay önce
ebeveyn
işleme
a549075bf0

+ 3 - 3
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -146,8 +146,8 @@ public class FsUserController extends AppBaseController {
     @PostMapping("/disabled")
     @ApiOperation("批量禁用会员")
     public ResponseResult<Boolean> disabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody List<Long> userCompanyUserIds) {
-        log.debug("批量禁用会员 ids: {}", JSON.toJSONString(userCompanyUserIds));
-        Boolean r = userCompanyUserService.batchUpdateStatus(userCompanyUserIds, 2);
+        log.info("[fs_user_company_user] APP批量禁用会员(设status=2) | ids={}, 操作人userId={}", JSON.toJSONString(userCompanyUserIds), getUserId());
+        Boolean r = userCompanyUserService.batchUpdateStatus(userCompanyUserIds, 2, "销售userId=" + getUserId());
         return ResponseResult.ok(r);
     }
 
@@ -155,7 +155,7 @@ public class FsUserController extends AppBaseController {
     @PostMapping("/enabled")
     @ApiOperation("批量启用会员")
     public ResponseResult<Boolean> enabledUser(@ApiParam(value = "联系人id集合", required = true) @RequestBody List<Long> userCompanyUserIds) {
-        log.debug("批量启用会员 ids: {}", JSON.toJSONString(userCompanyUserIds));
+        log.info("[fs_user_company_user] APP批量启用会员(设status=1) | ids={}, 操作人userId={}", JSON.toJSONString(userCompanyUserIds), getUserId());
         Boolean r = userCompanyUserService.batchUpdateStatus(userCompanyUserIds, 1);
         return ResponseResult.ok(r);
     }

+ 6 - 1
fs-company/src/main/java/com/fs/user/FsUserAdminController.java

@@ -16,6 +16,7 @@ import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.IFsUserCompanyUserService;
 import com.fs.course.service.IFsUserCourseService;
 import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
 import com.fs.framework.service.TokenService;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsUserService;
@@ -192,6 +193,8 @@ public class FsUserAdminController extends BaseController {
     @PutMapping("/member")
     public AjaxResult editMemberUser(@RequestBody FsUserCompanyUser fsUser)
     {
+        logger.info("[fs_user_company_user] 后台修改会员信息 | id={}, userId={}, companyUserId={}, projectId={}, status={}, 操作人={}",
+                fsUser.getId(), fsUser.getUserId(), fsUser.getCompanyUserId(), fsUser.getProjectId(), fsUser.getStatus(), SecurityUtils.getUsername());
         return toAjax(fsUserCompanyUserService.updateFsUserCompanyUser(fsUser));
     }
 
@@ -229,7 +232,9 @@ public class FsUserAdminController extends BaseController {
     @PostMapping("/batchUpdateStatus")
     public AjaxResult batchUpdateStatus(@RequestBody FsUserCompanyUser fsUser)
     {
-        return toAjax(fsUserCompanyUserService.batchUpdateStatus(fsUser.getIds(), fsUser.getStatus()));
+        logger.info("[fs_user_company_user] 后台批量修改状态 | ids={}, newStatus={}, 操作人={}",
+                fsUser.getIds(), fsUser.getStatus(), SecurityUtils.getUsername());
+        return toAjax(fsUserCompanyUserService.batchUpdateStatus(fsUser.getIds(), fsUser.getStatus(), "管理员" + SecurityUtils.getUsername()));
     }
 
 

+ 18 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCompanyUserService.java

@@ -122,6 +122,15 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
      */
     Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status);
 
+    /**
+     * 修改会员-项目关系 状态(带操作人信息,status=2时写入remark)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status, String operatorInfo);
+
     /**
      * 修改会员-项目关系 状态
      * @param ids       参数
@@ -130,6 +139,15 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
      */
     Boolean batchUpdateStatus(List<Long> ids, int status);
 
+    /**
+     * 修改会员-项目关系 状态(带操作人信息,status=2时写入remark)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息,如"销售张三"或"后台管理员admin"
+     * @return Boolean
+     */
+    Boolean batchUpdateStatus(List<Long> ids, int status, String operatorInfo);
+
     /**
      * 解绑会员
      * @auth caoliqin

+ 76 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCompanyUserServiceImpl.java

@@ -9,6 +9,7 @@ import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.course.service.IFsUserCompanyUserService;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.store.param.h5.FsUserPageListParam;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -24,6 +25,7 @@ import java.util.Objects;
  * @date 2025-05-09
  */
 @Service
+@Slf4j
 public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserMapper, FsUserCompanyUser> implements IFsUserCompanyUserService {
 
     /**
@@ -80,6 +82,22 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
     @Override
     public int updateFsUserCompanyUser(FsUserCompanyUser fsUserCompanyUser)
     {
+        // 先查旧值,记录变更日志
+        if (fsUserCompanyUser.getId() != null) {
+            FsUserCompanyUser old = baseMapper.selectFsUserCompanyUserById(fsUserCompanyUser.getId());
+            if (old != null && fsUserCompanyUser.getStatus() != null && !fsUserCompanyUser.getStatus().equals(old.getStatus())) {
+                log.info("[fs_user_company_user] status变更 | id={}, userId={}, companyUserId={}, projectId={}, oldStatus={}, newStatus={}, 调用来源={}",
+                        old.getId(), old.getUserId(), old.getCompanyUserId(), old.getProjectId(),
+                        old.getStatus(), fsUserCompanyUser.getStatus(),
+                        Thread.currentThread().getStackTrace()[2]);
+                // status=2拉黑时,在remark中追加拉黑信息
+                if (fsUserCompanyUser.getStatus() == 2) {
+                    String blackRemark = "系统拉黑(原status=" + old.getStatus() + ")";
+                    String originRemark = fsUserCompanyUser.getRemark() != null ? fsUserCompanyUser.getRemark() : (old.getRemark() != null ? old.getRemark() : "");
+                    fsUserCompanyUser.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                }
+            }
+        }
         return baseMapper.updateFsUserCompanyUser(fsUserCompanyUser);
     }
 
@@ -161,6 +179,8 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
      */
     @Override
     public FsUserCompanyUser bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId, int status) {
+        log.info("[fs_user_company_user] bindRelationship | userId={}, projectId={}, companyId={}, companyUserId={}, status={}",
+                userId, projectId, companyId, companyUserId, status);
         FsUserCompanyUser userCompanyUser = new FsUserCompanyUser();
         userCompanyUser.setUserId(userId);
         userCompanyUser.setProjectId(projectId);
@@ -204,9 +224,37 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
      */
     @Override
     public Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status) {
+        return batchUpdateUserProjectStatus(ids, status, null);
+    }
+
+    /**
+     * 修改会员-项目关系 状态(带操作人信息)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status, String operatorInfo) {
         if (Objects.isNull(ids) || ids.isEmpty()) {
             throw new CustomException("请先选择会员");
         }
+        log.info("[fs_user_company_user] batchUpdateUserProjectStatus | status={}, ids={}, operatorInfo={}, 调用来源={}",
+                status, ids, operatorInfo, Thread.currentThread().getStackTrace()[2]);
+        // status=2拉黑时,逐条追加拉黑备注
+        if (status == 2) {
+            String blackRemark = (operatorInfo != null ? operatorInfo : "系统") + "拉黑";
+            for (UserProjectDTO dto : ids) {
+                FsUserCompanyUser old = selectByUserIdAndProjectId(dto.getUserId(), dto.getProjectId());
+                if (old != null) {
+                    String originRemark = old.getRemark() != null ? old.getRemark() : "";
+                    FsUserCompanyUser update = new FsUserCompanyUser();
+                    update.setId(old.getId());
+                    update.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                    baseMapper.updateFsUserCompanyUser(update);
+                }
+            }
+        }
         return baseMapper.changeUserProjectStatus(ids, status) > 0;
     }
 
@@ -220,9 +268,37 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
      */
     @Override
     public Boolean batchUpdateStatus(List<Long> ids, int status) {
+        return batchUpdateStatus(ids, status, null);
+    }
+
+    /**
+     * 修改会员-项目关系 状态(带操作人信息)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean batchUpdateStatus(List<Long> ids, int status, String operatorInfo) {
         if (Objects.isNull(ids) || ids.isEmpty()) {
             throw new CustomException("请先选择会员");
         }
+        log.info("[fs_user_company_user] batchUpdateStatus | status={}, ids={}, operatorInfo={}, 调用来源={}",
+                status, ids, operatorInfo, Thread.currentThread().getStackTrace()[2]);
+        // status=2拉黑时,逐条追加拉黑备注
+        if (status == 2) {
+            String blackRemark = (operatorInfo != null ? operatorInfo : "系统") + "拉黑";
+            for (Long id : ids) {
+                FsUserCompanyUser old = baseMapper.selectFsUserCompanyUserById(id);
+                if (old != null) {
+                    String originRemark = old.getRemark() != null ? old.getRemark() : "";
+                    FsUserCompanyUser update = new FsUserCompanyUser();
+                    update.setId(old.getId());
+                    update.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                    baseMapper.updateFsUserCompanyUser(update);
+                }
+            }
+        }
         return baseMapper.batchUpdateStatus(ids, status) > 0;
     }
 

+ 18 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsUserCompanyUserScrmService.java

@@ -127,6 +127,15 @@ public interface IFsUserCompanyUserScrmService extends IService<FsUserCompanyUse
      */
     Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status);
 
+    /**
+     * 修改会员-项目关系 状态(带操作人信息,status=2时写入remark)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status, String operatorInfo);
+
     /**
      * 修改会员-项目关系 状态
      * @param ids       参数
@@ -134,4 +143,13 @@ public interface IFsUserCompanyUserScrmService extends IService<FsUserCompanyUse
      * @return Boolean
      */
     Boolean batchUpdateStatus(List<Long> ids, int status);
+
+    /**
+     * 修改会员-项目关系 状态(带操作人信息,status=2时写入remark)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    Boolean batchUpdateStatus(List<Long> ids, int status, String operatorInfo);
 }

+ 76 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsUserCompanyUserScrmServiceImpl.java

@@ -8,6 +8,7 @@ import com.fs.hisStore.domain.FsUserCompanyUserScrm;
 import com.fs.hisStore.mapper.FsUserCompanyUserScrmMapper;
 import com.fs.hisStore.service.IFsUserCompanyUserScrmService;
 import com.fs.qw.dto.UserProjectDTO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -21,6 +22,7 @@ import java.util.Objects;
  * @author fs
  * @date 2025-05-09
  */
+@Slf4j
 @Service
 public class FsUserCompanyUserScrmServiceImpl extends ServiceImpl<FsUserCompanyUserScrmMapper, FsUserCompanyUserScrm> implements IFsUserCompanyUserScrmService {
 
@@ -80,6 +82,22 @@ public class FsUserCompanyUserScrmServiceImpl extends ServiceImpl<FsUserCompanyU
     @Override
     public int updateFsUserCompanyUser(FsUserCompanyUserScrm fsUserCompanyUser)
     {
+        // 先查旧值,记录变更日志
+        if (fsUserCompanyUser.getId() != null) {
+            FsUserCompanyUserScrm old = baseMapper.selectFsUserCompanyUserById(fsUserCompanyUser.getId());
+            if (old != null && fsUserCompanyUser.getStatus() != null && !fsUserCompanyUser.getStatus().equals(old.getStatus())) {
+                log.info("[fs_user_company_user] Scrm status变更 | id={}, userId={}, companyUserId={}, projectId={}, oldStatus={}, newStatus={}, 调用来源={}",
+                        old.getId(), old.getUserId(), old.getCompanyUserId(), old.getProjectId(),
+                        old.getStatus(), fsUserCompanyUser.getStatus(),
+                        Thread.currentThread().getStackTrace()[2]);
+                // status=2拉黑时,在remark中追加拉黑信息
+                if (fsUserCompanyUser.getStatus() == 2) {
+                    String blackRemark = "系统拉黑(原status=" + old.getStatus() + ")";
+                    String originRemark = fsUserCompanyUser.getRemark() != null ? fsUserCompanyUser.getRemark() : (old.getRemark() != null ? old.getRemark() : "");
+                    fsUserCompanyUser.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                }
+            }
+        }
         return baseMapper.updateFsUserCompanyUser(fsUserCompanyUser);
     }
 
@@ -166,6 +184,8 @@ public class FsUserCompanyUserScrmServiceImpl extends ServiceImpl<FsUserCompanyU
      */
     @Override
     public FsUserCompanyUserScrm bindRelationship(Long userId, Long projectId, Long companyId, Long companyUserId, int status) {
+        log.info("[fs_user_company_user] Scrm bindRelationship | userId={}, projectId={}, companyId={}, companyUserId={}, status={}",
+                userId, projectId, companyId, companyUserId, status);
         FsUserCompanyUserScrm userCompanyUser = new FsUserCompanyUserScrm();
         userCompanyUser.setUserId(userId);
         userCompanyUser.setProjectId(projectId);
@@ -209,9 +229,37 @@ public class FsUserCompanyUserScrmServiceImpl extends ServiceImpl<FsUserCompanyU
      */
     @Override
     public Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status) {
+        return batchUpdateUserProjectStatus(ids, status, null);
+    }
+
+    /**
+     * 修改会员-项目关系 状态(带操作人信息)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean batchUpdateUserProjectStatus(List<UserProjectDTO> ids, int status, String operatorInfo) {
         if (Objects.isNull(ids) || ids.isEmpty()) {
             throw new CustomException("请先选择会员");
         }
+        log.info("[fs_user_company_user] Scrm batchUpdateUserProjectStatus | status={}, ids={}, operatorInfo={}, 调用来源={}",
+                status, ids, operatorInfo, Thread.currentThread().getStackTrace()[2]);
+        // status=2拉黑时,逐条追加拉黑备注
+        if (status == 2) {
+            String blackRemark = (operatorInfo != null ? operatorInfo : "系统") + "拉黑";
+            for (UserProjectDTO dto : ids) {
+                FsUserCompanyUserScrm old = selectByUserIdAndProjectId(dto.getUserId(), dto.getProjectId());
+                if (old != null) {
+                    String originRemark = old.getRemark() != null ? old.getRemark() : "";
+                    FsUserCompanyUserScrm update = new FsUserCompanyUserScrm();
+                    update.setId(old.getId());
+                    update.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                    baseMapper.updateFsUserCompanyUser(update);
+                }
+            }
+        }
         return baseMapper.changeUserProjectStatus(ids, status) > 0;
     }
 
@@ -225,9 +273,37 @@ public class FsUserCompanyUserScrmServiceImpl extends ServiceImpl<FsUserCompanyU
      */
     @Override
     public Boolean batchUpdateStatus(List<Long> ids, int status) {
+        return batchUpdateStatus(ids, status, null);
+    }
+
+    /**
+     * 修改会员-项目关系 状态(带操作人信息)
+     * @param ids           参数
+     * @param status        状态 0小黑屋 1正常 2拉黑
+     * @param operatorInfo  操作人信息
+     * @return Boolean
+     */
+    @Override
+    public Boolean batchUpdateStatus(List<Long> ids, int status, String operatorInfo) {
         if (Objects.isNull(ids) || ids.isEmpty()) {
             throw new CustomException("请先选择会员");
         }
+        log.info("[fs_user_company_user] Scrm batchUpdateStatus | status={}, ids={}, operatorInfo={}, 调用来源={}",
+                status, ids, operatorInfo, Thread.currentThread().getStackTrace()[2]);
+        // status=2拉黑时,逐条追加拉黑备注
+        if (status == 2) {
+            String blackRemark = (operatorInfo != null ? operatorInfo : "系统") + "拉黑";
+            for (Long id : ids) {
+                FsUserCompanyUserScrm old = baseMapper.selectFsUserCompanyUserById(id);
+                if (old != null) {
+                    String originRemark = old.getRemark() != null ? old.getRemark() : "";
+                    FsUserCompanyUserScrm update = new FsUserCompanyUserScrm();
+                    update.setId(old.getId());
+                    update.setRemark(originRemark + (originRemark.isEmpty() ? "" : "|") + blackRemark);
+                    baseMapper.updateFsUserCompanyUser(update);
+                }
+            }
+        }
         return baseMapper.batchUpdateStatus(ids, status) > 0;
     }
 }

+ 3 - 1
fs-service/src/main/java/com/fs/im/service/impl/OpenIMServiceImpl.java

@@ -604,7 +604,9 @@ public class OpenIMServiceImpl implements OpenIMService {
                 update.setStatus(2);
                 update.setUserId(userId);
                 update.setCompanyUserId(companyUserId);
-                update.setRemark(remark);
+                update.setRemark(remark + "|IM删除好友拉黑");
+                log.info("[fs_user_company_user] IM删除好友触发拉黑 | userId={}, companyUserId={}, remark={}, 调用来源={}",
+                        userId, companyUserId, remark, Thread.currentThread().getStackTrace()[2]);
                 fsUserCompanyUserMapper.updateFriendStatus(update);
 
             }