Explorar el Código

1 登录、修改用户调整;2 企微用户外部联系人列表、黑名单列表

caoliqin hace 2 meses
padre
commit
d8735bef16

+ 51 - 0
fs-company-app/src/main/java/com/fs/app/controller/QwController.java

@@ -0,0 +1,51 @@
+package com.fs.app.controller;
+
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.course.param.newfs.UserCourseVideoPageParam;
+import com.fs.course.service.IFsUserCourseVideoService;
+import com.fs.course.vo.newfs.FsUserCourseVideoPageListVO;
+import com.fs.qw.param.newqw.QwExternalContactPageListParam;
+import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.vo.newqw.QwExternalContactListVo;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+@Api("企微相关接口")
+@RestController
+@RequestMapping("/fsUser")
+public class QwController extends AppBaseController {
+
+    @Autowired
+    private IQwExternalContactService qwExternalContactService;
+
+    @PostMapping("/getFsUserList")
+    public R pageList(@RequestBody QwExternalContactPageListParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        param.setIsBlack(false);
+        List<QwExternalContactListVo> list = qwExternalContactService.selectQwExternalContactPageList(param);
+        PageInfo<QwExternalContactListVo> pageInfo = new PageInfo<>(list);
+        return R.ok().put("data", pageInfo);
+    }
+
+    @PostMapping("/getBlackUserList")
+    public R pageListBlack(@RequestBody QwExternalContactPageListParam param) {
+        param.setUserId(Long.parseLong(getUserId()));
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        param.setIsBlack(true);
+        List<QwExternalContactListVo> list = qwExternalContactService.selectQwExternalContactPageList(param);
+        PageInfo<QwExternalContactListVo> pageInfo = new PageInfo<>(list);
+        return R.ok().put("data", pageInfo);
+    }
+
+}

+ 515 - 452
fs-company-app/src/main/java/com/fs/app/controller/UserController.java

@@ -57,467 +57,530 @@ import java.io.InputStream;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+
 import static com.fs.common.constant.Constants.PAGE_SIZE;
 
 @Api("个人中心")
 @RestController
