Browse Source

feat: 根据关键字搜索好友

xdd 1 day ago
parent
commit
e4fd6af9f4

+ 12 - 0
fs-service/src/main/java/com/fs/his/dto/FindUsersByDTO.java

@@ -0,0 +1,12 @@
+package com.fs.his.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FindUsersByDTO implements Serializable {
+    private Long id;
+    private Long type;
+    private String name;
+}

+ 4 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -8,6 +8,8 @@ import com.fs.course.domain.FsUserWatchStatistics;
 import com.fs.course.param.CourseAnalysisParam;
 import com.fs.course.vo.newfs.FsCourseAnalysisCountVO;
 import com.fs.his.domain.FsUser;
+import com.fs.his.dto.FindUsersByDTO;
+import com.fs.his.param.FindUserByParam;
 import com.fs.his.param.FsUserParam;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.FsUserExportListVO;
@@ -395,4 +397,6 @@ public interface FsUserMapper
     List<FsCompanyUserListQueryVO> selectFsCompanyUserListQuery(@Param("maps")FsUser fsUser);
 
     List<FsUser> selectFsUserListLimit(FsUser fsUser);
+
+    List<FindUsersByDTO> findUsersByParam(FindUserByParam param);
 }

+ 12 - 0
fs-service/src/main/java/com/fs/his/param/FindUserByParam.java

@@ -0,0 +1,12 @@
+package com.fs.his.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FindUserByParam implements Serializable {
+    private Integer pageNum;
+    private Integer pageSize;
+    private String keywords;
+}

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -12,6 +12,8 @@ import com.fs.course.param.newfs.FsUserCourseBeMemberParam;
 import com.fs.course.vo.newfs.FsCourseAnalysisVO;
 import com.fs.his.domain.FsUser;
 import com.fs.his.domain.FsUserAddress;
+import com.fs.his.dto.FindUsersByDTO;
+import com.fs.his.param.FindUserByParam;
 import com.fs.his.param.FsUserParam;
 import com.fs.his.vo.FsUserVO;
 import com.fs.his.vo.FsUserExportListVO;
@@ -46,6 +48,12 @@ public interface IFsUserService
      */
     public FsUser selectFsUserByUserId(Long userId);
 
