去除企业微信/钉钉对接功能、去除职位管理及用户职位关联功能

This commit is contained in:
panbaolin 2025-08-12 19:33:20 +08:00
parent 7ccfbe9c18
commit 303e1c9aad
28 changed files with 0 additions and 1641 deletions

View File

@ -503,13 +503,6 @@ public interface ISysBaseAPI extends CommonAPI {
*/
List<String> queryUserIdsByRoleds(List<String> roleCodes);
/**
* 根据职务ID查询用户ID
* @param positionIds
* @return
*/
List<String> queryUserIdsByPositionIds(List<String> positionIds);
/**
* 根据部门和子部门下的所有用户账号
*

View File

@ -24,12 +24,6 @@
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>hibernate-re</artifactId>
</dependency>
<!-- 企业微信/钉钉 api -->
<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>weixin4j</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -918,17 +918,6 @@ public class SystemApiController {
return sysBaseApi.queryUserIdsByRoleds(roleCodes);
}
/**
* 根据职务ID查询用户ID
* @param positionIds
* @return
*/
@GetMapping("/queryUserIdsByPositionIds")
public List<String> queryUserIdsByPositionIds(@RequestParam("positionIds") List<String> positionIds){
return sysBaseApi.queryUserIdsByPositionIds(positionIds);
}
/**
* 根据部门和子部门下的所有用户账号
*

View File

@ -1,13 +1,10 @@
package org.jeecg.modules.system.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeecg.dingtalk.api.core.response.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils;
@ -39,7 +36,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

View File

@ -1,401 +0,0 @@
package org.jeecg.modules.system.controller;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.aspect.annotation.AutoLog;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.ImportExcelUtil;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.config.mybatis.MybatisPlusSaasConfig;
import org.jeecg.config.security.utils.SecureUtil;
import org.jeecg.modules.system.entity.SysPosition;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.service.IAuthUserService;
import org.jeecg.modules.system.service.ISysPositionService;
import org.jeecg.modules.system.service.ISysUserPositionService;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description: 职务表
* @Author: jeecg-boot
* @Date: 2019-09-19
* @Version: V1.0
*/
@Slf4j
@Tag(name = "职务表")
@RestController
@RequestMapping("/sys/position")
public class SysPositionController {
@Autowired
private ISysPositionService sysPositionService;
@Autowired
private ISysUserPositionService userPositionService;
@Autowired
private IAuthUserService authUserService;
/**
* 分页列表查询
*
* @param sysPosition
* @param pageNo
* @param pageSize
* @param req
* @return
*/
@AutoLog(value = "职务表-分页列表查询")
@Operation(summary = "职务表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<SysPosition>> queryPageList(SysPosition sysPosition,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
Result<IPage<SysPosition>> result = new Result<IPage<SysPosition>>();
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离SAAS多租户模式
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0));
}
//------------------------------------------------------------------------------------------------
QueryWrapper<SysPosition> queryWrapper = QueryGenerator.initQueryWrapper(sysPosition, req.getParameterMap());
Page<SysPosition> page = new Page<SysPosition>(pageNo, pageSize);
IPage<SysPosition> pageList = sysPositionService.page(page, queryWrapper);
result.setSuccess(true);
result.setResult(pageList);
return result;
}
/**
* 添加
*
* @param sysPosition
* @return
*/
@AutoLog(value = "职务表-添加")
@Operation(summary = "职务表-添加")
@PostMapping(value = "/add")
public Result<SysPosition> add(@RequestBody SysPosition sysPosition) {
Result<SysPosition> result = new Result<SysPosition>();
try {
//update-begin---author:wangshuai ---date:20230313 forQQYUN-4558vue3职位功能调整去掉编码和级别可以先隐藏------------
//编号是空的不需要判断多租户隔离了
if(oConvertUtils.isEmpty(sysPosition.getCode())){
//生成职位编码10位
sysPosition.setCode(RandomUtil.randomString(10));
}
//update-end---author:wangshuai ---date:20230313 forQQYUN-4558vue3职位功能调整去掉编码和级别可以先隐藏-------------
sysPositionService.save(sysPosition);
result.success("添加成功!");
} catch (Exception e) {
log.error(e.getMessage(), e);
result.error500("操作失败");
}
return result;
}
/**
* 编辑
*
* @param sysPosition
* @return
*/
@AutoLog(value = "职务表-编辑")
@Operation(summary = "职务表-编辑")
@RequestMapping(value = "/edit", method ={RequestMethod.PUT, RequestMethod.POST})
public Result<SysPosition> edit(@RequestBody SysPosition sysPosition) {
Result<SysPosition> result = new Result<SysPosition>();
SysPosition sysPositionEntity = sysPositionService.getById(sysPosition.getId());
if (sysPositionEntity == null) {
result.error500("未找到对应实体");
} else {
boolean ok = sysPositionService.updateById(sysPosition);
//TODO 返回false说明什么
if (ok) {
result.success("修改成功!");
}
}
return result;
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "职务表-通过id删除")
@Operation(summary = "职务表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
try {
sysPositionService.removeById(id);
//删除用户职位关系表
userPositionService.removeByPositionId(id);
} catch (Exception e) {
log.error("删除失败", e.getMessage());
return Result.error("删除失败!");
}
return Result.ok("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "职务表-批量删除")
@Operation(summary = "职务表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<SysPosition> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
Result<SysPosition> result = new Result<SysPosition>();
if (ids == null || "".equals(ids.trim())) {
result.error500("参数不识别!");
} else {
this.sysPositionService.removeByIds(Arrays.asList(ids.split(",")));
result.success("删除成功!");
}
return result;
}
/**
* 通过id查询
*
* @param id
* @return
*/
@AutoLog(value = "职务表-通过id查询")
@Operation(summary = "职务表-通过id查询")
@GetMapping(value = "/queryById")
public Result<SysPosition> queryById(@RequestParam(name = "id", required = true) String id) {
Result<SysPosition> result = new Result<SysPosition>();
SysPosition sysPosition = sysPositionService.getById(id);
if (sysPosition == null) {
result.error500("未找到对应实体");
} else {
result.setResult(sysPosition);
result.setSuccess(true);
}
return result;
}
/**
* 导出excel
*
* @param request
* @param response
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(SysPosition sysPosition,HttpServletRequest request, HttpServletResponse response) {
// Step.1 组装查询条件
QueryWrapper<SysPosition> queryWrapper = null;
try {
String paramsStr = request.getParameter("paramsStr");
if (oConvertUtils.isNotEmpty(paramsStr)) {
String deString = URLDecoder.decode(paramsStr, "UTF-8");
sysPosition = JSON.parseObject(deString, SysPosition.class);
//------------------------------------------------------------------------------------------------
//是否开启系统管理模块的多租户数据隔离SAAS多租户模式
if(MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL){
sysPosition.setTenantId(oConvertUtils.getInt(TenantContext.getTenant(),0));
}
//------------------------------------------------------------------------------------------------
}
queryWrapper = QueryGenerator.initQueryWrapper(sysPosition, request.getParameterMap());
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//update-begin--Author:liusq Date:20240715 for[03]职务导出如果选择数据则只导出相关数据--------------------
String selections = request.getParameter("selections");
if(!oConvertUtils.isEmpty(selections)){
queryWrapper.in("id",selections.split(","));
}
//update-end--Author:liusq Date:20240715 for[03]职务导出如果选择数据则只导出相关数据----------------------
//Step.2 AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
List<SysPosition> pageList = sysPositionService.list(queryWrapper);
LoginUser user = SecureUtil.currentUser();
//导出文件名称
mv.addObject(NormalExcelConstants.FILE_NAME, "职务表列表");
mv.addObject(NormalExcelConstants.CLASS, SysPosition.class);
mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("职务表列表数据", "导出人:"+user.getRealname(),"导出信息"));
mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
return mv;
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
// 错误信息
List<String> errorMessage = new ArrayList<>();
int successLines = 0, errorLines = 0;
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取上传文件对象
MultipartFile file = entity.getValue();
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(1);
params.setNeedSave(true);
try {
List<Object> listSysPositions = ExcelImportUtil.importExcel(file.getInputStream(), SysPosition.class, params);
List<String> list = ImportExcelUtil.importDateSave(listSysPositions, ISysPositionService.class, errorMessage,CommonConstant.SQL_INDEX_UNIQ_CODE);
errorLines+=list.size();
successLines+=(listSysPositions.size()-errorLines);
} catch (Exception e) {
log.error(e.getMessage(), e);
return Result.error("文件导入失败:" + e.getMessage());
} finally {
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage);
}
/**
* 通过code查询
*
* @param code
* @return
*/
@AutoLog(value = "职务表-通过code查询")
@Operation(summary = "职务表-通过code查询")
@GetMapping(value = "/queryByCode")
public Result<SysPosition> queryByCode(@RequestParam(name = "code", required = true) String code) {
Result<SysPosition> result = new Result<SysPosition>();
QueryWrapper<SysPosition> queryWrapper = new QueryWrapper<SysPosition>();
queryWrapper.eq("code",code);
SysPosition sysPosition = sysPositionService.getOne(queryWrapper);
if (sysPosition == null) {
result.error500("未找到对应实体");
} else {
result.setResult(sysPosition);
result.setSuccess(true);
}
return result;
}
/**
* 通过多个ID查询
*
* @param ids
* @return
*/
@AutoLog(value = "职务表-通过多个查询")
@Operation(summary = "职务表-通过多个id查询")
@GetMapping(value = "/queryByIds")
public Result<List<SysPosition>> queryByIds(@RequestParam(name = "ids") String ids) {
Result<List<SysPosition>> result = new Result<>();
QueryWrapper<SysPosition> queryWrapper = new QueryWrapper<>();
queryWrapper.in(true,"id",ids.split(","));
List<SysPosition> list = sysPositionService.list(queryWrapper);
if (list == null) {
result.error500("未找到对应实体");
} else {
result.setResult(list);
result.setSuccess(true);
}
return result;
}
/**
* 获取职位用户列表
*
* @param pageNo
* @param pageSize
* @param positionId
* @return
*/
@GetMapping("/getPositionUserList")
public Result<IPage<SysUser>> getPositionUserList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "positionId") String positionId) {
Page<SysUser> page = new Page<>(pageNo, pageSize);
IPage<SysUser> pageList = userPositionService.getPositionUserList(page, positionId);
List<String> userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList());
if (null != userIds && userIds.size() > 0) {
Map<String, String> useDepNames = authUserService.getDepNamesByUserIds(userIds);
pageList.getRecords().forEach(item -> {
item.setOrgCodeTxt(useDepNames.get(item.getId()));
});
}
return Result.ok(pageList);
}
/**
* 添加成员到用户职位关系表
*
* @param userIds
* @param positionId
* @return
*/
@PostMapping("/savePositionUser")
public Result<String> saveUserPosition(@RequestParam(name = "userIds") String userIds,
@RequestParam(name = "positionId") String positionId) {
userPositionService.saveUserPosition(userIds, positionId);
return Result.ok("添加成功");
}
/**
* 职位列表移除成员
*
* @param userIds
* @param positionId
* @return
*/
@DeleteMapping("/removePositionUser")
public Result<String> removeUserPosition(@RequestParam(name = "userIds") String userIds,
@RequestParam(name = "positionId") String positionId) {
userPositionService.removePositionUser(userIds, positionId);
return Result.OK("移除成员成功");
}
}