-@RequestMapping(value="/app/user")
-public class UserController extends  AppBaseController {
+@RequestMapping(value = "/app/user")
+public class UserController extends AppBaseController {
 
-	@Autowired
-	private FSConfig fsConfig;
-	@Autowired
+    @Autowired
+    private FSConfig fsConfig;
+    @Autowired
     JwtUtils jwtUtils;
-	@Autowired
-	ICompanyUserService userService;
-	@Autowired
-	ICompanyPostService postService;
-	@Autowired
-	ICompanyMenuService menuService;
-	@Autowired
-	private ICompanyService companyService;
-	@Autowired
-	RedisCache redisCache;
-	@Autowired
-	ICompanyUserService companyUserService;
-
-	@Autowired
-	ICompanyUserCardService companyUserCardService;
-
-	@Autowired
-	private WxMaProperties properties;
-	private String aifabuAppId="7b471be905ab17e00f3b858c6710dd117601d008";
-
-	@PostMapping("/loginByPwd")
-	@ApiOperation("密码登录")
-	public R loginByPwd(@Validated @RequestBody LoginParam param){
-		try {
-
-			CompanyUser companyUser=userService.selectUserByUserName(param.getUserName());
-			if(companyUser==null){
-				return R.error("工号不存在");
-			}
-			if(companyUser.getStatus().equals("1")){
-				return R.error("用户已禁用");
-			}
-			if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
-				return R.error("密码错误");
-			}
-			Company company=companyService.selectCompanyById(companyUser.getCompanyId()) ;
-			if(company==null||company.getStatus()==0||company.getIsDel()==1){
-				throw new BaseException("此用户所属公司不存在或已停用");
-			}
-			if(StringUtils.isNotEmpty(param.getJpushId())){
-				companyUser.setJpushId(param.getJpushId());
-				userService.updateUserProfile(companyUser);
-			}
-			//生成token
-			String token = jwtUtils.generateToken(companyUser.getUserId());
-			//调用REDIS生成用户的TOKEN
-
-			//redisCache.setCacheObject("token:"+companyUser.getUserId(),token,2592000, TimeUnit.SECONDS);
-			//redisCache.setCacheObject("companyId:"+companyUser.getUserId(),companyUser.getCompanyId(),2592000, TimeUnit.SECONDS);
-
-			redisCache.setCacheObject("token:"+companyUser.getUserId(),token,604800, TimeUnit.SECONDS);
-			redisCache.setCacheObject("companyId:"+companyUser.getUserId(),companyUser.getCompanyId(),604800, TimeUnit.SECONDS);
-
-			//获取权限
-			Set<String> perms = new HashSet<String>();
-			// 管理员拥有所有权限
-			if (companyUser.isAdmin())
-			{
-				perms.add("*:*:*");
-			}
-			else
-			{
-				perms.addAll(menuService.selectMenuPermsByUserId(companyUser.getUserId()));
-			}
-
-			//redisCache.setCacheObject("perms:"+companyUser.getUserId(), JSONUtil.toJsonStr(perms),2592000, TimeUnit.SECONDS);
-			redisCache.setCacheObject("perms:"+companyUser.getUserId(), JSONUtil.toJsonStr(perms),604800, TimeUnit.SECONDS);
-
-			Map<String ,Object> result=new HashMap<>();
-			result.put("token",token);
-			result.put("user",companyUser);
-			result.put("perms",perms);
-			return R.ok("登录成功").put("data",result);
-		} catch (Exception e) {
-			return R.error("登录异常");
-		}
-	}
-
-	/**
-	 * 获取用户信息
-	 * @param request
-	 * @return
-	 */
-	@Login
-	@ApiOperation("获取用户信息")
-	@GetMapping("/getUserInfo")
-	public R getUserInfo(HttpServletRequest request){
-		try {
-			CompanyUser companyUser=userService.selectCompanyUserById(Long.parseLong(getUserId()));
-			List<String> postList=postService.selectPostNameListByUserId(Long.parseLong(getUserId()));
-			if(companyUser==null){
-				return R.error(40001,"用户不存在");
-			}
-			if(companyUser.getStatus().equals("1")){
-				return R.error(40002,"用户已停用");
-			}
-			return R.ok().put("user",companyUser).put("post",postList);
-		} catch (Exception e){
-
-			return R.error("操作异常");
-		}
-	}
-
-	@Login
-	@ApiOperation("检测是否登录")
-	@GetMapping("/checkLogin")
-	public R checkLogin(HttpServletRequest request){
-		return R.ok("认证成功");
-	}
-
-
-	@Login
-	@ApiOperation("获取通讯录")
-	@GetMapping("/getAllUsers")
-	public R getAllUsers(HttpServletRequest request, @ApiParam(required = false, name = "searchKey", value = "searchKey") @RequestParam(value = "searchKey", required = false) String searchKey){
-		CompanyUser user=new CompanyUser();
-		user.setNickName(searchKey);
-		user.setCompanyId(getCompanyId());
-		user.setIsDel(0);
-		List<CompanyUserVO> list = userService.selectMyUserList(user);
-		List<UserVO> users=new ArrayList<>();
-		for(CompanyUserVO u:list){
-			UserVO vo=new UserVO();
-			vo.setDeptName(u.getDept().getDeptName());
-			vo.setFirstLetter(PinYinUtil.cn2py(u.getNickName().substring(0,1)));
-			vo.setNickName(u.getNickName());
-			vo.setUserId(u.getUserId());
-			vo.setAvatar(u.getAvatar());
-			users.add(vo);
-		}
-		Map<Object, List<UserVO>> res = users.parallelStream().collect(
-				Collectors.groupingBy(
-						item->{return Character.toUpperCase(item.getFirstLetter().charAt(0));},//根据首字母分组
-						TreeMap::new,//有序map实现排序
-						Collectors.toList()
-				)
-		);
-		List<UserListVO> vos=res.entrySet().stream().map(e -> new UserListVO(e.getKey().toString(),e.getValue())).collect(Collectors.toList());
-		return R.ok( ).put("users",vos);
-	}
-
-	@Login
-	@ApiOperation("获取用户信息ByUserId")
-	@GetMapping("/getUserInfoByUserId")
-	public R getUserInfoByUserId(
-			@ApiParam(required = true, name = "userId", value = "用户ID") @RequestParam(value = "userId", required = false) Long userId,
-			HttpServletRequest request){
-		try {
-			CompanyUser user=userService.selectCompanyUserById(userId);
-			List<String> postList=postService.selectPostNameListByUserId(userId);
-			if(user==null){
-				return R.error(40001,"用户不存在");
-			}
-			if(user.getStatus().equals("1")){
-				return R.error(40002,"用户已停用");
-			}
-			return R.ok().put("user",user).put("post",postList);
-		} catch (Exception e){
-
-			return R.error("操作异常");
-		}
-	}
-
-	@Login
-	@ApiOperation("修改密码")
-	@PostMapping("/setPwd")
-	public R setPwd(HttpServletRequest request,@RequestBody EditPwdParam param){
-		try {
-
-			CompanyUser user=userService.selectCompanyUserById(Long.parseLong(getUserId()));
-			if (!SecurityUtils.matchesPassword(param.getOldPassword(), user.getPassword()))
-			{
-				return R.error("旧密码错误");
-			}
-			if (SecurityUtils.matchesPassword(param.getOldPassword(), param.getPassword()))
-			{
-				return R.error("新密码不能与旧密码相同");
-			}
-			if (userService.resetUserPwd(user.getUserName(), SecurityUtils.encryptPassword(param.getPassword())) > 0)
-			{
-				return R.ok("密码修改成功");
-			}
-			else{
-				return R.error("密码修改失败");
-			}
-		} catch (Exception e) {
-
-			return R.error("操作异常"+e.getMessage());
-		}
-	}
-	/**
-	 * 修改头像
-	 * @param request
-	 * @param headImg
-	 * @return
-	 */
-	@Login
-	@ApiOperation("修改头像")
-	@PostMapping("/setHeadImg")
-	public R setHeadImg(HttpServletRequest request,
-						@ApiParam(required=true,name="headImg",value="用户头像")@RequestParam(value="headImg",required=false)String headImg){
-		try {
-			CompanyUser user=userService.selectCompanyUserById(Long.parseLong(getUserId()));
-			if(user==null){
-				return R.error("用户不存在");
-			}
-			if(user.getStatus().equals("1")){
-				return R.error("用户已禁用");
-			}
-			CompanyUser map=new CompanyUser();
-			map.setUserId(user.getUserId());
-			if(userService.updateUserAvatar(user.getUserName(),headImg)>0){
-				return R.ok("修改成功");
-			} else {
-				return R.error("修改失败");
-			}
-		} catch (Exception e) {
-
-			return R.error("操作异常");
-		}
-	}
-
-	/**
-	 * 修改用户信息
-	 * @return
-	 */
-	@Login
-	@ApiOperation("修改用户信息")
-	@PostMapping("/setUserInfo")
-	public R setUserInfo(HttpServletRequest request,@RequestBody EditUserInfoParam param){
-		try {
-
-			CompanyUser user=userService.selectCompanyUserById(Long.parseLong(getUserId()));
-			if(user==null){
-				return R.error("用户不存在");
-			}
-			if(user.getStatus().equals("1")){
-				return R.error("用户已禁用");
-			}
-			user.setAvatar(param.getHeadImg());
-			if(!Validator.isMobile(param.getMobile())){
-				return R.error("手机号不正确");
-			}
-			if(!Validator.isEmail(param.getEmail())){
-				return R.error("邮箱格式不正确");
-			}
-			user.setPhonenumber(param.getMobile());
-			user.setEmail(param.getEmail());
-			user.setSex(param.getSex());
-			if(userService.updateUserProfile(user)>0){
-				return R.ok("修改成功");
-			} else {
-				return R.error("修改失败");
-			}
-
-		} catch (Exception e) {
-
-			return R.error("操作异常"+e.getMessage());
-		}
-	}
-
-	@Login
-	@ApiOperation("修改二维码")
-	@PostMapping("/editQrCode")
-	@RepeatSubmit
-	public R editQrCode(HttpServletRequest request,@RequestBody EditUserQrCodeParam param){
-		try {
-			CompanyUser user=userService.selectCompanyUserById(Long.parseLong(getUserId()));
-			if(user==null){
-				return R.error("用户不存在");
-			}
-			if(user.getStatus().equals("1")){
-				return R.error("用户已禁用");
-			}
-			  //个人微信
-			  CompanyUserCard companyUserCard=null;
-			  if(param.getCardId()==null){   //添加名片
-					companyUserCard=new CompanyUserCard();
-					companyUserCard.setUserId(Long.parseLong(getUserId()));
-					companyUserCard.setCompanyId(getCompanyId());
-					companyUserCard.setTitle(param.getTitle());
-					companyUserCard.setCreateTime(new Date());
-					companyUserCard.setType((long)param.getType());
-					companyUserCard.setImageUrl(param.getQrCodeWeixin());
-					int rows=companyUserCardService.insertCompanyUserCard(companyUserCard);
-					if(rows>0){
-						String shorUrl=this.getShortUrlAction(companyUserCard.getId(),param.getTitle());
-						companyUserCard.setShortUrl(shorUrl);
-						if(companyUserCardService.updateUserCardShortUrlById(companyUserCard.getId(),shorUrl)>0){
-							return R.ok("修改成功");
-						}
-					}
-					return R.error("修改失败");
-				}
-			  else{
-					companyUserCard=companyUserCardService.selectCompanyUserCardById(param.getCardId());
-					companyUserCard.setImageUrl(param.getQrCodeWeixin());
-					companyUserCard.setUpdateTime(new Date());
-					if(companyUserCardService.updateCompanyUserCard(companyUserCard)>0){
-						return R.ok("修改成功");
-					}else{
-						return R.error("修改失败");
-					}
-			  }
-
-		} catch (Exception e) {
-			return R.error("操作异常"+e.getMessage());
-		}
-	}
-
-	@Login
-	@ApiOperation("获取我的名片列表")
-	@GetMapping("/getMyCardList")
-	public R getMyCardList(CompanyUserCardQueryParam param)
-	{
-		PageHelper.startPage(param.getPage(), PAGE_SIZE);
-		param.setCompanyId(getCompanyId());
-		param.setCompanyUserId(Long.parseLong(getUserId()));
-		List<CompanyUserCard> list = companyUserCardService.selectMyCardListQuery(param);
-		PageInfo<CompanyUserCard> listPageInfo=new PageInfo<>(list);
-		return R.ok().put("data",listPageInfo);
-	}
-
-
-	@Login
-	@ApiOperation("删除名片")
-	@PostMapping("/delMyCard")
-	public R delMyCard(@RequestParam("cardId") Long cardId)
-	{
-		try {
-			CompanyUserCard companyUserCard=companyUserCardService.selectCompanyUserCardById(cardId);
-			String shortUrl=companyUserCard.getShortUrl();
-			String[] chainArr=shortUrl.split(".cn/");
-			String chain="";
-			if(chainArr.length==2){
-				chain=chainArr[1];
-			}
-			if(StringUtils.isNotEmpty(chain)){
-				JSONObject jsonObject = new JSONObject();
-				jsonObject.put("apikey",aifabuAppId);
-				String[] chains=new String[1];
-				chains[0]=chain;
-				jsonObject.put("chains","["+chain+"]");
-				String paramStr=jsonObject.toJSONString();
-				String postUrl="https://openapi.aifabu.com/v1/chain/delChain?apikey="+aifabuAppId+"&chains="+"["+chain+"]";
-				String postStr = HttpUtils.doPost(postUrl,paramStr);
-				JSONObject obj = JSONObject.parseObject(postStr);
+    @Autowired
+    ICompanyUserService userService;
+    @Autowired
+    ICompanyPostService postService;
+    @Autowired
+    ICompanyMenuService menuService;
+    @Autowired
+    private ICompanyService companyService;
+    @Autowired
+    RedisCache redisCache;
+    @Autowired
+    ICompanyUserService companyUserService;
+
+    @Autowired
+    ICompanyUserCardService companyUserCardService;
+
+    @Autowired
+    private WxMaProperties properties;
+    private String aifabuAppId = "7b471be905ab17e00f3b858c6710dd117601d008";
+
+//	@PostMapping("/loginByPwd")
+//	@ApiOperation("密码登录")
+//	public R loginByPwd(@Validated @RequestBody LoginParam param){
+//		try {
+//
+//			CompanyUser companyUser=userService.selectUserByUserName(param.getUserName());
+//			if(companyUser==null){
+//				return R.error("工号不存在");
+//			}
+//			if(companyUser.getStatus().equals("1")){
+//				return R.error("用户已禁用");
+//			}
+//			if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
+//				return R.error("密码错误");
+//			}
+//			Company company=companyService.selectCompanyById(companyUser.getCompanyId()) ;
+//			if(company==null||company.getStatus()==0||company.getIsDel()==1){
+//				throw new BaseException("此用户所属公司不存在或已停用");
+//			}
+//			if(StringUtils.isNotEmpty(param.getJpushId())){
+//				companyUser.setJpushId(param.getJpushId());
+//				userService.updateUserProfile(companyUser);
+//			}
+//			//生成token
+//			String token = jwtUtils.generateToken(companyUser.getUserId());
+//			//调用REDIS生成用户的TOKEN
+//
+//			//redisCache.setCacheObject("token:"+companyUser.getUserId(),token,2592000, TimeUnit.SECONDS);
+//			//redisCache.setCacheObject("companyId:"+companyUser.getUserId(),companyUser.getCompanyId(),2592000, TimeUnit.SECONDS);
+//
+//			redisCache.setCacheObject("token:"+companyUser.getUserId(),token,604800, TimeUnit.SECONDS);
+//			redisCache.setCacheObject("companyId:"+companyUser.getUserId(),companyUser.getCompanyId(),604800, TimeUnit.SECONDS);
+//
+//			//获取权限
+//			Set<String> perms = new HashSet<String>();
+//			// 管理员拥有所有权限
+//			if (companyUser.isAdmin())
+//			{
+//				perms.add("*:*:*");
+//			}
+//			else
+//			{
+//				perms.addAll(menuService.selectMenuPermsByUserId(companyUser.getUserId()));
+//			}
+//
+//			//redisCache.setCacheObject("perms:"+companyUser.getUserId(), JSONUtil.toJsonStr(perms),2592000, TimeUnit.SECONDS);
+//			redisCache.setCacheObject("perms:"+companyUser.getUserId(), JSONUtil.toJsonStr(perms),604800, TimeUnit.SECONDS);
+//
+//			Map<String ,Object> result=new HashMap<>();
+//			result.put("token",token);
+//			result.put("user",companyUser);
+//			result.put("perms",perms);
+//			return R.ok("登录成功").put("data",result);
+//		} catch (Exception e) {
+//			return R.error("登录异常");
+//		}
+//	}
+
+    @PostMapping("/login")
+    @ApiOperation("密码登录")
+    public R login(@Validated @RequestBody LoginParam param) {
+        try {
+            //判断用户基本规则
+            CompanyUser companyUser = userService.selectUserByUserName(param.getAccount());
+            if (companyUser == null) {
+                return R.error("工号不存在");
+            }
+            if (companyUser.getStatus().equals("1")) {
+                return R.error("用户已禁用");
+            }
+            if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
+                return R.error("密码错误");
+            }
+            Company company = companyService.selectCompanyById(companyUser.getCompanyId());
+            if (company == null || company.getStatus() == 0 || company.getIsDel() == 1) {
+                throw new BaseException("此用户所属公司不存在或已停用");
+            }
+            if (StringUtils.isNotEmpty(param.getJpushId())) {
+                companyUser.setJpushId(param.getJpushId());
+                userService.updateUserProfile(companyUser);
+            }
+            //生成token
+            String token = jwtUtils.generateToken(companyUser.getUserId());
+            //调用REDIS生成用户的TOKEN
+
+            redisCache.setCacheObject("token:" + companyUser.getUserId(), token, 604800, TimeUnit.SECONDS);
+            redisCache.setCacheObject("companyId:" + companyUser.getUserId(), companyUser.getCompanyId(), 604800, TimeUnit.SECONDS);
+
+            //获取权限
+            Set<String> perms = new HashSet<String>();
+            // 管理员拥有所有权限
+            if (companyUser.isAdmin()) {
+                perms.add("*:*:*");
+            } else {
+                perms.addAll(menuService.selectMenuPermsByUserId(companyUser.getUserId()));
+            }
+
+            //redisCache.setCacheObject("perms:"+companyUser.getUserId(), JSONUtil.toJsonStr(perms),2592000, TimeUnit.SECONDS);
+            redisCache.setCacheObject("perms:" + companyUser.getUserId(), JSONUtil.toJsonStr(perms), 604800, TimeUnit.SECONDS);
+
+            Map<String, Object> result = new HashMap<>();
+            result.put("token", token);
+            result.put("user", companyUser);
+            result.put("perms", perms);
+            return R.ok("登录成功").put("data", result);
+        } catch (Exception e) {
+            return R.error("登录异常");
+        }
+    }
+
+//    /**
+//     * 获取用户信息
+//     *
+//     * @param request
+//     * @return
+//     */
+//    @Login
+//    @ApiOperation("获取用户信息")
+//    @GetMapping("/getUserInfo")
+//    public R getUserInfo(HttpServletRequest request) {
+//        try {
+//            CompanyUser companyUser = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+//            List<String> postList = postService.selectPostNameListByUserId(Long.parseLong(getUserId()));
+//            if (companyUser == null) {
+//                return R.error(40001, "用户不存在");
+//            }
+//            if (companyUser.getStatus().equals("1")) {
+//                return R.error(40002, "用户已停用");
+//            }
+//            return R.ok().put("user", companyUser).put("post", postList);
+//        } catch (Exception e) {
+//
+//            return R.error("操作异常");
+//        }
+//    }
+
+    @Login
+    @ApiOperation("获取用户信息")
+    @GetMapping("/getCompanyUser")
+    public R getCompanyUser() {
+        try {
+            CompanyUser companyUser = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+            List<String> postList = postService.selectPostNameListByUserId(Long.parseLong(getUserId()));
+            if (companyUser == null) {
+                return R.error(40001, "用户不存在");
+            }
+            if (companyUser.getStatus().equals("1")) {
+                return R.error(40002, "用户已停用");
+            }
+            return R.ok().put("user", companyUser).put("post", postList);
+        } catch (Exception e) {
+
+            return R.error("操作异常");
+        }
+    }
+
+    @Login
+    @ApiOperation("检测是否登录")
+    @GetMapping("/checkLogin")
+    public R checkLogin(HttpServletRequest request) {
+        return R.ok("认证成功");
+    }
+
+
+    @Login
+    @ApiOperation("获取通讯录")
+    @GetMapping("/getAllUsers")
+    public R getAllUsers(HttpServletRequest request, @ApiParam(required = false, name = "searchKey", value = "searchKey") @RequestParam(value = "searchKey", required = false) String searchKey) {
+        CompanyUser user = new CompanyUser();
+        user.setNickName(searchKey);
+        user.setCompanyId(getCompanyId());
+        user.setIsDel(0);
+        List<CompanyUserVO> list = userService.selectMyUserList(user);
+        List<UserVO> users = new ArrayList<>();
+        for (CompanyUserVO u : list) {
+            UserVO vo = new UserVO();
+            vo.setDeptName(u.getDept().getDeptName());
+            vo.setFirstLetter(PinYinUtil.cn2py(u.getNickName().substring(0, 1)));
+            vo.setNickName(u.getNickName());
+            vo.setUserId(u.getUserId());
+            vo.setAvatar(u.getAvatar());
+            users.add(vo);
+        }
+        Map<Object, List<UserVO>> res = users.parallelStream().collect(
+                Collectors.groupingBy(
+                        item -> {
+                            return Character.toUpperCase(item.getFirstLetter().charAt(0));
+                        },//根据首字母分组
+                        TreeMap::new,//有序map实现排序
+                        Collectors.toList()
+                )
+        );
+        List<UserListVO> vos = res.entrySet().stream().map(e -> new UserListVO(e.getKey().toString(), e.getValue())).collect(Collectors.toList());
+        return R.ok().put("users", vos);
+    }
+
+    @Login
+    @ApiOperation("获取用户信息ByUserId")
+    @GetMapping("/getUserInfoByUserId")
+    public R getUserInfoByUserId(
+            @ApiParam(required = true, name = "userId", value = "用户ID") @RequestParam(value = "userId", required = false) Long userId,
+            HttpServletRequest request) {
+        try {
+            CompanyUser user = userService.selectCompanyUserById(userId);
+            List<String> postList = postService.selectPostNameListByUserId(userId);
+            if (user == null) {
+                return R.error(40001, "用户不存在");
+            }
+            if (user.getStatus().equals("1")) {
+                return R.error(40002, "用户已停用");
+            }
+            return R.ok().put("user", user).put("post", postList);
+        } catch (Exception e) {
+
+            return R.error("操作异常");
+        }
+    }
+
+    @Login
+    @ApiOperation("修改密码")
+    @PostMapping("/setPwd")
+    public R setPwd(HttpServletRequest request, @RequestBody EditPwdParam param) {
+        try {
+
+            CompanyUser user = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+            if (!SecurityUtils.matchesPassword(param.getOldPassword(), user.getPassword())) {
+                return R.error("旧密码错误");
+            }
+            if (SecurityUtils.matchesPassword(param.getOldPassword(), param.getPassword())) {
+                return R.error("新密码不能与旧密码相同");
+            }
+            if (userService.resetUserPwd(user.getUserName(), SecurityUtils.encryptPassword(param.getPassword())) > 0) {
+                return R.ok("密码修改成功");
+            } else {
+                return R.error("密码修改失败");
+            }
+        } catch (Exception e) {
+
+            return R.error("操作异常" + e.getMessage());
+        }
+    }
+
+    /**
+     * 修改头像
+     *
+     * @param request
+     * @param headImg
+     * @return
+     */
+    @Login
+    @ApiOperation("修改头像")
+    @PostMapping("/setHeadImg")
+    public R setHeadImg(HttpServletRequest request,
+                        @ApiParam(required = true, name = "headImg", value = "用户头像") @RequestParam(value = "headImg", required = false) String headImg) {
+        try {
+            CompanyUser user = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+            if (user == null) {
+                return R.error("用户不存在");
+            }
+            if (user.getStatus().equals("1")) {
+                return R.error("用户已停用");
+            }
+            CompanyUser map = new CompanyUser();
+            map.setUserId(user.getUserId());
+            if (userService.updateUserAvatar(user.getUserName(), headImg) > 0) {
+                return R.ok("修改成功");
+            } else {
+                return R.error("修改失败");
+            }
+        } catch (Exception e) {
+
+            return R.error("操作异常");
+        }
+    }
+
+
+    @Login
+    @ApiOperation("修改用户信息")
+    @PostMapping("/setUserInfo")
+    public R setUserInfo(HttpServletRequest request, @RequestBody EditUserInfoParam param) {
+        try {
+
+            CompanyUser user = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+            if (user == null) {
+                return R.error("用户不存在");
+            }
+            if (user.getStatus().equals("1")) {
+                return R.error("用户已停用");
+            }
+            if (param == null) {
+                return R.error("修改参数对象不能为空");
+            }
+            if (!Validator.isMobile(param.getMobile())) {
+                return R.error("手机号不正确");
+            }
+            if (!Validator.isEmail(param.getEmail())) {
+                return R.error("邮箱格式不正确");
+            }
+            user.setAvatar(param.getHeadImg());
+            user.setPhonenumber(param.getMobile());
+            user.setEmail(param.getEmail());
+            user.setSex(param.getSex());
+            if (userService.updateUserProfile(user) > 0) {
+                return R.ok("修改成功");
+            } else {
+                return R.error("修改失败");
+            }
+        } catch (Exception e) {
+            return R.error("操作异常" + e.getMessage());
+        }
+    }
+
+    @Login
+    @ApiOperation("修改二维码")
+    @PostMapping("/editQrCode")
+    @RepeatSubmit
+    public R editQrCode(HttpServletRequest request, @RequestBody EditUserQrCodeParam param) {
+        try {
+            CompanyUser user = userService.selectCompanyUserById(Long.parseLong(getUserId()));
+            if (user == null) {
+                return R.error("用户不存在");
+            }
+            if (user.getStatus().equals("1")) {
+                return R.error("用户已禁用");
+            }
+            //个人微信
+            CompanyUserCard companyUserCard = null;
+            if (param.getCardId() == null) {   //添加名片
+                companyUserCard = new CompanyUserCard();
+                companyUserCard.setUserId(Long.parseLong(getUserId()));
+                companyUserCard.setCompanyId(getCompanyId());
+                companyUserCard.setTitle(param.getTitle());
+                companyUserCard.setCreateTime(new Date());
+                companyUserCard.setType((long) param.getType());
+                companyUserCard.setImageUrl(param.getQrCodeWeixin());
+                int rows = companyUserCardService.insertCompanyUserCard(companyUserCard);
+                if (rows > 0) {
+                    String shorUrl = this.getShortUrlAction(companyUserCard.getId(), param.getTitle());
+                    companyUserCard.setShortUrl(shorUrl);
+                    if (companyUserCardService.updateUserCardShortUrlById(companyUserCard.getId(), shorUrl) > 0) {
+                        return R.ok("修改成功");
+                    }
+                }
+                return R.error("修改失败");
+            } else {
+                companyUserCard = companyUserCardService.selectCompanyUserCardById(param.getCardId());
+                companyUserCard.setImageUrl(param.getQrCodeWeixin());
+                companyUserCard.setUpdateTime(new Date());
+                if (companyUserCardService.updateCompanyUserCard(companyUserCard) > 0) {
+                    return R.ok("修改成功");
+                } else {
+                    return R.error("修改失败");
+                }
+            }
+
+        } catch (Exception e) {
+            return R.error("操作异常" + e.getMessage());
+        }
+    }
+
+    @Login
+    @ApiOperation("获取我的名片列表")
+    @GetMapping("/getMyCardList")
+    public R getMyCardList(CompanyUserCardQueryParam param) {
+        PageHelper.startPage(param.getPage(), PAGE_SIZE);
+        param.setCompanyId(getCompanyId());
+        param.setCompanyUserId(Long.parseLong(getUserId()));
+        List<CompanyUserCard> list = companyUserCardService.selectMyCardListQuery(param);
+        PageInfo<CompanyUserCard> listPageInfo = new PageInfo<>(list);
+        return R.ok().put("data", listPageInfo);
+    }
+
+
+    @Login
+    @ApiOperation("删除名片")
+    @PostMapping("/delMyCard")
+    public R delMyCard(@RequestParam("cardId") Long cardId) {
+        try {
+            CompanyUserCard companyUserCard = companyUserCardService.selectCompanyUserCardById(cardId);
+            String shortUrl = companyUserCard.getShortUrl();
+            String[] chainArr = shortUrl.split(".cn/");
+            String chain = "";
+            if (chainArr.length == 2) {
+                chain = chainArr[1];
+            }
+            if (StringUtils.isNotEmpty(chain)) {
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("apikey", aifabuAppId);
+                String[] chains = new String[1];
+                chains[0] = chain;
+                jsonObject.put("chains", "[" + chain + "]");
+                String paramStr = jsonObject.toJSONString();
+                String postUrl = "https://openapi.aifabu.com/v1/chain/delChain?apikey=" + aifabuAppId + "&chains=" + "[" + chain + "]";
+                String postStr = HttpUtils.doPost(postUrl, paramStr);
+                JSONObject obj = JSONObject.parseObject(postStr);
 //				Integer code= obj.getInteger("code");
 //				if(code==1){
 //
 //				}
-			}
-			if(companyUserCardService.deleteCompanyUserCardById(cardId)>0){
-				return R.ok("操作成功");
-			}
-			else{
-				return R.error("操作失败");
-			}
-		} catch (Exception e){
-			return R.error("操作异常"+e.getMessage());
-		}
-	}
-
-
-	@ApiOperation("查询微信urlScheme")
-	@GetMapping("/getAppletScheme")
-	public R getAppletScheme(@RequestParam(value = "cardId") Long cardId)
-	{
-		try {
-			String appId= properties.getConfigs().get(0).getAppid();
-			String secret= properties.getConfigs().get(0).getSecret();
-			String rspStr = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token", "grant_type=client_credential&"+"appid=" + appId + "&secret="+secret);
-			JSONObject obj = JSONObject.parseObject(rspStr);
-			String access_token = obj.getString("access_token");
-			JSONObject jsonObject = new JSONObject();
-			JSONObject jump_wxaObj=new JSONObject();
-			jump_wxaObj.put("path", "/pages_company/card");
-			jump_wxaObj.put("query", "id="+cardId);
-			jsonObject.put("jump_wxa",jump_wxaObj);
-			jsonObject.put("is_expire",false);
-			String paramStr=jsonObject.toJSONString();
-			String postStr = HttpUtils.doPost("https://api.weixin.qq.com/wxa/generatescheme?access_token="+access_token,paramStr);
-			obj = JSONObject.parseObject(postStr);
-			//response.addHeader("Access-Control-Allow-Origin", "*");
-			return R.ok().put("result",obj);
-		}
-		catch (Exception e) {
-			return R.error("操作失败");
-		}
-	}
-
-
-	private String getShortUrlAction(Long cardId,String title){
-		try {
-
-			JSONObject jsonObject = new JSONObject();
-			jsonObject.put("apikey",aifabuAppId);
-			String url="http://company.yjf.runtzh.com/wx.html?id="+cardId;
-			jsonObject.put("target_url",url);
-			jsonObject.put("group_id",308195);
-			if(StringUtils.isNotEmpty(title)){
-				jsonObject.put("chain_title",title);
-			}
-			String paramStr=jsonObject.toJSONString();
-			String postStr = HttpUtils.doPost("https://openapi.aifabu.com/v1/chain/createChain",paramStr);
-			JSONObject obj = JSONObject.parseObject(postStr);
-			Integer code= obj.getInteger("code");
-			String shortUrl="";
-			if(code==1){
-				JSONObject result = obj.getJSONObject("result");
-				shortUrl=result.getString("render_url");
-			}
-			return shortUrl;
-		}
-		catch (Exception e) {
-			return "";
-		}
-	}
-
-	@Login
-	@ApiOperation("获取短链接")
-	@GetMapping("/getShortUrl")
-	public R getShortUrl(@RequestParam(value = "url") String url,@RequestParam(value = "title") String title)
-	{
-
-		try {
-			JSONObject jsonObject = new JSONObject();
-			jsonObject.put("apikey",aifabuAppId);
-			jsonObject.put("target_url",url);
-			jsonObject.put("group_id",308195);
-			if(StringUtils.isNotEmpty(title)){
-				jsonObject.put("chain_title",title);
-			}
-			String paramStr=jsonObject.toJSONString();
-			String postStr = HttpUtils.doPost("https://openapi.aifabu.com/v1/chain/createChain",paramStr);
-			JSONObject obj = JSONObject.parseObject(postStr);
-			return R.ok().put("data",obj);
-		}
-		catch (Exception e) {
-			return R.error("操作失败");
-		}
-	}
-
-	@GetMapping("/getUserList")
-	public R getUserList() {
-		CompanyUser companyUser=companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
-		CompanyUser map=new CompanyUser();
-		map.setCompanyId(companyUser.getCompanyId());
-		List<CompanyUser> list = companyUserService.selectCompanyUserList(map);
-		return  R.ok().put("data",list);
-	}
+            }
+            if (companyUserCardService.deleteCompanyUserCardById(cardId) > 0) {
+                return R.ok("操作成功");
+            } else {
+                return R.error("操作失败");
+            }
+        } catch (Exception e) {
+            return R.error("操作异常" + e.getMessage());
+        }
+    }
+
+
+    @ApiOperation("查询微信urlScheme")
+    @GetMapping("/getAppletScheme")
+    public R getAppletScheme(@RequestParam(value = "cardId") Long cardId) {
+        try {
+            String appId = properties.getConfigs().get(0).getAppid();
+            String secret = properties.getConfigs().get(0).getSecret();
+            String rspStr = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token", "grant_type=client_credential&" + "appid=" + appId + "&secret=" + secret);
+            JSONObject obj = JSONObject.parseObject(rspStr);
+            String access_token = obj.getString("access_token");
+            JSONObject jsonObject = new JSONObject();
+            JSONObject jump_wxaObj = new JSONObject();
+            jump_wxaObj.put("path", "/pages_company/card");
+            jump_wxaObj.put("query", "id=" + cardId);
+            jsonObject.put("jump_wxa", jump_wxaObj);
+            jsonObject.put("is_expire", false);
+            String paramStr = jsonObject.toJSONString();
+            String postStr = HttpUtils.doPost("https://api.weixin.qq.com/wxa/generatescheme?access_token=" + access_token, paramStr);
+            obj = JSONObject.parseObject(postStr);
+            //response.addHeader("Access-Control-Allow-Origin", "*");
+            return R.ok().put("result", obj);
+        } catch (Exception e) {
+            return R.error("操作失败");
+        }
+    }
+
+
+    private String getShortUrlAction(Long cardId, String title) {
+        try {
+
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("apikey", aifabuAppId);
+            String url = "http://company.yjf.runtzh.com/wx.html?id=" + cardId;
+            jsonObject.put("target_url", url);
+            jsonObject.put("group_id", 308195);
+            if (StringUtils.isNotEmpty(title)) {
+                jsonObject.put("chain_title", title);
+            }
+            String paramStr = jsonObject.toJSONString();
+            String postStr = HttpUtils.doPost("https://openapi.aifabu.com/v1/chain/createChain", paramStr);
+            JSONObject obj = JSONObject.parseObject(postStr);
+            Integer code = obj.getInteger("code");
+            String shortUrl = "";
+            if (code == 1) {
+                JSONObject result = obj.getJSONObject("result");
+                shortUrl = result.getString("render_url");
+            }
+            return shortUrl;
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    @Login
+    @ApiOperation("获取短链接")
+    @GetMapping("/getShortUrl")
+    public R getShortUrl(@RequestParam(value = "url") String url, @RequestParam(value = "title") String title) {
+
+        try {
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("apikey", aifabuAppId);
+            jsonObject.put("target_url", url);
+            jsonObject.put("group_id", 308195);
+            if (StringUtils.isNotEmpty(title)) {
+                jsonObject.put("chain_title", title);
+            }
+            String paramStr = jsonObject.toJSONString();
+            String postStr = HttpUtils.doPost("https://openapi.aifabu.com/v1/chain/createChain", paramStr);
+            JSONObject obj = JSONObject.parseObject(postStr);
+            return R.ok().put("data", obj);
+        } catch (Exception e) {
+            return R.error("操作失败");
+        }
+    }
+
+    @GetMapping("/getUserList")
+    public R getUserList() {
+        CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
+        CompanyUser map = new CompanyUser();
+        map.setCompanyId(companyUser.getCompanyId());
+        List<CompanyUser> list = companyUserService.selectCompanyUserList(map);
+        return R.ok().put("data", list);
+    }
 
 }

+ 7 - 2
fs-company-app/src/main/java/com/fs/app/param/EditUserInfoParam.java

@@ -1,17 +1,22 @@
 package com.fs.app.param;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
 
 @Data
+@ApiModel
 public class EditUserInfoParam implements Serializable {
+    @ApiModelProperty(value = "用户性别(0男 1女 2未知)")
     private String sex;
+    @ApiModelProperty(value = "头像地址")
     private String headImg;
+    @ApiModelProperty(value = "手机号码")
     private String mobile;
+    @ApiModelProperty(value = "用户邮箱")
     private String email;
 
-
-
 }

+ 1 - 1
fs-company-app/src/main/java/com/fs/app/param/LoginParam.java

@@ -8,7 +8,7 @@ import java.io.Serializable;
 @Data
 public class LoginParam implements Serializable {
     @NotBlank(message = "帐号不能为空")
-    private String userName;
+    private String account;
     @NotBlank(message = "密码不能为空")
     private String password;
 

+ 4 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwExternalContactMapper.java

@@ -6,11 +6,13 @@ import com.fs.qw.param.ConversionStatisticsParam;
 import com.fs.qw.param.QwCountCustomerParam;
 import com.fs.qw.param.QwExternalContactParam;
 import com.fs.qw.param.QwExternalContactVOTime;
+import com.fs.qw.param.newqw.QwExternalContactPageListParam;
 import com.fs.qw.result.QwExternalContactByQwResult;
 import com.fs.qw.result.QwExternalContactLogVo;
 import com.fs.qw.result.QwExternalContactVo;
 import com.fs.qw.vo.QwExternalContactFsCrmVO;
 import com.fs.qw.vo.QwExternalContactVO;
+import com.fs.qw.vo.newqw.QwExternalContactListVo;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -327,4 +329,6 @@ public interface QwExternalContactMapper extends BaseMapper<QwExternalContact> {
 
     @Select("select id,external_user_id,tag_ids from qw_external_contact where  qw_user_id=#{id} ")
     List<QwExternalContact> selectExternalUserIdsByQwUserId(Long id);
+
+    List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param);
 }

+ 49 - 0
fs-service-system/src/main/java/com/fs/qw/param/newqw/QwExternalContactPageListParam.java

@@ -0,0 +1,49 @@
+package com.fs.qw.param.newqw;
+
+
+import com.fs.his.param.BaseParam;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class QwExternalContactPageListParam extends BaseParam implements Serializable {
+    @ApiModelProperty(value = "用户id,不用传")
+    private Long userId;
+
+    @ApiModelProperty(value = "公司id")
+    private String companyId;
+
+    @ApiModelProperty(value = "公司员工id")
+    private String companyUserId;
+
+    @ApiModelProperty(value = "tab序号,0全部;1今日新增;2今日完播;3未看过课")
+    private String queryValue;
+
+    @ApiModelProperty(value = "注册时间-开始")
+    private String regiesterStartTime;
+
+    @ApiModelProperty(value = "注册时间-结束")
+    private String regiesterEndTime;
+
+    @ApiModelProperty(value = "模糊搜索")
+    private String searchValue;
+
+    @ApiModelProperty(value = "")
+    private String type;
+
+    @ApiModelProperty(value = "看课状态,0全部;1未看过课;2正常看课;3停止看课")
+    private String watchCourseType;
+
+    @ApiModelProperty(value = "")
+    private String[] tagIds;
+
+    private Boolean isBlack;
+
+
+}
+

+ 4 - 0
fs-service-system/src/main/java/com/fs/qw/service/IQwExternalContactService.java

@@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.common.core.domain.R;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.param.*;
+import com.fs.qw.param.newqw.QwExternalContactPageListParam;
 import com.fs.qw.result.QwExternalContactLogVo;
 import com.fs.qw.result.QwExternalContactVo;
 import com.fs.qw.vo.QwExternalContactVO;
 import com.fs.qw.vo.QwSopRuleTimeVO;
+import com.fs.qw.vo.newqw.QwExternalContactListVo;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import org.codehaus.jettison.json.JSONException;
 
@@ -159,4 +161,6 @@ public interface IQwExternalContactService extends IService<QwExternalContact> {
 
     void qwExternalContactAddCourseTag();
 
+    List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param);
+
 }

