From d6a0c57043e8cc20694a3c678bf8e3a8f28f6499 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 29 五月 2025 11:20:14 +0800
Subject: [PATCH] 新增加用户端接口
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java | 344 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 332 insertions(+), 12 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
index 474dcc3..c22c30b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
@@ -1,26 +1,51 @@
package com.ruoyi.system.service.impl.staff;
+import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.uuid.IdUtils;
+import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
+import com.ruoyi.system.api.constant.SecurityConstant;
+import com.ruoyi.system.api.domain.dto.MerEditUserDto;
import com.ruoyi.system.api.domain.dto.MgtBaseGetDto;
+import com.ruoyi.system.api.domain.dto.MgtShopStaffEditDto;
+import com.ruoyi.system.api.domain.poji.sys.SysDept;
import com.ruoyi.system.api.domain.poji.sys.SysUser;
+import com.ruoyi.system.api.domain.vo.MgtUserTaskMsgVo;
+import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.domain.dto.MgtStaffEditDto;
import com.ruoyi.system.domain.dto.MgtStaffPageDto;
-import com.ruoyi.system.domain.pojo.staff.SysStaff;
+import com.ruoyi.system.domain.dto.MgtSysStaffImportDto;
+import com.ruoyi.system.api.domain.poji.sys.SysStaff;
+import com.ruoyi.system.domain.dto.MgtWxCPStaffDto;
+import com.ruoyi.system.domain.vo.DeptSimpleVo;
import com.ruoyi.system.domain.vo.MgtDeptStaffListVo;
import com.ruoyi.system.domain.vo.MgtStaffPageVo;
import com.ruoyi.system.mapper.staff.SysStaffMapper;
import com.ruoyi.system.service.staff.SysStaffService;
+import com.ruoyi.system.service.staff.SysWxCpService;
+import com.ruoyi.system.service.sys.ISysDeptService;
import com.ruoyi.system.service.sys.ISysUserService;
+import com.ruoyi.system.util.QiYeUtils;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.api.WxCpService;
+import me.chanjar.weixin.cp.bean.message.WxCpMessage;
+import me.chanjar.weixin.cp.bean.message.WxCpMessageSendResult;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
+import java.util.Date;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* <p>
@@ -39,6 +64,23 @@
@Resource
private ISysUserService sysUserService;
+ @Resource
+ private RedisService redisService;
+
+ @Resource
+ private RemoteShopService remoteShopService;
+
+ @Resource
+ private SysWxCpService sysWxCpService;
+
+ @Resource
+ private ISysDeptService sysDeptService;
+
+ @Resource
+ @Qualifier("wxService")
+ private WxCpService wxCpService;
+
+
/**
* @description 获取部门员工列表
* @author jqs
@@ -47,8 +89,8 @@
* @return List<MgtDeptStaffListVo>
*/
@Override
- public List<MgtDeptStaffListVo> listMgtDeptStaff(){
- return sysStaffMapper.listMgtDeptStaff();
+ public List<MgtDeptStaffListVo> listMgtDeptStaff(Long deptId,Long userId, String name){
+ return sysStaffMapper.listMgtDeptStaff(deptId,userId, name);
}
/**
@@ -60,16 +102,31 @@
*/
@Override
public List<MgtDeptStaffListVo>listMgtDeptStaffByPermission(Long userId){
- SysUser sysUser = sysUserService.selectUserById(userId);
- String dataScope = sysUser.getDataScope();
List<MgtDeptStaffListVo> deptStaffListVoList;
- if(dataScope!=null&&dataScope.equals("4")){
- deptStaffListVoList = sysStaffMapper.listMgtDeptStaffByDept(sysUser.getDeptId(),null);
- }else if(dataScope!=null&&dataScope.equals("5")){
- deptStaffListVoList = sysStaffMapper.listMgtDeptStaffByDept(sysUser.getDeptId(),sysUser.getUserId());
- }else{
- deptStaffListVoList = sysStaffMapper.listMgtDeptStaff();
+ // 获取当前登陆人的可视权限
+ SysUser sysUser = sysUserService.selectUserById(userId);
+ // 如果当前登陆人权限是查看部门数据
+ Long deptId = null;
+ // 如果当前登陆人是查看个人数据
+ Long userId1 = null;
+ if (sysUser!=null){
+ String dataScope = sysUser.getDataScope();
+ if (!sysUser.getUserName().equals("admin")){
+ if (org.springframework.util.StringUtils.hasLength(dataScope)){
+ switch (dataScope){
+ case "3":
+ // 本部门数据 查询当前登陆人属于哪个部门 查询这个部门下所有员工关联的所有店铺
+ deptId = sysUser.getDeptId();
+ break;
+ case "5":
+ // 仅个人数据 查询当前登陆人关联店铺下的用户
+ userId1 = sysUser.getUserId();
+ break;
+ }
+ }
+ }
}
+ deptStaffListVoList = sysStaffMapper.listMgtDeptStaff(deptId,userId1, null);
return deptStaffListVoList;
}
@@ -104,6 +161,10 @@
queryWrapper.eq(SysStaff::getDelFlag,0);
queryWrapper.eq(SysStaff::getStaffMobile,mgtStaffEditDto.getStaffMobile());
SysStaff sysStaffSame = this.getOne(queryWrapper, false);
+ SysDept sysDept = sysDeptService.selectDeptById(mgtStaffEditDto.getDeptId());
+ if(StringUtils.isBlank(mgtStaffEditDto.getStaffAvatar())){
+ mgtStaffEditDto.setStaffAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png");
+ }
if(mgtStaffEditDto.getSysUserId()!=null){
if(sysStaffSame!=null&&!sysStaffSame.getUserId().equals(mgtStaffEditDto.getSysUserId())){
throw new ServiceException(AppErrorConstant.STAFF_MOBILE_DOUBLE);
@@ -144,7 +205,28 @@
sysStaff.setStaffPost(mgtStaffEditDto.getStaffPost());
sysStaff.setStaffAvatar(mgtStaffEditDto.getStaffAvatar());
sysStaff.setHeadFlag(mgtStaffEditDto.getHeadFlag());
+ sysStaff.setWxUserId(mgtStaffEditDto.getWxUserId());
this.saveOrUpdate(sysStaff);
+ //同步修改商户员工信息
+ MgtShopStaffEditDto mgtShopStaffEditDto = new MgtShopStaffEditDto();
+ mgtShopStaffEditDto.setUserId(sysStaff.getUserId());
+ mgtShopStaffEditDto.setStaffName(sysStaff.getStaffName());
+ mgtShopStaffEditDto.setStaffMobile(sysStaff.getStaffMobile());
+ mgtShopStaffEditDto.setStaffAvatar(sysStaff.getStaffAvatar());
+ remoteShopService.editMgtShopStaff(mgtShopStaffEditDto);
+ //如果wxUserId和wxDeptId不为空 同步到企业微信
+ if(sysStaff.getWxUserId()!=null&&sysDept.getWxDeptId()!=null){
+ log.debug("同步员工到企业微信:"+mgtStaffEditDto.getStaffName());
+ MgtWxCPStaffDto mgtWxCPStaffDto = new MgtWxCPStaffDto();
+ mgtWxCPStaffDto.setWxDeptId(sysDept.getWxDeptId());
+ mgtWxCPStaffDto.setWxUserId(mgtStaffEditDto.getWxUserId());
+ mgtWxCPStaffDto.setStaffName(mgtStaffEditDto.getStaffName());
+ mgtWxCPStaffDto.setStaffMobile(mgtStaffEditDto.getStaffMobile());
+ mgtWxCPStaffDto.setStaffPost(mgtStaffEditDto.getStaffPost());
+ mgtWxCPStaffDto.setStaffEmail(mgtStaffEditDto.getStaffEmail());
+ mgtWxCPStaffDto.setHeadFlag(mgtStaffEditDto.getHeadFlag());
+ sysWxCpService.addWxCpStaff(mgtWxCPStaffDto);
+ }
}
/**
@@ -159,8 +241,9 @@
Long userId = Long.valueOf(mgtBaseGetDto.getId());
SysStaff sysStaff = this.getByUserId(userId);
sysStaff.setDelFlag(1);
+ sysStaff.setStaffMobile(sysStaff.getStaffMobile()+":已删除");
this.saveOrUpdate(sysStaff);
- sysUserService.deleteUserById(mgtBaseGetDto.getUserId());
+ sysUserService.deleteUserById(userId);
}
/**
@@ -175,4 +258,241 @@
public List<MgtStaffPageVo> pageMgtStaff(Page page, MgtStaffPageDto mgtStaffPageDto){
return sysStaffMapper.pageMgtStaff(page, mgtStaffPageDto);
}
+
+ /**
+ * @description
+ * @author jqs
+ * @date 2023/7/14 9:52
+ * @param mobile
+ * @return SysStaff
+ */
+ @Override
+ public SysStaff getByMobile(String mobile){
+ LambdaQueryWrapper<SysStaff> queryWrapper = new LambdaQueryWrapper();
+ queryWrapper.eq(SysStaff::getDelFlag,0);
+ queryWrapper.eq(SysStaff::getStaffMobile,mobile);
+ return this.getOne(queryWrapper,false);
+ }
+
+
+
+
+
+ /**
+ * @description 获取企业微信token
+ * @author jqs
+ * @date 2023/7/18 19:35
+ * @param
+ * @return String
+ */
+ private String getQYToken(){
+ String accessToken = redisService.getCacheObject(SecurityConstant.QY_TOKEN);
+ if(StringUtils.isBlank(accessToken)){
+ try {
+ accessToken = QiYeUtils.getAccessTokenByQY();
+ JSONObject jsonAccessToken = JSONObject.parseObject(accessToken);
+ String errcode = jsonAccessToken.getString("errcode");
+ String errmsg = jsonAccessToken.getString("errmsg");
+ if(errcode.equals("0")){
+ accessToken = jsonAccessToken.getString("access_token");
+ Long expiresIn = jsonAccessToken.getLong("expires_in");
+ expiresIn = expiresIn -100;
+ redisService.setCacheObject(SecurityConstant.QY_TOKEN,accessToken,expiresIn, TimeUnit.SECONDS);
+ }else{
+ throw new ServiceException(errmsg);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return accessToken;
+ }
+
+
+ /**
+ * @description 编辑商户员工
+ * @author jqs
+ * @date 2023/7/19 19:42
+ * @param merEditUserDto
+ * @return void
+ */
+ @Override
+ public void editSysStaffInfo(MerEditUserDto merEditUserDto){
+ SysStaff sysStaff = this.getByUserId(merEditUserDto.getUserId());
+ Integer editType = merEditUserDto.getEditType();
+ switch (editType){
+ case 1:
+ sysStaff.setStaffName(merEditUserDto.getEditValue());
+ break;
+ case 2:
+ sysStaff.setStaffAvatar(merEditUserDto.getEditValue());
+ break;
+ case 3:
+ break;
+ case 4:
+ break;
+ default:
+ break;
+ }
+ this.saveOrUpdate(sysStaff);
+ }
+
+ /**
+ * @description 导入员工
+ * @author jqs
+ * @date 2023/8/18 16:04
+ * @param
+ * @return void
+ */
+ @Override
+ public String importSysStaff(List<MgtSysStaffImportDto> staffImportDtoList){
+ if (StringUtils.isNull(staffImportDtoList) || staffImportDtoList.size() == 0) {
+ throw new ServiceException("导入数据不能为空!");
+ }
+ int successNum = 0;
+ int failureNum = 0;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder failureMsg = new StringBuilder();
+ SysStaff sysStaff;
+ Date nowTime = new Date();
+ String mobile;
+ String userName;
+ String department;
+ String departmentFirst;
+ String departmentSecond;
+ String departmentThird;
+ int lastIndex;
+ int firstIndex;
+ int secondIndex;
+ int thirdIndex;
+ DeptSimpleVo deptSimpleVo;
+ SysUser sysUser;
+ List<DeptSimpleVo> deptSimpleVoList = sysStaffMapper.listSimpleDept();
+ Map<String, DeptSimpleVo> deptMap = deptSimpleVoList.stream()
+ .collect(Collectors.toMap(DeptSimpleVo::getDeptName, Function.identity()));
+ for (MgtSysStaffImportDto entity : staffImportDtoList) {
+ try {
+ if(StringUtils.isNotBlank(entity.getMobile())){
+ if(StringUtils.isNotBlank(entity.getUserStatus())&&entity.getUserStatus().equals("禁用")){
+ continue;
+ }
+ department = entity.getDepartment();
+ lastIndex = department.indexOf(";");
+ department = (lastIndex != -1) ? department.substring(0, lastIndex) : department;
+ firstIndex = department.lastIndexOf("/");
+ secondIndex = department.lastIndexOf('/', firstIndex - 1);
+ thirdIndex = department.lastIndexOf('/', secondIndex - 1);
+ departmentFirst = department.substring(firstIndex + 1);
+ deptSimpleVo = deptMap.get(departmentFirst);
+ if(deptSimpleVo==null){
+ departmentSecond = department.substring(secondIndex + 1, firstIndex);
+ deptSimpleVo = deptMap.get(departmentSecond);
+ }
+ if(deptSimpleVo==null){
+ departmentThird = department.substring(thirdIndex + 1, secondIndex);
+ deptSimpleVo = deptMap.get(departmentThird);
+ }
+ if(deptSimpleVo!=null&&StringUtils.isNotBlank(entity.getMobile())){
+ LambdaQueryWrapper<SysStaff> queryWrapper = new LambdaQueryWrapper();
+ queryWrapper.eq(SysStaff::getDelFlag,0);
+ queryWrapper.eq(SysStaff::getStaffMobile,entity.getMobile());
+ SysStaff sysStaffSame = this.getOne(queryWrapper, false);
+ if(sysStaffSame!=null){
+ sysStaffSame.setStaffName(entity.getStaffName());
+ sysStaffSame.setStaffPost(entity.getPost());
+ sysStaffSame.setWxUserId(entity.getUserName());
+ if(StringUtils.isNotBlank(entity.getEmail())){
+ sysStaffSame.setStaffEmail(entity.getEmail());
+ }
+ this.saveOrUpdate(sysStaffSame);
+ sysUser = sysUserService.selectUserById(sysStaffSame.getUserId());
+ sysUser.setDeptId(deptSimpleVo.getDeptId());
+ sysUser.setNickName(entity.getStaffName());
+ if(entity.getGender().equals("男")){
+ sysUser.setSex("0");
+ }else if(entity.getGender().equals("女")){
+ sysUser.setSex("1");
+ }else{
+ sysUser.setSex("2");
+ }
+ if(StringUtils.isNotBlank(entity.getEmail())){
+ sysUser.setEmail(entity.getEmail());
+ }
+ sysUserService.updateOnlyUser(sysUser);
+ successNum = successNum + 1;
+ }else{
+ MgtStaffEditDto mgtStaffEditDto = new MgtStaffEditDto();
+ mgtStaffEditDto.setDeptId(deptSimpleVo.getDeptId());
+ mgtStaffEditDto.setStaffName(entity.getStaffName());
+ mgtStaffEditDto.setStaffMobile(entity.getMobile());
+ mgtStaffEditDto.setStaffEmail(entity.getEmail());
+ mgtStaffEditDto.setStaffPost(entity.getPost());
+ mgtStaffEditDto.setStaffAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/2023/8/26/362e964917304255aaa36a874063d198.jpg");
+ mgtStaffEditDto.setHeadFlag("0");
+ mgtStaffEditDto.setWxUserId(entity.getUserName());
+ this.mgtStaffEdit(mgtStaffEditDto);
+ successNum = successNum + 1;
+ }
+ }
+ }
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "<br/>" + failureNum + "员工 " + entity.getStaffName() + " 导入失败:";
+ failureMsg.append(msg + e.getMessage());
+ log.error(msg, e);
+ }
+ }
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
+ /**
+ * @description 通过id获取员工列表
+ * @author jqs
+ * @date 2023/9/5 10:02
+ * @param userIdList
+ * @return List<SysStaff>
+ */
+ @Override
+ public List<SysStaff> listSysStaffByIds(List<Long> userIdList){
+ return sysStaffMapper.listSysStaffByIds(userIdList);
+ }
+
+ /**
+ * @description 企业微信消息推送
+ * @author jqs
+ * @date 2023/8/29 11:05
+ * @return void
+ */
+ @Override
+ public void sendTaskMessage(){
+ //获取员工任务列表
+ List<MgtUserTaskMsgVo> userTaskMsgVoList = remoteShopService.getTaskMsgList().getData();
+ WxCpMessage message;
+ SysStaff sysStaff;
+ if(userTaskMsgVoList!=null&&!userTaskMsgVoList.isEmpty()){
+ //循环发送消息
+ for(MgtUserTaskMsgVo mgtUserTaskMsgVo : userTaskMsgVoList){
+ sysStaff = this.getByUserId(mgtUserTaskMsgVo.getUserId());
+ if(sysStaff!=null&& StringUtils.isNotBlank(sysStaff.getWxUserId())){
+ message = new WxCpMessage();
+ message.setAgentId(1000024);
+ message.setToUser(sysStaff.getWxUserId());
+ message.setMsgType("text");
+ message.setContent(mgtUserTaskMsgVo.getTaskTitle()+"今日需要任务跟进,请注意!");
+ try {
+ WxCpMessageSendResult result = wxCpService.getMessageService().send(message);
+ System.out.println(result);
+ } catch (WxErrorException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ }
+ }
}
--
Gitblit v1.7.1