View File

@ -97,9 +97,6 @@ public class SysUserController {
@Autowired
private ISysUserAgentService sysUserAgentService;
@Autowired
private ISysPositionService sysPositionService;
@Autowired
private JeecgRedisClient jeecgRedisClient;
@ -1572,31 +1569,6 @@ public class SysUserController {
if(user==null) {
return Result.error("未找到该用户数据");
}
//update-begin---author:wangshuai ---date:20230220 for[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------
//获取用户id通过职位数据
List<SysPosition> sysPositionList = sysPositionService.getPositionList(user.getId());
if(null != sysPositionList && sysPositionList.size()>0){
//update-end---author:wangshuai ---date:20230220 for[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------
StringBuilder nameBuilder = new StringBuilder();
StringBuilder idBuilder = new StringBuilder();
String verticalBar = " | ";
for (SysPosition sysPosition:sysPositionList){
nameBuilder.append(sysPosition.getName()).append(verticalBar);
idBuilder.append(sysPosition.getId()).append(SymbolConstant.COMMA);
}
String names = nameBuilder.toString();
if(oConvertUtils.isNotEmpty(names)){
names = names.substring(0,names.lastIndexOf(verticalBar));
user.setPostText(names);
}
//拼接职位id
String ids = idBuilder.toString();
if(oConvertUtils.isNotEmpty(ids)){
ids = ids.substring(0,ids.lastIndexOf(SymbolConstant.COMMA));
user.setPost(ids);
}
}
return Result.ok(user);
}

View File

@ -1,91 +0,0 @@
package org.jeecg.modules.system.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.jeecg.common.aspect.annotation.Dict;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
/**
* @Description: 职务表
* @Author: jeecg-boot
* @Date: 2019-09-19
* @Version: V1.0
*/
@Data
@TableName("sys_position")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@Schema(description = "职务表")
public class SysPosition {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "id")
private java.lang.String id;
/**
* 职务编码
*/
@Excel(name = "职务编码", width = 15)
@Schema(description = "职务编码")
private java.lang.String code;
/**
* 职务名称
*/
@Excel(name = "职务名称", width = 15)
@Schema(description = "职务名称")
private java.lang.String name;
/**
* 职级
*/
//@Excel(name = "职级", width = 15,dicCode ="position_rank")
@Schema(description = "职级")
@Dict(dicCode = "position_rank")
private java.lang.String postRank;
/**
* 公司id
*/
@Schema(description = "公司id")
private java.lang.String companyId;
/**
* 创建人
*/
@Schema(description = "创建人")
private java.lang.String createBy;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建时间")
private java.util.Date createTime;
/**
* 修改人
*/
@Schema(description = "修改人")
private java.lang.String updateBy;
/**
* 修改时间
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "修改时间")
private java.util.Date updateTime;
/**
* 组织机构编码
*/
@Schema(description = "组织机构编码")
private java.lang.String sysOrgCode;
/**租户ID*/
@Schema(description = "租户ID")
private java.lang.Integer tenantId;
}

