From afa0dbb4f54e7244835dd67ec33c3e545f122f71 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 17 一月 2025 16:40:43 +0800 Subject: [PATCH] bug修改 --- 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 99808fb..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.equals("4")){ - deptStaffListVoList = sysStaffMapper.listMgtDeptStaffByDept(sysUser.getDeptId(),null); - }else if(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