+    /**
+     * 通过参数查找用户
+     * @param param 参数
+     * @return 用户列表
+     */
+    public List<FindUsersByDTO> findUserByParam(FindUserByParam param);
     /**
      * 查询用户列表
      *

+ 7 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -40,8 +40,10 @@ import com.fs.his.config.IntegralConfig;
 import com.fs.his.domain.*;
 import com.fs.his.domain.FsUserAddress;
 import com.fs.his.domain.FsUserIntegralLogs;
+import com.fs.his.dto.FindUsersByDTO;
 import com.fs.his.enums.FsUserIntegralLogTypeEnum;
 import com.fs.his.mapper.*;
+import com.fs.his.param.FindUserByParam;
 import com.fs.his.param.FsUserAddIntegralTemplateParam;
 import com.fs.his.param.FsUserParam;
 import com.fs.his.service.IFsUserIntegralLogsService;
@@ -173,6 +175,11 @@ public class FsUserServiceImpl implements IFsUserService
         return fsUserMapper.selectFsUserByUserId(userId);
     }
 
+    @Override
+    public List<FindUsersByDTO> findUserByParam(FindUserByParam param) {
+        return fsUserMapper.findUsersByParam(param);
+    }
+
     /**
      * 查询用户列表
      *

+ 38 - 0
fs-service/src/main/resources/mapper/his/FsUserMapper.xml

@@ -1891,4 +1891,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by user_id desc
         limit 10
     </select>
+    <select id="findUsersByParam" resultType="com.fs.his.dto.FindUsersByDTO">
+        SELECT user_id as id, 0 as type,
+        CONCAT(user_id, '_', IFNULL(nick_name, '')) as name
+        FROM fs_user
+        WHERE user_id = #{keywords}
+        UNION
+        <!-- fs_user 按nick_name前缀搜索 -->
+        SELECT user_id as id, 0 as type,
+        CONCAT(user_id, '_', IFNULL(nick_name, '')) as name
+        FROM fs_user
+        WHERE nick_name LIKE CONCAT(#{keywords}, '%')
+        UNION
+        <!-- fs_user 按phone精确搜索(仅当keywords是数字时) -->
+        <if test="keywords.matches('\\d+')">
+            SELECT user_id as id, 0 as type,
+            CONCAT(user_id, '_', IFNULL(nick_name, '')) as name
+            FROM fs_user
+            WHERE phone = #{keywords}
+            UNION
+        </if>
+        <!-- company_user相关查询 -->
+        SELECT user_id as id, 1 as type,
+        IFNULL(nick_name, '') as name
+        FROM company_user
+        WHERE user_id = #{keywords}
+        UNION
+        SELECT user_id as id, 1 as type,
+        IFNULL(nick_name, '') as name
+        FROM company_user
+        WHERE nick_name LIKE CONCAT(#{keywords}, '%')
+        <if test="keywords.matches('\\d+')">
+            UNION
+            SELECT user_id as id, 1 as type,
+            IFNULL(nick_name, '') as name
+            FROM company_user
+            WHERE phonenumber = #{keywords}
+        </if>
+    </select>
 </mapper>

+ 32 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -1,8 +1,10 @@
 package com.fs.app.controller;
 
 
+import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.app.annotation.Login;
+import com.fs.app.param.FriendsSearchParam;
 import com.fs.app.param.FsDoctorRegisterParam;
 import com.fs.app.param.FsUserEditParam;
 import com.fs.common.core.domain.R;
@@ -14,12 +16,15 @@ import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.his.domain.FsDoctor;
 import com.fs.his.domain.FsPackage;
 import com.fs.his.domain.FsUser;
+import com.fs.his.dto.FindUsersByDTO;
+import com.fs.his.param.FindUserByParam;
 import com.fs.his.param.FsUserCouponUParam;
 import com.fs.his.param.FsUserEditPushParam;
 import com.fs.his.service.IFsDoctorService;
 import com.fs.his.service.IFsPackageService;
 import com.fs.his.service.IFsUserCouponService;
 import com.fs.his.service.IFsUserService;
+import com.fs.his.utils.PhoneUtil;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.his.vo.FsDoctorListUVO;
 import com.fs.his.vo.FsUserCouponCountUVO;
@@ -31,12 +36,14 @@ import com.fs.system.oss.OSSFactory;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.google.zxing.WriterException;
+import io.jsonwebtoken.lang.Assert;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.parameters.P;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -77,6 +84,31 @@ public class UserController extends  AppBaseController {
     @Autowired
     private IFsUserCourseVideoService courseVideoService;
 
+
+    @Autowired
+    private IFsUserService fsUserService;
+    @Login
+    @ApiOperation("获取用户信息")
+    @PostMapping("/friendsSearch")
+    public R friendsSearch(@RequestBody FindUserByParam param){
+        if(param.getPageNum() == null) {
+            throw new IllegalArgumentException("分页参数 pageNum 不能为空!");
+        }
+        if(param.getPageSize() == null) {
+            throw new IllegalArgumentException("分页参数 pageSize 不能为空!");
+        }
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+
+        if(StringUtils.isNotBlank(param.getKeywords())){
+            if(Validator.isMobile(param.getKeywords())) {
+                param.setKeywords(PhoneUtil.encryptPhone(param.getKeywords()));
+            }
+        }
+        List<FindUsersByDTO> list = fsUserService.findUserByParam(param);
+        PageInfo<FindUsersByDTO> listPageInfo=new PageInfo<>(list);
+
+        return R.ok().put("data", listPageInfo);
+    }
     /**
      * 获取用户信息
      * @param request

+ 10 - 0
fs-user-app/src/main/java/com/fs/app/param/FriendsSearchParam.java

@@ -0,0 +1,10 @@
+package com.fs.app.param;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class FriendsSearchParam implements Serializable {
+    private String keyword;
+}