View File

@ -129,14 +129,6 @@ public class SysUser implements Serializable {
@Excel(name = "工号", width = 15)
private String workNo;
/**
* 职务关联职务表
*/
@Excel(name = "职务", width = 15)
@Dict(dictTable ="sys_position",dicText = "name",dicCode = "id")
@TableField(exist = false)
private String post;
/**
* 座机号
*/

View File

@ -1,53 +0,0 @@
package org.jeecg.modules.system.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
/**
* @Description: 用户职位关系表
* @Author: jeecg-boot
* @Date: 2023-02-14
* @Version: V1.0
*/
@Schema(description="用户职位关系表")
@Data
@TableName("sys_user_position")
public class SysUserPosition implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@Schema(description = "主键")
private String id;
/**用户id*/
@Excel(name = "用户id", width = 15)
@Schema(description = "用户id")
private String userId;
/**职位id*/
@Schema(description = "职位id")
private String positionId;
/**创建人*/
@Schema(description = "创建人")
private String createBy;
/**创建时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "创建时间")
private Date createTime;
/**修改人*/
@Schema(description = "修改人")
private String updateBy;
/**修改时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern="yyyy-MM-dd")
@Schema(description = "修改时间")
private Date updateTime;
}

View File

@ -1,40 +0,0 @@
package org.jeecg.modules.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.system.entity.SysPosition;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
* @Description: 职务表
* @Author: jeecg-boot
* @Date: 2019-09-19
* @Version: V1.0
*/
public interface SysPositionMapper extends BaseMapper<SysPosition> {
/**
* 通过用户id获取职位名称
* @param userId
* @return
*/
List<SysPosition> getPositionList(@Param("userId") String userId);
/**
* 通过职位id获取职位名称
* @param postList
* @return
*/
List<SysPosition> getPositionName(@Param("postList") List<String> postList);
/**
* 根据职位名称获取职位id
* @param name
* @return
*/
@Select("SELECT id FROM sys_position WHERE name = #{name} AND tenant_id = #{tenantId} ORDER BY create_time DESC")
List<String> getPositionIdByName(@Param("name") String name, @Param("tenantId") Integer tenantId, @Param("page") Page<SysPosition> page);
}

View File

@ -1,86 +0,0 @@
package org.jeecg.modules.system.mapper;
import java.util.List;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.entity.SysUserPosition;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.system.vo.SysUserPositionVo;
/**
* @Description: 用户职位关系表
* @Author: jeecg-boot
* @Date: 2023-02-14
* @Version: V1.0
*/
public interface SysUserPositionMapper extends BaseMapper<SysUserPosition> {
/**
* 获取职位用户列表
* @param page
* @param positionId
* @return
*/
List<SysUser> getPositionUserList(@Param("page") Page<SysUser> page, @Param("positionId") String positionId);
/**
* 获取成员是否存在职位中
* @param userId
* @param positionId
* @return
*/
@Select("SELECT count(*) FROM sys_user_position WHERE user_id = #{userId} and position_id = #{positionId}")
Long getUserPositionCount(@Param("userId") String userId, @Param("positionId") String positionId);
/**
* 通过职位id删除用户职位关系表
* @param positionId
*/
@Delete("DELETE FROM sys_user_position WHERE position_id = #{positionId} ")
void removeByPositionId(@Param("positionId") String positionId);
/**
* 职位列表移除成员
* @param userIdList
* @param positionId
*/
void removePositionUser(@Param("userIdList") List<String> userIdList, @Param("positionId") String positionId);
/**
* 根据用户id查询职位id
* @param userId
* @return
*/
List<String> getPositionIdByUserId(@Param("userId") String userId);
/**
* 根据用户ID和租户ID获取职位id
* @param userId
* @param tenantId
* @return
*/
@InterceptorIgnore(tenantLine = "true")
List<String> getPositionIdByUserTenantId(@Param("userId")String userId, @Param("tenantId")Integer tenantId);
/**
* 根据用户id获取用户职位
* @param userIdList
* @param tenantId
* @return
*/
List<SysUserPositionVo> getPositionIdByUsersTenantId(@Param("userIdList") List<SysUser> userIdList, @Param("tenantId") Integer tenantId);
/**
* 根据职位名称和租户id删除用户职位关系表
* @param positionNames
* @param tenantId
* @param userId
*/
void deleteUserPosByNameAndTenantId(@Param("positionNames") List<String> positionNames, @Param("tenantId") Integer tenantId, @Param("userId") String userId);
}

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.system.mapper.SysPositionMapper">
<!--通过用户id获取职位数据-->
<select id="getPositionList" resultType="org.jeecg.modules.system.entity.SysPosition">
SELECT sp.name,sp.id FROM sys_position sp
INNER JOIN sys_user_position sup on sp.id = sup.position_id
WHERE
sup.user_id = #{userId}
</select>
<!--通过职位id获取职位名称-->
<select id="getPositionName" resultType="org.jeecg.modules.system.entity.SysPosition">
SELECT name FROM sys_position
WHERE
id IN
<foreach collection="postList" index="index" item="positionId" open="(" separator="," close=")">
#{positionId}
</foreach>
</select>
</mapper>

View File

@ -1,68 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.system.mapper.SysUserPositionMapper">
<!--获取职位用户列表-->
<select id="getPositionUserList" resultType="org.jeecg.modules.system.entity.SysUser">
SELECT su.realname,su.id,su.username,su.email,su.phone,su.work_no
FROM sys_user_position sup
INNER JOIN sys_user su on sup.user_id = su.id and su.del_flag = 0
WHERE
sup.position_id = #{positionId}
ORDER BY sup.create_time DESC
</select>
<!--根据用户id查询职位id-->
<select id="getPositionIdByUserId" resultType="java.lang.String">
SELECT position_id FROM sys_user_position
WHERE
user_id = #{userId}
ORDER BY create_time DESC
</select>
<!--根据用户ID和租户ID获取职位id-->
<select id="getPositionIdByUserTenantId" resultType="java.lang.String">
SELECT sp.id FROM sys_user_position sup
LEFT JOIN sys_position sp ON sup.position_id = sp.id
WHERE
sup.user_id = #{userId}
<if test="tenantId != null and tenantId != 0">
AND sp.tenant_id = #{tenantId}
</if>
</select>
<!--职位列表移除成员-->
<update id="removePositionUser">
DELETE FROM sys_user_position
WHERE
position_id = #{positionId}
AND user_id IN
<foreach collection="userIdList" index="index" item="userId" open="(" separator="," close=")">
#{userId}
</foreach>
</update>
<!--根据用户id获取用户职位-->
<select id="getPositionIdByUsersTenantId" resultType="org.jeecg.modules.system.vo.SysUserPositionVo">
SELECT sp.name,sup.user_id FROM sys_position sp
RIGHT JOIN sys_user_position sup on sup.position_id = sp.id
WHERE sup.user_id IN
<foreach collection="userIdList" index="index" item="userIds" open="(" separator="," close=")">
#{userIds.id}
</foreach>
AND sp.tenant_id = #{tenantId}
</select>
<!--根据职位名称和租户id删除用户职位关系表-->
<delete id="deleteUserPosByNameAndTenantId">
DELETE FROM sys_user_position
WHERE user_id = #{userId}
AND position_id in (
SELECT id FROM sys_position where name in
<foreach collection="positionNames" index="index" item="name" open="(" separator="," close=")">
#{name}
</foreach>
AND tenant_id = #{tenantId}
)
</delete>
</mapper>

View File

@ -15,7 +15,6 @@ public class SysUserSysDepartModel {
private String id;
private String realname;
private String workNo;
private String post;
private String telephone;
private String email;
private String phone;

View File

@ -150,18 +150,6 @@ public interface IAuthUserService extends IService<SysUser> {
*/
public Map<String,String> getDepNamesByUserIds(List<String> userIds);
/**
* 根据部门 Id QueryWrapper 查询
*
* @param page
* @param departId
* @param queryWrapper
* @return
*/
//update-begin-author:taoyan date:2022-9-13 for: VUEN-2245漏洞发现新漏洞待处理20220906 ----sql注入 方法没有使用注掉
// public IPage<SysUser> getUserByDepartIdAndQueryWrapper(Page<SysUser> page, String departId, QueryWrapper<SysUser> queryWrapper);
//update-end-author:taoyan date:2022-9-13 for: VUEN-2245漏洞发现新漏洞待处理20220906 ----sql注入 方法没有使用注掉
/**
* 根据 orgCode 查询用户包括子部门下的用户
*
@ -487,13 +475,4 @@ public interface IAuthUserService extends IService<SysUser> {
* @return
*/
IPage<SysUser> getProcessUserList(Page<SysUser> page, String orgCode, String keyword, List<String> excludeUserIdList);
/**
* 获取职位用户列表
* @param page
* @param positionId
* @return
*/
List<SysUser> getPositionUserList(Page<SysUser> page, String positionId);
}

View File

@ -1,36 +0,0 @@
package org.jeecg.modules.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.modules.system.entity.SysPosition;
import java.util.List;
/**
* @Description: 职务表
* @Author: jeecg-boot
* @Date: 2019-09-19
* @Version: V1.0
*/
public interface ISysPositionService extends IService<SysPosition> {
/**
* 通过code查询
* @param code 职务编码
* @return SysPosition
*/
SysPosition getByCode(String code);
/**
* 通过用户id获取职位名称列表
* @param userId
* @return
*/
List<SysPosition> getPositionList(String userId);
/**
* 获取职位名称
* @param postList
* @return
*/
String getPositionName(List<String> postList);
}

View File

@ -1,43 +0,0 @@
package org.jeecg.modules.system.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.entity.SysUserPosition;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 用户职位关系表
* @Author: jeecg-boot
* @Date: 2023-02-14
* @Version: V1.0
*/
public interface ISysUserPositionService extends IService<SysUserPosition> {
/**
* 获取职位用户列表
* @param page
* @param positionId
* @return
*/
IPage<SysUser> getPositionUserList(Page<SysUser> page, String positionId);
/**
* 添加成员到用户职位关系表
* @param userIds
* @param positionId
*/
void saveUserPosition(String userIds, String positionId);
/**
* 通过职位id删除用户职位关系表
* @param positionId
*/
void removeByPositionId(String positionId);
/**
* 移除成员
* @param userIds
* @param positionId
*/
void removePositionUser(String userIds, String positionId);
}

View File

@ -1,89 +0,0 @@
package org.jeecg.modules.system.service;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo;
import java.util.List;
/**
* 第三方App对接
* @author: jeecg-boot
*/
public interface IThirdAppService {
/**
* 获取AccessToken
* @return String
*/
String getAccessToken();
/**
* 将本地部门同步到第三方App<br>
* 同步方向本地 --> 第三方APP
* 同步逻辑<br>
* 1. 先判断是否同步过有则修改无则创建<br>
* 2. 本地没有但第三方App里有则删除第三方App里的
* @param ids
* @return 成功返回true
*/
SyncInfoVo syncLocalDepartmentToThirdApp(String ids);
// /**
// * 将第三方App部门同步到本地<br>
// * 同步方向第三方APP --> 本地
// * 同步逻辑<br>
// * 1. 先判断是否同步过有则修改无则创建<br>
// * 2. 本地没有但第三方App里有则删除第三方App里的
// * @param ids
// * @return 成功返回true
// */
// SyncInfoVo syncThirdAppDepartmentToLocal(String ids);
/**
* 将本地用户同步到第三方App<br>
* 同步方向本地 --> 第三方APP <br>
* 同步逻辑先判断是否同步过有则修改无则创建<br>
* 注意同步人员的状态比如离职禁用逻辑删除等
* (特殊点1目前逻辑特意做的不删除用户防止企业微信提前上线用户已经存在但是平台无此用户
* 企业微信支持禁用账号钉钉不支持
* 2企业微信里面是手机号激活只能用户自己改不允许通过接口改)
* @param ids
* @return 成功返回空数组失败返回错误信息
*/
SyncInfoVo syncLocalUserToThirdApp(String ids);
// /**
// * 将第三方App用户同步到本地<br>
// * 同步方向第三方APP --> 本地 <br>
// * 同步逻辑先判断是否同步过有则修改无则创建<br>
// * 注意同步人员的状态比如离职禁用逻辑删除等
// *
// * @return 成功返回空数组失败返回错误信息
// */
// SyncInfoVo syncThirdAppUserToLocal();
/**
* 根据本地用户ID删除第三方APP的用户
*
* @param userIdList 本地用户ID列表
* @return 0表示成功其他值表示失败
*/
int removeThirdAppUser(List<String> userIdList);
/**
* 发送消息
*
* @param message
* @param verifyConfig 是否验证配置未启用的APP会拒绝发送
* @return
*/
boolean sendMessage(MessageDTO message, boolean verifyConfig);
/**
* 发送消息
* @param message
* @return boolean
*/
boolean sendMessage(MessageDTO message);
}

View File

@ -16,9 +16,6 @@ import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.annotations.Param;
import org.jeecg.common.api.dto.message.MessageDTO;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.config.TenantContext;
import org.jeecg.common.constant.CacheConstant;
@ -26,9 +23,7 @@ import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.FillRuleConstant;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.constant.enums.DySmsEnum;
import org.jeecg.common.constant.enums.MessageTypeEnum;
import org.jeecg.common.constant.enums.RoleIndexConfigEnum;
import org.jeecg.common.constant.enums.SysAnnmentTypeEnum;
import org.jeecg.common.desensitization.annotation.SensitiveEncode;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.vo.LoginUser;
@ -108,10 +103,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
private BaseCommonService baseCommonService;
@Autowired
ISysRoleIndexService sysRoleIndexService;
@Autowired
private SysUserPositionMapper sysUserPositionMapper;
@Autowired
private SysPositionMapper sysPositionMapper;
@Autowired
private SystemSendMsgHandle systemSendMsgHandle;
@ -121,7 +112,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
@Override
public Result<IPage<SysUser>> queryPageList(HttpServletRequest req, QueryWrapper<SysUser> queryWrapper, Integer pageSize, Integer pageNo) {
Result<IPage<SysUser>> result = new Result<IPage<SysUser>>();
//update-begin-Author:wangshuai--Date:20211119--for:vue3通过部门id查询用户通过code查询id
//部门ID
String departId = req.getParameter("departId");
if (oConvertUtils.isNotEmpty(departId)) {
@ -129,13 +119,11 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
query.eq(SysUserDepart::getDepId, departId);
List<SysUserDepart> list = sysUserDepartMapper.selectList(query);
List<String> userIds = list.stream().map(SysUserDepart::getUserId).collect(Collectors.toList());
//update-begin---author:wangshuai ---date:20220322 for[issues/I4XTYB]查询用户时当部门id 下没有分配用户时接口报错------------
if (oConvertUtils.listIsNotEmpty(userIds)) {
queryWrapper.in("id", userIds);
} else {
return Result.OK();
}
//update-end---author:wangshuai ---date:20220322 for[issues/I4XTYB]查询用户时当部门id 下没有分配用户时接口报错------------
}
//用户ID
String code = req.getParameter("code");
@ -143,29 +131,10 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
queryWrapper.in("id", Arrays.asList(code.split(",")));
pageSize = code.split(",").length;
}
//update-end-Author:wangshuai--Date:20211119--for:vue3通过部门id查询用户通过code查询id
//update-begin-author:taoyan--date:20220104--for: JTC-372 用户冻结问题 online授权用户组件选择用户都能看到被冻结的用户
String status = req.getParameter("status");
if (oConvertUtils.isNotEmpty(status)) {
queryWrapper.eq("status", Integer.parseInt(status));
}
//update-end-author:taoyan--date:20220104--for: JTC-372 用户冻结问题 online授权用户组件选择用户都能看到被冻结的用户
//update-begin---author:wangshuai---date:2024-03-08---for:QQYUN-8110在线通讯录支持设置权限(只能看分配的技术支持)---
String tenantId = TokenUtils.getTenantIdByRequest(req);
String lowAppId = TokenUtils.getLowAppIdByRequest(req);
// Object bean = ResourceUtil.getImplementationClass(DataEnhanceEnum.getClassPath(tenantId,lowAppId));
// if(null != bean){
// UserFilterEnhance userEnhanceService = (UserFilterEnhance) bean;
// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
// List<String> userIds = userEnhanceService.getUserIds(sysUser.getId());
// if(CollectionUtil.isNotEmpty(userIds)){
// queryWrapper.in("id", userIds);
// }
// }
//update-end---author:wangshuai---date:2024-03-08---for:QQYUN-8110在线通讯录支持设置权限(只能看分配的技术支持)---
//TODO 外部模拟登陆临时账号列表不显示
queryWrapper.ne("username", "_reserve_user_external");
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
@ -183,13 +152,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
if (MybatisPlusSaasConfig.OPEN_SYSTEM_TENANT_CONTROL) {
posTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);;
}
//查询用户职位关系表(获取租户下面的)
//update-begin---author:wangshuai---date:2023-11-15---for:QQYUN-7028用户职务保存后未回显---
List<String> positionList = sysUserPositionMapper.getPositionIdByUserTenantId(item.getId(),posTenantId);
//update-end---author:wangshuai---date:2023-11-15---for:QQYUN-7028用户职务保存后未回显---
//update-end---author:wangshuai ---date:20230228 for[QQYUN-4354]加入更多字段当前加入时间应该取当前租户的/职位也是当前租户下的------------
item.setPost(CommonUtils.getSplitText(positionList,SymbolConstant.COMMA));
//update-end---author:wangshuai---date:2023-10-08---for:QQYUN-6668钉钉部门和用户同步我怎么知道哪些用户是双向绑定成功的---
});
}
@ -514,12 +476,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
@Override
public IPage<SysUserSysDepartModel> queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) {
List<SysUserSysDepartModel> list = queryUserDepartList(orgCode, userParams);
//根据部门orgCode查询部门需要将职位id进行传递
for (SysUserSysDepartModel model:list) {
List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(model.getId());
model.setPost(CommonUtils.getSplitText(positionList,SymbolConstant.COMMA));
}
int current = (int)page.getCurrent(); // 当前页码
int size = (int)page.getSize(); // 每页大小
Integer total = list.size();
@ -615,8 +571,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
for (SysUser sysUser : userRoleList.getRecords()) {
//设置部门
sysUser.setOrgCodeTxt(useDepNames.get(sysUser.getId()));
//设置用户职位id
this.userPositionId(sysUser);
}
}
return userRoleList;
@ -810,9 +764,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
sysUserDepartMapper.insert(userDeaprt);
}
}
//step.4 保存职位
this.saveUserPosition(user.getId(),user.getPost());
}
@Override
@ -867,9 +818,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
// 更新手机号邮箱空字符串为 null
authUserMapper.updateNullByEmptyString("email");
authUserMapper.updateNullByEmptyString("phone");
//step.5 修改职位
this.editUserPosition(user.getId(),user.getPost());
}
@Override
@ -889,8 +837,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
}
LoginUser loginUser = new LoginUser();
SysUser sysUser = authUserMapper.getUserByName(username);
//设置职位id
this.userPositionId(sysUser);
if(sysUser==null) {
return null;
}
@ -908,19 +854,8 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
List<String> idList = JSONArray.parseArray(userIds, String.class);
//部门
String selecteddeparts = json.getString("selecteddeparts");
//职位
String post = json.getString("post");
//工作地点? 没有这个字段
String workAddress = json.getString("workAddress");
//批量修改用户职位
if(oConvertUtils.isNotEmpty(post)) {
//update-begin---author:wangshuai ---date:20230220 for[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------
//修改职位用户关系表
for (String userId:idList) {
this.editUserPosition(userId,post);
}
//update-end---author:wangshuai ---date:20230220 for[QQYUN-3980]组织管理中 职位功能 职位表加租户id 加职位-用户关联表------------
}
if(oConvertUtils.isNotEmpty(selecteddeparts)) {
//查询当前租户的部门列表
Integer currentTenantId = oConvertUtils.getInt(TenantContext.getTenant(), 0);
@ -1199,8 +1134,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
this.updateTenantDepart(user, tenantId, departs);
}
//update-end---author:wangshuai ---date:20230424 forQQYUN-5251人员与部门部门删除不掉------------
//修改用户下的职位
this.editUserPosition(sysUser.getId(),sysUser.getPost());
}
/**
@ -1260,50 +1193,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
System.out.println("修改用户部门用时:" + (endTime2 - startTime) + "ms");
}
/**
* 保存用户职位
*
* @param userId
* @param positionIds
*/
private void saveUserPosition(String userId, String positionIds) {
if (oConvertUtils.isNotEmpty(positionIds)) {
String[] positionIdArray = positionIds.split(SymbolConstant.COMMA);
for (String postId : positionIdArray) {
SysUserPosition userPosition = new SysUserPosition();
userPosition.setUserId(userId);
userPosition.setPositionId(postId);
sysUserPositionMapper.insert(userPosition);
}
}
}
/**
* 编辑用户职位
*
* @param userId
* @param positionIds
*/
private void editUserPosition(String userId, String positionIds) {
//先删除
LambdaQueryWrapper<SysUserPosition> query = new LambdaQueryWrapper<>();
query.eq(SysUserPosition::getUserId, userId);
sysUserPositionMapper.delete(query);
//后新增数据
this.saveUserPosition(userId, positionIds);
}
/**
* 设置用户职位id(已逗号拼接起来)
* @param sysUser
*/
private void userPositionId(SysUser sysUser) {
if(null != sysUser){
List<String> positionList = sysUserPositionMapper.getPositionIdByUserId(sysUser.getId());
sysUser.setPost(CommonUtils.getSplitText(positionList,SymbolConstant.COMMA));
}
}
/**
* 查询用户当前登录部门的id
*
@ -1394,8 +1283,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
List<SysUser> userList = authUserMapper.selectList(userWrapper);
//获取部门名称
List<SysUserDepVo> userDepVos = sysDepartMapper.getUserDepartByTenantUserId(userList, tenantId);
//获取职位
List<SysUserPositionVo> positionVos = sysUserPositionMapper.getPositionIdByUsersTenantId(userList, tenantId);
// step2 根据用户id进行分类
//循环用户数据将数据整合导出
List<AppExportUserVo> exportUserVoList = new ArrayList<>();
@ -1405,8 +1292,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
String departNames = userDepVos.stream().filter(item -> item.getUserId().equals(sysUser.getId()))
.map(SysUserDepVo::getDepartName).collect(Collectors.joining(SymbolConstant.SEMICOLON));
exportUserVo.setDepart(departNames);
String posNames = positionVos.stream().filter(item -> item.getUserId().equals(sysUser.getId())).map(SysUserPositionVo::getName).collect(Collectors.joining(SymbolConstant.SEMICOLON));
exportUserVo.setPosition(posNames);
exportUserVoList.add(exportUserVo);
}
//step3 封装导出excel参数
@ -1459,7 +1344,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
String phone = sysUserExcel.getPhone();
String realname = sysUserExcel.getRealname();
String depart = sysUserExcel.getDepart();
String position = sysUserExcel.getPosition();
SysUser sysUser = new SysUser();
//判断id是否存在如果存在的话就是更新
if (oConvertUtils.isNotEmpty(id)) {
@ -1509,10 +1393,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
authUserMapper.insert(sysUser);
}
}
//新增或编辑职位
if (oConvertUtils.isNotEmpty(position)) {
this.addOrEditPosition(sysUser.getId(), position, isEdit, tenantId, positionMap);
}
//新增的时候才可以添加部门
if (!isEdit) {
//新增或编辑部门
@ -1559,67 +1439,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
return null;
}
/**
* 新增或者编辑职位
*
* @param userId 用户id
* @param position 职位名称 /拼接
* @param isEdit 新增或编辑
* @param positionMap 职位map key为namevalue为职位id
*/
private void addOrEditPosition(String userId, String position, Boolean isEdit, Integer tenantId, Map<String, String> positionMap) {
Page<SysPosition> page = new Page<>(1, 1);
String[] positions = position.split(SymbolConstant.SEMICOLON);
List<String> positionList = Arrays.asList(positions);
positionList = positionList.stream().distinct().collect(Collectors.toList());
//删除当前租户下的职位根据职位名称租户id用户id
sysUserPositionMapper.deleteUserPosByNameAndTenantId(positionList, tenantId, userId);
//循环需要添加或修改的数据
for (String pos : positionList) {
String posId = "";
if (positionMap.containsKey(pos)) {
posId = positionMap.get(pos);
} else {
List<String> namePage = sysPositionMapper.getPositionIdByName(pos, tenantId, page);
if (CollectionUtil.isNotEmpty(namePage)) {
posId = namePage.get(0);
positionMap.put(pos, posId);
}
}
//职位id不为空直接新增
if (oConvertUtils.isNotEmpty(posId)) {
this.addSysUserPosition(userId, posId);
continue;
}
//不是编辑的情况下职位才会新增
if (!isEdit) {
//新增职位和用户职位关系
SysPosition sysPosition = new SysPosition();
sysPosition.setName(pos);
sysPosition.setCode(RandomUtil.randomString(10));
sysPosition.setTenantId(tenantId);
sysPositionMapper.insert(sysPosition);
positionMap.put(pos, sysPosition.getId());
this.addSysUserPosition(userId, sysPosition.getId());
}
}
}
/**
* 添加用户职位
*/
private void addSysUserPosition(String userId, String positionId) {
Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId);
if(count == 0){
SysUserPosition userPosition = new SysUserPosition();
userPosition.setUserId(userId);
userPosition.setPositionId(positionId);
sysUserPositionMapper.insert(userPosition);
}
}
/**
* 新增或编辑部门
*
@ -1951,17 +1770,6 @@ public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, SysUser> im
return pageUser(page, sysUsers);
}
@Override
public List<SysUser> getPositionUserList(Page<SysUser> page, String positionId){
List<SysUserPosition> sysUserPositions =
sysUserPositionMapper.selectList(new LambdaQueryWrapper<SysUserPosition>().eq(SysUserPosition::getPositionId, positionId).orderByAsc(SysUserPosition::getCreateTime));
List<String> userIds = sysUserPositions.stream().map(SysUserPosition::getUserId).collect(Collectors.toList());
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<SysUser>();
queryWrapper.eq(SysUser::getDelFlag,0);
queryWrapper.in(SysUser::getId,userIds);
return authUserMapper.selectList(queryWrapper);
}
public IPage<SysUser> pageUser(Page<SysUser> page, List<SysUser> sysUsers){
//计算分页参数
int current = (int)page.getCurrent(); // 当前页码

View File

@ -125,9 +125,6 @@ public class SysBaseApiImpl implements ISysBaseAPI {
@Autowired
private ISysUserRoleService sysUserRoleService;
@Autowired
private ISysUserPositionService sysUserPositionService;
@Autowired
private IDictTableWhiteListHandler dictTableWhiteListHandler;
@ -1711,13 +1708,6 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return null;
}
@Override
public List<String> queryUserIdsByPositionIds(List<String> positionIds) {
QueryWrapper<SysUserPosition> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().select(SysUserPosition::getUserId).in(true,SysUserPosition::getPositionId,positionIds);
return sysUserPositionService.listObjs(queryWrapper,e->e.toString());
}
//update-begin-author:taoyan date:2023-2-21 for: 解决参数顺序问题
/**
* 获取带参数的报表地址因为多个参数可能顺序会变所以要将参数顺序重排获取所有可能的地址集合

View File

@ -1,43 +0,0 @@
package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.modules.system.entity.SysPosition;
import org.jeecg.modules.system.mapper.SysPositionMapper;
import org.jeecg.modules.system.service.ISysPositionService;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description: 职务表
* @Author: jeecg-boot
* @Date: 2019-09-19
* @Version: V1.0
*/
@Service
public class SysPositionServiceImpl extends ServiceImpl<SysPositionMapper, SysPosition> implements ISysPositionService {
@Override
public SysPosition getByCode(String code) {
LambdaQueryWrapper<SysPosition> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysPosition::getCode, code);
return super.getOne(queryWrapper);
}
@Override
public List<SysPosition> getPositionList(String userId) {
return this.baseMapper.getPositionList(userId);
}
@Override
public String getPositionName(List<String> postList) {
List<SysPosition> positionNameList = this.baseMapper.getPositionName(postList);
if (null != positionNameList && positionNameList.size()>0) {
return positionNameList.stream().map(SysPosition::getName).collect(Collectors.joining(SymbolConstant.COMMA));
}
return "";
}
}

