| | |
| | | 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.SysUser; |
| | | 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.dto.MgtSysStaffImportDto; |
| | | import com.ruoyi.system.domain.pojo.staff.SysStaff; |
| | | 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.sys.ISysUserService; |
| | | import com.ruoyi.system.util.QiYeUtils; |
| | | 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> |
| | |
| | | |
| | | @Resource |
| | | private ISysUserService sysUserService; |
| | | |
| | | @Resource |
| | | private RedisService redisService; |
| | | |
| | | @Resource |
| | | private RemoteShopService remoteShopService; |
| | | |
| | | |
| | | /** |
| | | * @description 获取部门员工列表 |
| | |
| | | */ |
| | | @Override |
| | | public List<MgtDeptStaffListVo>listMgtDeptStaffByPermission(Long userId){ |
| | | SysUser sysUser = sysUserService.getById(userId); |
| | | SysUser sysUser = sysUserService.selectUserById(userId); |
| | | String dataScope = sysUser.getDataScope(); |
| | | List<MgtDeptStaffListVo> deptStaffListVoList; |
| | | if(dataScope.equals("4")){ |
| | | if(dataScope!=null&&dataScope.equals("4")){ |
| | | deptStaffListVoList = sysStaffMapper.listMgtDeptStaffByDept(sysUser.getDeptId(),null); |
| | | }else if(dataScope.equals("5")){ |
| | | }else if(dataScope!=null&&dataScope.equals("5")){ |
| | | deptStaffListVoList = sysStaffMapper.listMgtDeptStaffByDept(sysUser.getDeptId(),sysUser.getUserId()); |
| | | }else{ |
| | | deptStaffListVoList = sysStaffMapper.listMgtDeptStaff(); |
| | |
| | | public void mgtStaffEdit(MgtStaffEditDto mgtStaffEditDto){ |
| | | SysStaff sysStaff; |
| | | SysUser sysUser; |
| | | if(mgtStaffEditDto.getUserId()!=null){ |
| | | sysStaff = this.getByUserId(mgtStaffEditDto.getUserId()); |
| | | sysUser = sysUserService.getById(mgtStaffEditDto.getUserId()); |
| | | LambdaQueryWrapper<SysStaff> queryWrapper = new LambdaQueryWrapper(); |
| | | queryWrapper.eq(SysStaff::getDelFlag,0); |
| | | queryWrapper.eq(SysStaff::getStaffMobile,mgtStaffEditDto.getStaffMobile()); |
| | | SysStaff sysStaffSame = this.getOne(queryWrapper, false); |
| | | 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); |
| | | } |
| | | sysStaff = this.getByUserId(mgtStaffEditDto.getSysUserId()); |
| | | sysUser = sysUserService.selectUserById(mgtStaffEditDto.getSysUserId()); |
| | | sysUser.setUserName(mgtStaffEditDto.getStaffMobile()); |
| | | sysUser.setPhonenumber(mgtStaffEditDto.getStaffMobile()); |
| | | sysUser.setNickName(mgtStaffEditDto.getStaffName()); |
| | | sysUser.setAvatar(mgtStaffEditDto.getStaffAvatar()); |
| | | sysUser.setEmail(mgtStaffEditDto.getStaffEmail()); |
| | | sysUserService.saveOrUpdate(sysUser); |
| | | sysUserService.updateOnlyUser(sysUser); |
| | | }else{ |
| | | if(sysStaffSame!=null){ |
| | | throw new ServiceException(AppErrorConstant.STAFF_MOBILE_DOUBLE); |
| | | } |
| | | sysStaff = new SysStaff(); |
| | | String staffId = IdUtils.simpleUUID(); |
| | | sysStaff.setStaffId(staffId); |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | | * @description |
| | | * @author jqs |
| | | * @date 2023/6/25 17:52 |
| | | * @param page |
| | | * @param mgtStaffPageDto |
| | | * @return List<MgtStaffPageVo> |
| | | */ |
| | | @Override |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | /*tagName = entity.getTagName(); |
| | | sysTagSame = null; |
| | | // 验证是否存在这个用户 |
| | | queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.eq(SysTag::getDelFlag, 0) // 查询条件:delFlag=0 |
| | | .eq(SysTag::getTagType, tagType) // 查询条件:tagType=mgtTagEditDto的tagType属性 |
| | | .eq(SysTag::getTagName, tagName); // 查询条件:tagName=mgtTagEditDto的tagName属性 |
| | | // 执行查询,获取与查询条件匹配的SysTag对象 |
| | | sysTagSame = this.getOne(queryWrapper); |
| | | if (sysTagSame == null) { |
| | | sysTagNew = new SysTag(); |
| | | sysTagNew.setDelFlag(0); |
| | | sysTagNew.setTagType(tagType); |
| | | sysTagNew.setTagName(tagName); |
| | | sysTagNew.setCreateTime(nowTime); |
| | | sysTagNew.setSynFlag(0); |
| | | this.save(sysTagNew); |
| | | successNum++; |
| | | successMsg.append("<br/>" + successNum + "、标签 " + sysTagNew.getTagName() + " 导入成功"); |
| | | } else { |
| | | failureNum++; |
| | | failureMsg.append("<br/>" + failureNum + "、标签 " + sysTagSame.getTagName() + " 已存在"); |
| | | }*/ |
| | | } 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(); |
| | | } |
| | | } |