+ 7 - 0
fs-service-system/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -20,6 +20,8 @@ import com.fs.course.service.IFsCourseLinkService;
 import com.fs.crm.domain.CrmCustomer;
 import com.fs.crm.mapper.CrmCustomerMapper;
 import com.fs.fastGpt.param.SendHookAIParam;
+import com.fs.qw.param.newqw.QwExternalContactPageListParam;
+import com.fs.qw.vo.newqw.QwExternalContactListVo;
 import com.fs.store.domain.FsUser;
 import com.fs.store.mapper.FsUserMapper;
 import com.fs.qw.domain.*;
@@ -4254,6 +4256,11 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
         }
     }
 
+    @Override
+    public List<QwExternalContactListVo> selectQwExternalContactPageList(QwExternalContactPageListParam param) {
+        return qwExternalContactMapper.selectQwExternalContactPageList(param);
+    }
+
     //发送好友欢迎语
        void   SyncAddSendWelcome(QwExternalContact qwExternalContact, QwUser qwUser, String corpId){
              QwFriendWelcomeVO qwFriendWelcomeVO = qwFriendWelcomeMapper.selectQwFriendWelcomeByUserIdVO(qwUser.getId(), corpId);

+ 117 - 0
fs-service-system/src/main/java/com/fs/qw/vo/newqw/QwExternalContactListVo.java

@@ -0,0 +1,117 @@
+package com.fs.qw.vo.newqw;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class QwExternalContactListVo extends BaseEntity {
+
+    private Long id;
+
+    /** 属于用户id */
+    @Excel(name = "属于用户id")
+    private String userId;
+
+    /** 外部联系人id */
+    @Excel(name = "外部联系人id")
+    private String externalUserId;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 头像 */
+    @Excel(name = "头像")
+    private String avatar;
+
+    /** 用户类别 */
+    @Excel(name = "用户类别")
+    private Integer type;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    private Integer gender;
+
+    /** 描述信息 */
+    @Excel(name = "描述信息")
+    private String description;
+
+    /** 标签id */
+    @Excel(name = "标签id")
+    private String tagIds;
+
+    /** 备注电话号码 */
+    @Excel(name = "备注电话号码")
+    private String remarkMobiles;
+
+    /** 备注企业名称 */
+    @Excel(name = "备注企业名称")
+    private String remarkCorpName;
+
+    /** 来源 */
+    @Excel(name = "来源")
+    private Integer addWay;
+
+    /** oper用户id */
+    @Excel(name = "oper用户id")
+    private String operUserid;
+
+    /** 企业id */
+    @Excel(name = "企业id")
+    private String corpId;
+
+    /** 公司id */
+    @Excel(name = "公司id")
+    private Long companyId;
+
+    /** 员工id */
+    @Excel(name = "员工id")
+    private Long companyUserId;
+    private Long qwUserId;
+    /** 客户id */
+    @Excel(name = "客户id")
+    private Long customerId;
+
+    private Integer transferStatus;
+    private Integer status;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date transferTime;
+    private Integer transferNum;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date lossTime;
+//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    private Date delTime;
+    private String state;
+    private Long wayId;
+    private Integer stageStatus;
+    private Long fsUserId;
+    private String mpOpenId;
+    private String unionid;
+    // 加微上传状态0未上传1已上传
+    private Integer uploadAddWxStatus;
+    // 注册上传状态0未上传1已上传
+    private Integer uploadRegisterStatus;
+    // 完课上传状态0未上传1已上传
+    private Integer uploadFinishedStatus;
+
+    @ApiModelProperty(value = "企业员工用户账号")
+    private String companyUserName;
+
+    @ApiModelProperty(value = "企业员工用户昵称")
+    private String companyUsernickName;
+
+    @ApiModelProperty(value = "企业微信名")
+    private String  nickName;
+}

+ 60 - 0
fs-service-system/src/main/resources/mapper/qw/QwExternalContactMapper.xml

@@ -273,4 +273,64 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectQwExternalContactPageList" resultType="QwExternalContactListVo">
+        SELECT
+        qw_external_contact.id,
+        qw_external_contact.qw_user_id,
+        qw_external_contact.state,
+        qw_external_contact.way_id,
+        qw_external_contact.stage_status,
+        qw_external_contact.open_id,
+        qw_external_contact.is_interact,
+        qw_external_contact.LEVEL,
+        qw_external_contact.unionid,
+        qw_external_contact.user_id,
+        qw_external_contact.transfer_time,
+        qw_external_contact.loss_time,
+--         qw_external_contact.del_time,
+        qw_external_contact.transfer_num,
+        qw_external_contact.external_user_id,
+        qw_external_contact.transfer_status,
+        qw_external_contact.STATUS,
+        qw_external_contact.create_time,
+        qw_external_contact.NAME as nickName,
+        qw_external_contact.avatar,
+        qw_external_contact.type,
+        qw_external_contact.gender,
+        qw_external_contact.remark,
+        qw_external_contact.description,
+        qw_external_contact.tag_ids,
+        qw_external_contact.remark_mobiles,
+        qw_external_contact.remark_corp_name,
+        qw_external_contact.add_way,
+        qw_external_contact.oper_userid as mpOpenId,
+        qw_external_contact.corp_id,
+        qw_external_contact.company_id,
+        qw_external_contact.company_user_id,
+        qw_external_contact.customer_id,
+        qw_external_contact.fs_user_id,
+        company_user.user_id AS companyUserId,
+        company_user.user_name AS companyUserName,
+        company_user.nick_name AS companyUserNickName,
+        qw_user.qw_user_name as nickName
+        FROM
+        qw_external_contact
+        LEFT JOIN qw_user ON qw_external_contact.user_id = qw_user.qw_user_id
+        LEFT JOIN company_user ON qw_user.company_user_id = company_user.user_id
+        WHERE  company_user.user_id = #{userId}
+        <if test = "isBlack">
+          AND qw_external_contact.status = 7
+        </if>
+        <if test="companyId != null">
+        AND company_user.company_id = #{companyId}
+        </if>
+
+        <if test="regiesterStartTime != null and regiesterStartTime !='' ">
+        AND qw_external_contact.create_time &gt;= #{regiesterStartTime}
+        </if>
+        <if test="regiesterEndTime != null and regiesterEndTime !='' ">
+        AND qw_external_contact.create_time &lt;= #{regiesterEndTime}
+        </if>
+    </select>
 </mapper>