View File

@ -1,84 +0,0 @@
package org.jeecg.modules.system.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.constant.SymbolConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.system.entity.SysPosition;
import org.jeecg.modules.system.entity.SysUser;
import org.jeecg.modules.system.entity.SysUserPosition;
import org.jeecg.modules.system.mapper.AuthUserMapper;
import org.jeecg.modules.system.mapper.SysUserPositionMapper;
import org.jeecg.modules.system.service.IAuthUserService;
import org.jeecg.modules.system.service.ISysUserPositionService;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description: 用户职位关系表
* @Author: jeecg-boot
* @Date: 2023-02-14
* @Version: V1.0
*/
@Service
public class SysUserPositionServiceImpl extends ServiceImpl<SysUserPositionMapper, SysUserPosition> implements ISysUserPositionService {
@Autowired
private SysUserPositionMapper sysUserPositionMapper;
@Autowired
private AuthUserMapper authUserMapper;
@Autowired
private IAuthUserService authUserService;
@Override
public IPage<SysUser> getPositionUserList(Page<SysUser> page, String positionId) {
return page.setRecords(authUserService.getPositionUserList(page, positionId));
}
@Override
public void saveUserPosition(String userIds, String positionId) {
String[] userIdArray = userIds.split(SymbolConstant.COMMA);
//存在的用户
StringBuilder userBuilder = new StringBuilder();
for (String userId : userIdArray) {
//获取成员是否存在于职位中
Long count = sysUserPositionMapper.getUserPositionCount(userId, positionId);
if (count == 0) {
//插入到用户职位关系表里面
SysUserPosition userPosition = new SysUserPosition();
userPosition.setPositionId(positionId);
userPosition.setUserId(userId);
sysUserPositionMapper.insert(userPosition);
} else {
userBuilder.append(userId).append(SymbolConstant.COMMA);
}
}
//如果用户id存在说明已存在用户职位关系表中,提示用户已存在
String uIds = userBuilder.toString();
if (oConvertUtils.isNotEmpty(uIds)) {
//查询用户列表
List<SysUser> sysUsers = authUserMapper.selectBatchIds(Arrays.asList(uIds.split(SymbolConstant.COMMA)));
String realnames = sysUsers.stream().map(SysUser::getRealname).collect(Collectors.joining(SymbolConstant.COMMA));
throw new JeecgBootException(realnames + "已存在该职位中");
}
}
@Override
public void removeByPositionId(String positionId) {
sysUserPositionMapper.removeByPositionId(positionId);
}
@Override
public void removePositionUser(String userIds, String positionId) {
String[] userIdArray = userIds.split(SymbolConstant.COMMA);
sysUserPositionMapper.removePositionUser(Arrays.asList(userIdArray),positionId);
}
}

View File

@ -22,10 +22,6 @@ public class AppExportUserVo {
@Excel(name="姓名",width=30)
private String realname;
/**职位*/
@Excel(name = "职位",width = 30)
private String position;
/**部门*/
@Excel(name = "部门",width = 30)
private String depart;

View File

@ -1,89 +0,0 @@
package org.jeecg.modules.system.vo.thirdapp;
import com.jeecg.dingtalk.api.department.vo.Department;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* 钉钉树结构的部门
*
* @author sunjianlei
*/
public class JdtDepartmentTreeVo extends Department {
private List<JdtDepartmentTreeVo> children;
public List<JdtDepartmentTreeVo> getChildren() {
return children;
}
public JdtDepartmentTreeVo setChildren(List<JdtDepartmentTreeVo> children) {
this.children = children;
return this;
}
public JdtDepartmentTreeVo(Department department) {
BeanUtils.copyProperties(department, this);
}
/**
* 是否有子项
*/
public boolean hasChildren() {
return children != null && children.size() > 0;
}
@Override
public String toString() {
return "JwDepartmentTree{" +
"children=" + children +
"} " + super.toString();
}
/**
* 静态辅助方法将list转为tree结构
*/
public static List<JdtDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// 先找出所有的父级
List<JdtDepartmentTreeVo> treeList = getByParentId(1, allDepartment);
Optional<Department> departmentOptional = allDepartment.stream().filter(item -> item.getParent_id() == null).findAny();
Department department = new Department();
//判断是否找到数据
if(departmentOptional.isPresent()){
department = departmentOptional.get();
}
getChildrenRecursion(treeList, allDepartment);
//update-begin---author:wangshuai---date:2024-04-10---for:issues/6017钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
JdtDepartmentTreeVo treeVo = new JdtDepartmentTreeVo(department);
treeVo.setChildren(treeList);
List<JdtDepartmentTreeVo> list = new ArrayList<>();
list.add(treeVo);
return list;
//update-end---author:wangshuai---date:2024-04-10---for:issues/6017钉钉同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
}
private static List<JdtDepartmentTreeVo> getByParentId(Integer parentId, List<Department> allDepartment) {
List<JdtDepartmentTreeVo> list = new ArrayList<>();
for (Department department : allDepartment) {
if (parentId.equals(department.getParent_id())) {
list.add(new JdtDepartmentTreeVo(department));
}
}
return list;
}
private static void getChildrenRecursion(List<JdtDepartmentTreeVo> treeList, List<Department> allDepartment) {
for (JdtDepartmentTreeVo departmentTree : treeList) {
// 递归寻找子级
List<JdtDepartmentTreeVo> children = getByParentId(departmentTree.getDept_id(), allDepartment);
if (children.size() > 0) {
departmentTree.setChildren(children);
getChildrenRecursion(children, allDepartment);
}
}
}
}

View File

@ -1,89 +0,0 @@
package org.jeecg.modules.system.vo.thirdapp;
import com.jeecg.qywx.api.department.vo.Department;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
/**
* 企业微信树结构的部门
*
* @author sunjianlei
*/
public class JwDepartmentTreeVo extends Department {
private List<JwDepartmentTreeVo> children;
public List<JwDepartmentTreeVo> getChildren() {
return children;
}
public JwDepartmentTreeVo setChildren(List<JwDepartmentTreeVo> children) {
this.children = children;
return this;
}
public JwDepartmentTreeVo(Department department) {
BeanUtils.copyProperties(department, this);
}
/**
* 是否有子项
*/
public boolean hasChildren() {
return children != null && children.size() > 0;
}
@Override
public String toString() {
return "JwDepartmentTree{" +
"children=" + children +
"} " + super.toString();
}
/**
* 静态辅助方法将list转为tree结构
*/
public static List<JwDepartmentTreeVo> listToTree(List<Department> allDepartment) {
// 先找出所有的父级
List<JwDepartmentTreeVo> treeList = getByParentId("1", allDepartment);
Optional<Department> departmentOptional = allDepartment.stream().filter(item -> "0".equals(item.getParentid())).findAny();
Department department = new Department();
//判断是否找到数据
if(departmentOptional.isPresent()){
department = departmentOptional.get();
}
getChildrenRecursion(treeList, allDepartment);
//update-begin---author:wangshuai---date:2024-04-10---for:issues/6017企业微信同步部门时没有最顶层的部门名同步用户时用户没有部门信息---
JwDepartmentTreeVo treeVo = new JwDepartmentTreeVo(department);
treeVo.setChildren(treeList);
List<JwDepartmentTreeVo> list = new ArrayList<>();
list.add(treeVo);
return list;
//update-begin---author:wangshuai---date:2024-04-10---for:issues/6017企业微信部门时没有最顶层的部门名同步用户时用户没有部门信息---
}
private static List<JwDepartmentTreeVo> getByParentId(String parentId, List<Department> allDepartment) {
List<JwDepartmentTreeVo> list = new ArrayList<>();
for (Department department : allDepartment) {
if (parentId.equals(department.getParentid())) {
list.add(new JwDepartmentTreeVo(department));
}
}
return list;
}
private static void getChildrenRecursion(List<JwDepartmentTreeVo> treeList, List<Department> allDepartment) {
for (JwDepartmentTreeVo departmentTree : treeList) {
// 递归寻找子级
List<JwDepartmentTreeVo> children = getByParentId(departmentTree.getId(), allDepartment);
if (children.size() > 0) {
departmentTree.setChildren(children);
getChildrenRecursion(children, allDepartment);
}
}
}
}

View File

@ -1,23 +0,0 @@
package org.jeecg.modules.system.vo.thirdapp;
import lombok.Data;
import java.util.List;
/**
* 企业微信的实现类
*/
@Data
public class JwSysUserDepartVo {
/**
* 企业微信和用户的映射类
*/
private List<JwUserDepartVo> jwUserDepartVos;
/**
* 用户列表
*/
private List<JwUserDepartVo> userList;
}

View File

@ -1,48 +0,0 @@
package org.jeecg.modules.system.vo.thirdapp;
import lombok.Data;
/**
* @Description: 企业微信用户同步工具类
*
* @author: wangshuai
* @date: 2023/11/28 18:17
*/
@Data
public class JwUserDepartVo {
/**
* 用户id
*/
private String userId;
/**
* 用户头像
*/
private String avatar;
/**
* 真实姓名
*/
private String realName;
/**
* 企业微信的名字
*/
private String wechatRealName;
/**
* 企业微信对应的部门
*/
private String wechatDepartId;
/**
* 企业微信对应的用户id
*/
private String wechatUserId;
/**
* 第三方id
*/
private String thirdId;
}

View File

@ -1,44 +0,0 @@
package org.jeecg.modules.system.vo.thirdapp;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* 同步结果信息包含成功的信息和失败的信息
*
* @author sunjianlei
*/
@Data
public class SyncInfoVo {
/**
* 成功的信息
*/
private List<String> successInfo;
/**
* 失败的信息
*/
private List<String> failInfo;
public SyncInfoVo() {
this.successInfo = new ArrayList<>();
this.failInfo = new ArrayList<>();
}
public SyncInfoVo(List<String> successInfo, List<String> failInfo) {
this.successInfo = successInfo;
this.failInfo = failInfo;
}
public SyncInfoVo addSuccessInfo(String info) {
this.successInfo.add(info);
return this;
}
public SyncInfoVo addFailInfo(String info) {
this.failInfo.add(info);
return this;
}
}