提交 d9d73c56 authored 作者: hzh's avatar hzh

Merge branch 'dev'

...@@ -24,11 +24,11 @@ public interface IBaseService<V, B, T> { ...@@ -24,11 +24,11 @@ public interface IBaseService<V, B, T> {
V queryById(Long id); V queryById(Long id);
/** /**
* 分页查询活动机票订单列表 * 分页查询
* *
* @param bo 查询条件 * @param bo 查询条件
* @param pageQuery 分页参数 * @param pageQuery 分页参数
* @return 活动机票订单分页列表 * @return 分页列表
*/ */
TableDataInfo<V> queryPageList(B bo, PageQuery pageQuery); TableDataInfo<V> queryPageList(B bo, PageQuery pageQuery);
......
...@@ -46,6 +46,7 @@ public class LoginHelper { ...@@ -46,6 +46,7 @@ public class LoginHelper {
public static final String MEMBER_ID = "memberId"; public static final String MEMBER_ID = "memberId";
public static final String USER_TYPE = "userType"; public static final String USER_TYPE = "userType";
public static final String PROJECT_ID = "projectId"; public static final String PROJECT_ID = "projectId";
public static final String PROJECT_DEPT_ID = "projectDeptId";
/** /**
* 登录系统 基于 设备类型 * 登录系统 基于 设备类型
...@@ -66,9 +67,6 @@ public class LoginHelper { ...@@ -66,9 +67,6 @@ public class LoginHelper {
.setExtra(USER_TYPE, loginUser.getUserType()) .setExtra(USER_TYPE, loginUser.getUserType())
); );
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
if (StringUtils.contains(loginUser.getUserType(), UserType.PROJECT_USER.getUserType())) {
StpUtil.getTokenSession().set(PROJECT_ID, Long.valueOf(StringUtils.splitList(loginUser.getUserType(), ":").get(1)));
}
} }
/** /**
...@@ -165,6 +163,25 @@ public class LoginHelper { ...@@ -165,6 +163,25 @@ public class LoginHelper {
} }
} }
/**
* 获取项目部门id
*/
public static Long getProjectDeptId() {
if (StringUtils.equals(getUserTypeStr(), UserType.SYS_USER.getUserType()) && getProjectId() == null) {
return getDeptId();
}
SaSession session = StpUtil.getTokenSession();
if (ObjectUtil.isNull(session)) {
return null;
}
Object projectDept = session.get(PROJECT_DEPT_ID);
if (projectDept == null) {
return null;
} else {
return Long.parseLong(projectDept.toString());
}
}
/** /**
* 获取客户端ID * 获取客户端ID
*/ */
...@@ -274,12 +291,19 @@ public class LoginHelper { ...@@ -274,12 +291,19 @@ public class LoginHelper {
* 动态设置项目id * 动态设置项目id
* *
* @param projectId 项目id * @param projectId 项目id
* @param deptId 部门id
*/ */
public static void dynamicProjectId(Long projectId) { public static void dynamicProjectId(Long projectId, Long deptId) {
if (projectId != null) { if (projectId != null) {
StpUtil.getTokenSession().set(PROJECT_ID, projectId); StpUtil.getTokenSession().set(PROJECT_ID, projectId);
if (deptId != null) {
StpUtil.getTokenSession().set(PROJECT_DEPT_ID, deptId);
} else {
StpUtil.getTokenSession().delete(PROJECT_DEPT_ID);
}
} else { } else {
StpUtil.getTokenSession().delete(PROJECT_ID); StpUtil.getTokenSession().delete(PROJECT_ID);
StpUtil.getTokenSession().delete(PROJECT_DEPT_ID);
} }
} }
} }
...@@ -178,6 +178,7 @@ public class OrderAirportServiceImpl extends AbstractBaseService<OrderAirportVo, ...@@ -178,6 +178,7 @@ public class OrderAirportServiceImpl extends AbstractBaseService<OrderAirportVo,
List<OrderAirportPay> orderPayList = payMapper.selectList(new LambdaQueryWrapper<OrderAirportPay>().in(OrderAirportPay::getOrderId, orderIds)); List<OrderAirportPay> orderPayList = payMapper.selectList(new LambdaQueryWrapper<OrderAirportPay>().in(OrderAirportPay::getOrderId, orderIds));
List<OrderAirportTicket> orderTicketList = ticketMapper.selectList(new LambdaQueryWrapper<OrderAirportTicket>().in(OrderAirportTicket::getOrderId, orderIds)); List<OrderAirportTicket> orderTicketList = ticketMapper.selectList(new LambdaQueryWrapper<OrderAirportTicket>().in(OrderAirportTicket::getOrderId, orderIds));
Long projectId = isAdd ? LoginHelper.getProjectId() : null; Long projectId = isAdd ? LoginHelper.getProjectId() : null;
Long projectDeptId = isAdd ? LoginHelper.getProjectDeptId() : null;
//更新数据 //更新数据
orderList.forEach(order -> { orderList.forEach(order -> {
scheduledExecutorService.execute(() -> { scheduledExecutorService.execute(() -> {
...@@ -312,6 +313,7 @@ public class OrderAirportServiceImpl extends AbstractBaseService<OrderAirportVo, ...@@ -312,6 +313,7 @@ public class OrderAirportServiceImpl extends AbstractBaseService<OrderAirportVo,
.map(o -> DateUtil.parse(o.getDepartTime(), "yyyy-MM-dd HH:mm")) .map(o -> DateUtil.parse(o.getDepartTime(), "yyyy-MM-dd HH:mm"))
.orElse(null) .orElse(null)
); );
invoice.setCreateDept(projectDeptId);
orderInvoicingService.save(invoice); orderInvoicingService.save(invoice);
}); });
} }
......
...@@ -177,6 +177,7 @@ public class OrderHotelServiceImpl extends AbstractBaseService<OrderHotelVo, Ord ...@@ -177,6 +177,7 @@ public class OrderHotelServiceImpl extends AbstractBaseService<OrderHotelVo, Ord
List<OrderHotelPsgInfo> orderPsgList = psgInfoMapper.selectList(new LambdaQueryWrapper<OrderHotelPsgInfo>().in(OrderHotelPsgInfo::getOrderId, orderIds)); List<OrderHotelPsgInfo> orderPsgList = psgInfoMapper.selectList(new LambdaQueryWrapper<OrderHotelPsgInfo>().in(OrderHotelPsgInfo::getOrderId, orderIds));
List<OrderHotelPayInfo> orderPayInfoList = payInfoMapper.selectList(new LambdaQueryWrapper<OrderHotelPayInfo>().in(OrderHotelPayInfo::getOrderId, orderIds)); List<OrderHotelPayInfo> orderPayInfoList = payInfoMapper.selectList(new LambdaQueryWrapper<OrderHotelPayInfo>().in(OrderHotelPayInfo::getOrderId, orderIds));
Long projectId = isAdd ? LoginHelper.getProjectId() : null; Long projectId = isAdd ? LoginHelper.getProjectId() : null;
Long projectDeptId = isAdd ? LoginHelper.getProjectDeptId() : null;
//更新数据 //更新数据
orderList.forEach(order -> { orderList.forEach(order -> {
scheduledExecutorService.execute(() -> { scheduledExecutorService.execute(() -> {
...@@ -281,6 +282,7 @@ public class OrderHotelServiceImpl extends AbstractBaseService<OrderHotelVo, Ord ...@@ -281,6 +282,7 @@ public class OrderHotelServiceImpl extends AbstractBaseService<OrderHotelVo, Ord
.setUseTime(Optional.ofNullable(order) .setUseTime(Optional.ofNullable(order)
.map(o -> DateUtil.parse(o.getCheckInDate(), "yyyy-MM-dd")) .map(o -> DateUtil.parse(o.getCheckInDate(), "yyyy-MM-dd"))
.orElse(null)); .orElse(null));
invoice.setCreateDept(projectDeptId);
orderInvoicingService.save(invoice); orderInvoicingService.save(invoice);
}); });
} }
......
...@@ -58,7 +58,6 @@ public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicin ...@@ -58,7 +58,6 @@ public class OrderInvoicingServiceImpl extends AbstractBaseService<OrderInvoicin
if (user != null) { if (user != null) {
bo.setUserType(user.getUserType()); bo.setUserType(user.getUserType());
bo.setCreateName(user.getNickName()); bo.setCreateName(user.getNickName());
bo.setCreateDept(user.getDeptId());
} }
bo.setProjectId(bo.getProjectId()); bo.setProjectId(bo.getProjectId());
bo.setCreateBy(bo.getUserId()); bo.setCreateBy(bo.getUserId());
......
...@@ -187,6 +187,7 @@ public class OrderTrainServiceImpl extends AbstractBaseService<OrderTrainVo, Ord ...@@ -187,6 +187,7 @@ public class OrderTrainServiceImpl extends AbstractBaseService<OrderTrainVo, Ord
List<OrderTrainRange> orderRangeList = rangeMapper.selectList(new LambdaQueryWrapper<OrderTrainRange>().in(OrderTrainRange::getOrderId, orderIds)); List<OrderTrainRange> orderRangeList = rangeMapper.selectList(new LambdaQueryWrapper<OrderTrainRange>().in(OrderTrainRange::getOrderId, orderIds));
List<OrderTrainTicket> orderTicketList = ticketMapper.selectList(new LambdaQueryWrapper<OrderTrainTicket>().in(OrderTrainTicket::getOrderId, orderIds)); List<OrderTrainTicket> orderTicketList = ticketMapper.selectList(new LambdaQueryWrapper<OrderTrainTicket>().in(OrderTrainTicket::getOrderId, orderIds));
Long projectId = isAdd ? LoginHelper.getProjectId() : null; Long projectId = isAdd ? LoginHelper.getProjectId() : null;
Long projectDeptId = isAdd ? LoginHelper.getProjectDeptId() : null;
//更新数据 //更新数据
orderList.forEach(order -> { orderList.forEach(order -> {
scheduledExecutorService.execute(() -> { scheduledExecutorService.execute(() -> {
...@@ -319,6 +320,7 @@ public class OrderTrainServiceImpl extends AbstractBaseService<OrderTrainVo, Ord ...@@ -319,6 +320,7 @@ public class OrderTrainServiceImpl extends AbstractBaseService<OrderTrainVo, Ord
.setUseTime(Optional.ofNullable(rangeMapper.selectOne(OrderTrainRange::getOrderNo, order.getOrderNo())) .setUseTime(Optional.ofNullable(rangeMapper.selectOne(OrderTrainRange::getOrderNo, order.getOrderNo()))
.map(o -> DateUtil.parse(o.getFromDate() + " " + o.getFromTime(), "yyyy-MM-dd HH:mm")) .map(o -> DateUtil.parse(o.getFromDate() + " " + o.getFromTime(), "yyyy-MM-dd HH:mm"))
.orElse(null)); .orElse(null));
invoice.setCreateDept(projectDeptId);
orderInvoicingService.save(invoice); orderInvoicingService.save(invoice);
}); });
} }
......
...@@ -220,6 +220,7 @@ public class OrderVehiclesServiceImpl extends AbstractBaseService<OrderVehiclesV ...@@ -220,6 +220,7 @@ public class OrderVehiclesServiceImpl extends AbstractBaseService<OrderVehiclesV
List<OrderVehiclesBusiness> orderBusinessList = businessMapper.selectList(new LambdaQueryWrapper<OrderVehiclesBusiness>().in(OrderVehiclesBusiness::getOrderId, orderIds)); List<OrderVehiclesBusiness> orderBusinessList = businessMapper.selectList(new LambdaQueryWrapper<OrderVehiclesBusiness>().in(OrderVehiclesBusiness::getOrderId, orderIds));
List<OrderVehiclesPayInfo> orderPayInfoList = payInfoMapper.selectList(new LambdaQueryWrapper<OrderVehiclesPayInfo>().in(OrderVehiclesPayInfo::getOrderId, orderIds)); List<OrderVehiclesPayInfo> orderPayInfoList = payInfoMapper.selectList(new LambdaQueryWrapper<OrderVehiclesPayInfo>().in(OrderVehiclesPayInfo::getOrderId, orderIds));
Long projectId = isAdd ? LoginHelper.getProjectId() : null; Long projectId = isAdd ? LoginHelper.getProjectId() : null;
Long projectDeptId = isAdd ? LoginHelper.getProjectDeptId() : null;
//更新数据 //更新数据
orderList.forEach(order -> { orderList.forEach(order -> {
scheduledExecutorService.execute(() -> { scheduledExecutorService.execute(() -> {
...@@ -286,6 +287,7 @@ public class OrderVehiclesServiceImpl extends AbstractBaseService<OrderVehiclesV ...@@ -286,6 +287,7 @@ public class OrderVehiclesServiceImpl extends AbstractBaseService<OrderVehiclesV
} }
return null; return null;
}).orElse(null)); }).orElse(null));
invoice.setCreateDept(projectDeptId);
orderInvoicingService.save(invoice); orderInvoicingService.save(invoice);
}); });
} }
......
...@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty; ...@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup; import org.dromara.common.core.validate.EditGroup;
...@@ -19,8 +20,11 @@ import org.dromara.common.satoken.utils.LoginHelper; ...@@ -19,8 +20,11 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.system.constant.Constant; import org.dromara.system.constant.Constant;
import org.dromara.system.domain.bo.SysProjectBo; import org.dromara.system.domain.bo.SysProjectBo;
import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.vo.SysProjectVo; import org.dromara.system.domain.vo.SysProjectVo;
import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.service.ISysProjectService; import org.dromara.system.service.ISysProjectService;
import org.dromara.system.service.ISysUserProjectService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -40,6 +44,7 @@ import java.util.List; ...@@ -40,6 +44,7 @@ import java.util.List;
public class SysProjectController extends BaseController { public class SysProjectController extends BaseController {
private final ISysProjectService sysProjectService; private final ISysProjectService sysProjectService;
private final ISysUserProjectService userProjectService;
/** /**
* 查询系统项目列表 * 查询系统项目列表
...@@ -129,7 +134,18 @@ public class SysProjectController extends BaseController { ...@@ -129,7 +134,18 @@ public class SysProjectController extends BaseController {
*/ */
@GetMapping("/dynamic") @GetMapping("/dynamic")
public R<Void> dynamicProjectId(@RequestParam(required = false) Long projectId) { public R<Void> dynamicProjectId(@RequestParam(required = false) Long projectId) {
LoginHelper.dynamicProjectId(projectId); Long deptId = null;
if (projectId != null) {
SysUserProjectBo sup = new SysUserProjectBo();
sup.setUserId(LoginHelper.getUserId());
sup.setProjectId(projectId);
SysUserProjectVo vo = userProjectService.getOne(sup);
if (vo == null) {
throw new ServiceException("用户不存在在该项目中");
}
deptId = vo.getCreateDept();
}
LoginHelper.dynamicProjectId(projectId,deptId);
return R.ok(); return R.ok();
} }
......
...@@ -57,7 +57,6 @@ public class SysUserController extends BaseController { ...@@ -57,7 +57,6 @@ public class SysUserController extends BaseController {
private final ISysRoleService roleService; private final ISysRoleService roleService;
private final ISysPostService postService; private final ISysPostService postService;
private final ISysDeptService deptService; private final ISysDeptService deptService;
private final ISysTenantService tenantService;
private final ISysUserProjectService userProjectService; private final ISysUserProjectService userProjectService;
@DubboReference @DubboReference
private RemoteDeptOrderApproveService remoteDeptOrderApproveService; private RemoteDeptOrderApproveService remoteDeptOrderApproveService;
...@@ -162,7 +161,7 @@ public class SysUserController extends BaseController { ...@@ -162,7 +161,7 @@ public class SysUserController extends BaseController {
} }
/** /**
* 获取用户信息 * 获取用户订单审批数据
* *
* @return 用户信息 * @return 用户信息
*/ */
...@@ -179,10 +178,10 @@ public class SysUserController extends BaseController { ...@@ -179,10 +178,10 @@ public class SysUserController extends BaseController {
if (su == null) { if (su == null) {
return R.ok(uoa); return R.ok(uoa);
} }
if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE)) { if (su.getUserType().contains(SysUser.PROJECT_USER_TYPE) && projectId == null) {
uoa.setStaffId(su.getCreateBy()); uoa.setStaffId(su.getCreateBy());
su = userService.selectUserById(uoa.getStaffId()); su = userService.selectUserById(uoa.getStaffId());
} else if (StringUtils.equals(su.getUserType(), UserType.SYS_USER.getUserType()) && projectId != null) { } else if (projectId != null) {
SysUserProjectBo sup = new SysUserProjectBo(); SysUserProjectBo sup = new SysUserProjectBo();
sup.setUserId(LoginHelper.getUserId()); sup.setUserId(LoginHelper.getUserId());
sup.setProjectId(projectId); sup.setProjectId(projectId);
...@@ -242,20 +241,6 @@ public class SysUserController extends BaseController { ...@@ -242,20 +241,6 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT) @Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public R<Void> add(@Validated @RequestBody SysUserBo user) { public R<Void> add(@Validated @RequestBody SysUserBo user) {
deptService.checkDeptDataScope(user.getDeptId());
if (!userService.checkUserNameUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
return R.fail("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
if (TenantHelper.isEnable()) {
if (!tenantService.checkAccountBalance(TenantHelper.getTenantId())) {
return R.fail("当前租户下用户名额不足,请联系管理员");
}
}
user.setPassword(BCrypt.hashpw(user.getPassword()));
return toAjax(userService.insertUser(user)); return toAjax(userService.insertUser(user));
} }
......
...@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -13,6 +13,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysUserProjectBo; import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.bo.SysUserProjectInsertBo;
import org.dromara.system.domain.vo.SysUserProjectVo; import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo; import org.dromara.system.domain.vo.UserProjectVo;
import org.dromara.system.service.ISysUserProjectService; import org.dromara.system.service.ISysUserProjectService;
...@@ -67,6 +68,18 @@ public class SysUserProjectController extends BaseController { ...@@ -67,6 +68,18 @@ public class SysUserProjectController extends BaseController {
return toAjax(sysUserProjectService.insertByBo(bo)); return toAjax(sysUserProjectService.insertByBo(bo));
} }
/**
* 新增用户项目
*/
@SaCheckPermission("system:userProject:add")
@Log(title = "用户项目", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addProjectUser")
public R<Void> addProjectUser(@Validated(AddGroup.class) @RequestBody SysUserProjectInsertBo bo) {
sysUserProjectService.insert(bo);
return R.ok();
}
/** /**
* 删除用户项目 * 删除用户项目
* *
......
package org.dromara.system.domain; package org.dromara.system.domain;
import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial; import java.io.Serial;
...@@ -32,6 +34,11 @@ public class SysUserProject extends TenantEntity { ...@@ -32,6 +34,11 @@ public class SysUserProject extends TenantEntity {
*/ */
private Long userId; private Long userId;
/**
* 用户类型
*/
private String userType;
/** /**
* 项目id * 项目id
*/ */
......
...@@ -38,6 +38,11 @@ public class SysUserProjectBo extends BaseEntity { ...@@ -38,6 +38,11 @@ public class SysUserProjectBo extends BaseEntity {
@NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class }) @NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId; private Long projectId;
/**
* 用户类型
*/
private String userType;
/** /**
* 角色id * 角色id
*/ */
......
package org.dromara.system.domain.bo;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.xss.Xss;
import org.dromara.common.mybatis.core.domain.BaseEntity;
/**
* 用户项目业务对象 sys_user_project
*
* @author hzh
* @date 2025-06-19
*/
@Data
@Accessors(chain = true)
public class SysUserProjectInsertBo extends BaseEntity {
/**
* 用户id
*/
private Long userId;
/**
* 项目id
*/
@NotNull(message = "项目id不能为空", groups = {AddGroup.class})
private Long projectId;
/**
* 角色id
*/
@NotNull(message = "角色id不能为空", groups = {AddGroup.class})
private Long roleId;
/**
* 昵称
*/
@Xss(message = "用户名不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户名长度不能超过{max}个字符")
private String nickName;
/**
* 手机号
*/
private String phonenumber;
/**
* 邮箱
*/
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过{max}个字符")
private String email;
/**
* 密码
*/
private String password;
}
...@@ -38,6 +38,11 @@ public class SysUserProjectVo implements Serializable { ...@@ -38,6 +38,11 @@ public class SysUserProjectVo implements Serializable {
@ExcelProperty(value = "用户id") @ExcelProperty(value = "用户id")
private Long userId; private Long userId;
/**
* 用户类型
*/
private String userType;
/** /**
* 项目id * 项目id
*/ */
...@@ -50,13 +55,18 @@ public class SysUserProjectVo implements Serializable { ...@@ -50,13 +55,18 @@ public class SysUserProjectVo implements Serializable {
@ExcelProperty(value = "角色id") @ExcelProperty(value = "角色id")
private Long roleId; private Long roleId;
/**
* 创建部门
*/
private Long createDept;
/** /**
* 创建人 * 创建人
*/ */
private Long createBy; private Long createBy;
@Translation(type = TransConstant.USER_ID_TO_NICKNAME,mapper = "createBy" ) @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
private String createNickName; private String createNickName;
@Translation(type = TransConstant.USER_ID_TO_NAME,mapper = "createBy" ) @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createUserName; private String createUserName;
/** /**
......
...@@ -15,16 +15,16 @@ import org.dromara.system.api.domain.vo.RemoteProjectVo; ...@@ -15,16 +15,16 @@ import org.dromara.system.api.domain.vo.RemoteProjectVo;
import org.dromara.system.constant.Constant; import org.dromara.system.constant.Constant;
import org.dromara.system.domain.SysProject; import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserProject;
import org.dromara.system.mapper.SysProjectMapper; import org.dromara.system.mapper.SysProjectMapper;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUserProjectMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
/** /**
* @author hzh * @author hzh
* @date 2025-06-11 * @date 2025-06-11
...@@ -36,21 +36,26 @@ public class RemoteProjectServiceImpl implements RemoteProjectService { ...@@ -36,21 +36,26 @@ public class RemoteProjectServiceImpl implements RemoteProjectService {
private final SysProjectMapper sysProjectMapper; private final SysProjectMapper sysProjectMapper;
private final SysUserMapper sysUserMapper; private final SysUserMapper sysUserMapper;
private final SysUserProjectMapper sysUserProjectMapper;
@Override @Override
public List<RemoteProjectVo> queryList(String tenantId, String phone) { public List<RemoteProjectVo> queryList(String tenantId, String phone) {
List<SysUser> userList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>() List<SysUser> userList = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>()
.eq(StringUtils.isNotEmpty(tenantId), SysUser::getTenantId, tenantId) .eq(StringUtils.isNotEmpty(tenantId), SysUser::getTenantId, tenantId)
.eq(StringUtils.isNotEmpty(phone), SysUser::getPhonenumber, phone) .eq(StringUtils.isNotEmpty(phone), SysUser::getPhonenumber, phone)
.likeRight(SysUser::getUserType, SysUser.PROJECT_USER_TYPE) .eq(SysUser::getUserType, SysUser.PROJECT_USER_TYPE)
.eq(SysUser::getStatus, UserConstants.USER_NORMAL) .eq(SysUser::getStatus, UserConstants.USER_NORMAL)
.select(SysUser::getUserType) .select(SysUser::getUserId)
); );
Set<Long> projectIds = StreamUtils.toSet(userList, u -> { if (CollectionUtil.isEmpty(userList)) {
String[] split = u.getUserType().split(PROJECT_USER_TYPE_SPLIT); return List.of();
return Long.parseLong(split[1]); }
}); List<SysUserProject> supList = sysUserProjectMapper.selectList(new LambdaQueryWrapper<SysUserProject>()
return CollectionUtil.isEmpty(projectIds) ? List.of() : BeanUtil.copyToList(StreamUtils.filter(sysProjectMapper.selectByIds(projectIds), sp -> StringUtils.equals(sp.getStatus(), Constant.PROJECT_NORMAL)), RemoteProjectVo.class); .in(SysUserProject::getUserId, StreamUtils.toList(userList, SysUser::getUserId)));
Set<Long> projectIds = StreamUtils.toSet(supList, SysUserProject::getProjectId);
return CollectionUtil.isEmpty(projectIds) ?
List.of() :
BeanUtil.copyToList(StreamUtils.filter(sysProjectMapper.selectByIds(projectIds), sp -> StringUtils.equals(sp.getStatus(), Constant.PROJECT_NORMAL)), RemoteProjectVo.class);
} }
@Override @Override
......
package org.dromara.system.listener; package org.dromara.system.listener;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HtmlUtil; import cn.hutool.http.HtmlUtil;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult; import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController; import org.dromara.system.domain.bo.SysUserProjectInsertBo;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysProjectUserImportVo; import org.dromara.system.domain.vo.SysProjectUserImportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysConfigService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserProjectService;
import java.util.List; import java.util.List;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE;
import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
/** /**
* 项目用户自定义导入 * 项目用户自定义导入
* *
...@@ -36,12 +28,12 @@ import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT; ...@@ -36,12 +28,12 @@ import static org.dromara.system.domain.SysUser.PROJECT_USER_TYPE_SPLIT;
@Slf4j @Slf4j
public class SysProjectUserImportListener extends AnalysisEventListener<SysProjectUserImportVo> implements ExcelListener<SysProjectUserImportVo> { public class SysProjectUserImportListener extends AnalysisEventListener<SysProjectUserImportVo> implements ExcelListener<SysProjectUserImportVo> {
private final ISysUserService userService; private final ISysUserProjectService sysUserProjectService;
private final SysUserController sysUserController;
private final Long operUserId; private final Long operUserId;
private final Long roleId; private final Long roleId;
private final String userType;
private final String operTenantId; private final Long projectId;
private final String initPassword;
private int successNum = 0; private int successNum = 0;
private int failureNum = 0; private int failureNum = 0;
...@@ -49,46 +41,31 @@ public class SysProjectUserImportListener extends AnalysisEventListener<SysProje ...@@ -49,46 +41,31 @@ public class SysProjectUserImportListener extends AnalysisEventListener<SysProje
private final StringBuilder failureMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder();
public SysProjectUserImportListener(Long projectId, Long roleId) { public SysProjectUserImportListener(Long projectId, Long roleId) {
this.userService = SpringUtils.getBean(ISysUserService.class); this.sysUserProjectService = SpringUtils.getBean(ISysUserProjectService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.operUserId = LoginHelper.getUserId(); this.operUserId = LoginHelper.getUserId();
this.operTenantId = LoginHelper.getTenantId(); this.projectId = projectId;
this.userType = PROJECT_USER_TYPE + PROJECT_USER_TYPE_SPLIT + projectId;
this.roleId = roleId; this.roleId = roleId;
this.initPassword =SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
} }
@Override @Override
public void invoke(SysProjectUserImportVo userVo, AnalysisContext context) { public void invoke(SysProjectUserImportVo vo, AnalysisContext context) {
SysUserVo sysUser = this.userService.selectUserByUserName(userVo.getPhonenumber(), userType, operTenantId);
try { try {
// 验证是否存在这个用户 String password = StringUtils.isBlank(vo.getPassword()) ?initPassword:vo.getPassword();
if (ObjectUtil.isNull(sysUser)) { SysUserProjectInsertBo bo = new SysUserProjectInsertBo()
SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class); .setProjectId(projectId)
user.setUserName(user.getPhonenumber()); .setRoleId(roleId)
user.setUserType(userType); .setNickName(vo.getNickName())
ValidatorUtils.validate(user); .setPhonenumber(vo.getPhonenumber())
String password = user.getPassword(); .setEmail(vo.getEmail())
if (StringUtils.isBlank(password)) { .setPassword(password);
password = user.getPhonenumber(); bo.setCreateBy(operUserId);
} sysUserProjectService.insert(bo);
user.setPassword(password.trim()); successNum++;
user.setCreateBy(operUserId); successMsg.append("<br/>").append(successNum).append("、账号 ").append(vo.getPhonenumber()).append(" 导入成功");
if (roleId != null) {
user.setRoleIds(new Long[]{roleId});
}
R<Void> r = sysUserController.add(user);
if (r.getCode() == R.FAIL) {
throw new ServiceException(r.getMsg());
}
successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else {
failureNum++;
failureMsg.append("<br/>").append(failureNum).append("、账号 ").append(sysUser.getUserName()).append(" 已存在");
}
} catch (Exception e) { } catch (Exception e) {
failureNum++; failureNum++;
String msg = "<br/>" + failureNum + "、账号 " + HtmlUtil.cleanHtmlTag(userVo.getPhonenumber()) + " 导入失败:"; String msg = "<br/>" + failureNum + "、账号 " + HtmlUtil.cleanHtmlTag(vo.getPhonenumber()) + " 导入失败:";
String message = e.getMessage(); String message = e.getMessage();
if (e instanceof ConstraintViolationException cvException) { if (e instanceof ConstraintViolationException cvException) {
message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", "); message = StreamUtils.join(cvException.getConstraintViolations(), ConstraintViolation::getMessage, ", ");
......
...@@ -9,7 +9,6 @@ import com.alibaba.excel.event.AnalysisEventListener; ...@@ -9,7 +9,6 @@ import com.alibaba.excel.event.AnalysisEventListener;
import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
...@@ -18,7 +17,6 @@ import org.dromara.common.core.utils.ValidatorUtils; ...@@ -18,7 +17,6 @@ import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelListener;
import org.dromara.common.excel.core.ExcelResult; import org.dromara.common.excel.core.ExcelResult;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.controller.system.SysUserController;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserImportVo; import org.dromara.system.domain.vo.SysUserImportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
...@@ -36,7 +34,6 @@ import java.util.Objects; ...@@ -36,7 +34,6 @@ import java.util.Objects;
public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo> implements ExcelListener<SysUserImportVo> { public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo> implements ExcelListener<SysUserImportVo> {
private final ISysUserService userService; private final ISysUserService userService;
private final SysUserController sysUserController;
private final ISysDeptService sysDeptService; private final ISysDeptService sysDeptService;
private final ISysPostService sysPostService; private final ISysPostService sysPostService;
private final ISysRoleService sysRoleService; private final ISysRoleService sysRoleService;
...@@ -55,7 +52,6 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo ...@@ -55,7 +52,6 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
public SysUserImportListener(Boolean isUpdateSupport) { public SysUserImportListener(Boolean isUpdateSupport) {
String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword"); String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.userService = SpringUtils.getBean(ISysUserService.class); this.userService = SpringUtils.getBean(ISysUserService.class);
this.sysUserController = SpringUtils.getBean(SysUserController.class);
this.sysDeptService = SpringUtils.getBean(ISysDeptService.class); this.sysDeptService = SpringUtils.getBean(ISysDeptService.class);
this.sysPostService = SpringUtils.getBean(ISysPostService.class); this.sysPostService = SpringUtils.getBean(ISysPostService.class);
this.sysRoleService = SpringUtils.getBean(ISysRoleService.class); this.sysRoleService = SpringUtils.getBean(ISysRoleService.class);
...@@ -87,11 +83,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo ...@@ -87,11 +83,7 @@ public class SysUserImportListener extends AnalysisEventListener<SysUserImportVo
if (StringUtils.isNotEmpty(userVo.getRoleName())) { if (StringUtils.isNotEmpty(userVo.getRoleName())) {
user.setRoleIds(sysRoleService.selectRoleIdsByNameList(StrUtil.split(userVo.getRoleName(), "/")).toArray(Long[]::new)); user.setRoleIds(sysRoleService.selectRoleIdsByNameList(StrUtil.split(userVo.getRoleName(), "/")).toArray(Long[]::new));
} }
sysUserController.add(user); userService.insertUser(user);
R<Void> r = sysUserController.add(user);
if (r.getCode() == R.FAIL) {
throw new ServiceException(r.getMsg());
}
successNum++; successNum++;
successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); successMsg.append("<br/>").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功");
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
......
...@@ -3,6 +3,7 @@ package org.dromara.system.service; ...@@ -3,6 +3,7 @@ package org.dromara.system.service;
import org.dromara.common.mybatis.service.IBaseService; import org.dromara.common.mybatis.service.IBaseService;
import org.dromara.system.domain.SysUserProject; import org.dromara.system.domain.SysUserProject;
import org.dromara.system.domain.bo.SysUserProjectBo; import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.bo.SysUserProjectInsertBo;
import org.dromara.system.domain.vo.SysUserProjectVo; import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo; import org.dromara.system.domain.vo.UserProjectVo;
...@@ -24,4 +25,11 @@ public interface ISysUserProjectService extends IBaseService<SysUserProjectVo, S ...@@ -24,4 +25,11 @@ public interface ISysUserProjectService extends IBaseService<SysUserProjectVo, S
* @return 项目列表 * @return 项目列表
*/ */
List<UserProjectVo> selectListByUserId(Long userId); List<UserProjectVo> selectListByUserId(Long userId);
/**
* 添加项目人员
*
* @param bo 数据
*/
void insert(SysUserProjectInsertBo bo);
} }
...@@ -2,7 +2,6 @@ package org.dromara.system.service; ...@@ -2,7 +2,6 @@ package org.dromara.system.service;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
...@@ -293,13 +292,6 @@ public interface ISysUserService { ...@@ -293,13 +292,6 @@ public interface ISysUserService {
*/ */
List<Long> selectUserIdsByRoleKeyAndDeptId(String roleKey, Long deptId); List<Long> selectUserIdsByRoleKeyAndDeptId(String roleKey, Long deptId);
/**
* 保存或更新用户信息
*
* @param sysUser 用户信息
*/
void saveOrUpdateYsUser(SysUser sysUser);
/** /**
* 根据用户昵称查询userIds * 根据用户昵称查询userIds
* *
......
package org.dromara.system.service;
import org.dromara.system.domain.SysUser;
/**
* @author hzh
* @date 2025-06-25
**/
public interface IThirdService {
/**
* 保存或更新用户信息
*
* @param sysUser 用户信息
*/
void saveOrUpdateYsUser(SysUser sysUser);
}
...@@ -32,7 +32,7 @@ import org.dromara.system.domain.bo.SysTenantBo; ...@@ -32,7 +32,7 @@ import org.dromara.system.domain.bo.SysTenantBo;
import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.mapper.*; import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysTenantService; import org.dromara.system.service.ISysTenantService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.IThirdService;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -60,7 +60,7 @@ public class SysTenantServiceImpl implements ISysTenantService { ...@@ -60,7 +60,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
private final SysDictTypeMapper dictTypeMapper; private final SysDictTypeMapper dictTypeMapper;
private final SysDictDataMapper dictDataMapper; private final SysDictDataMapper dictDataMapper;
private final SysConfigMapper configMapper; private final SysConfigMapper configMapper;
private final ISysUserService userService; private final IThirdService thirdService;
@DubboReference @DubboReference
private final RemoteProcessService remoteProcessService; private final RemoteProcessService remoteProcessService;
@DubboReference @DubboReference
...@@ -178,7 +178,7 @@ public class SysTenantServiceImpl implements ISysTenantService { ...@@ -178,7 +178,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
userMapper.insert(user); userMapper.insert(user);
// 同步到云服务用户 // 同步到云服务用户
userService.saveOrUpdateYsUser(user); thirdService.saveOrUpdateYsUser(user);
//创建审批流程 //创建审批流程
remoteProcessService.createDefaultProcessConfig(tenantId); remoteProcessService.createDefaultProcessConfig(tenantId);
......
...@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; ...@@ -7,8 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.service.AbstractBaseService; import org.dromara.common.mybatis.service.AbstractBaseService;
import org.dromara.system.constant.Constant; import org.dromara.system.constant.Constant;
...@@ -16,7 +18,9 @@ import org.dromara.system.domain.SysProject; ...@@ -16,7 +18,9 @@ import org.dromara.system.domain.SysProject;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.SysUserProject; import org.dromara.system.domain.SysUserProject;
import org.dromara.system.domain.SysUserRole; import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.bo.SysUserProjectBo; import org.dromara.system.domain.bo.SysUserProjectBo;
import org.dromara.system.domain.bo.SysUserProjectInsertBo;
import org.dromara.system.domain.vo.SysUserProjectVo; import org.dromara.system.domain.vo.SysUserProjectVo;
import org.dromara.system.domain.vo.UserProjectVo; import org.dromara.system.domain.vo.UserProjectVo;
import org.dromara.system.mapper.SysProjectMapper; import org.dromara.system.mapper.SysProjectMapper;
...@@ -24,6 +28,7 @@ import org.dromara.system.mapper.SysUserMapper; ...@@ -24,6 +28,7 @@ import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.mapper.SysUserProjectMapper; import org.dromara.system.mapper.SysUserProjectMapper;
import org.dromara.system.mapper.SysUserRoleMapper; import org.dromara.system.mapper.SysUserRoleMapper;
import org.dromara.system.service.ISysUserProjectService; import org.dromara.system.service.ISysUserProjectService;
import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.Collection;
...@@ -45,6 +50,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec ...@@ -45,6 +50,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
private final SysUserRoleMapper userRoleMapper; private final SysUserRoleMapper userRoleMapper;
private final SysUserMapper sysUserMapper; private final SysUserMapper sysUserMapper;
private final SysProjectMapper sysProjectMapper; private final SysProjectMapper sysProjectMapper;
private final ISysUserService userService;
@Override @Override
public BaseMapperPlus<SysUserProject, SysUserProjectVo> mapper() { public BaseMapperPlus<SysUserProject, SysUserProjectVo> mapper() {
...@@ -57,6 +63,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec ...@@ -57,6 +63,7 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
LambdaQueryWrapper<SysUserProject> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysUserProject> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getUserId() != null, SysUserProject::getUserId, bo.getUserId()); lqw.eq(bo.getUserId() != null, SysUserProject::getUserId, bo.getUserId());
lqw.eq(bo.getProjectId() != null, SysUserProject::getProjectId, bo.getProjectId()); lqw.eq(bo.getProjectId() != null, SysUserProject::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getUserType()), SysUserProject::getUserType, bo.getUserType());
lqw.eq(bo.getRoleId() != null, SysUserProject::getRoleId, bo.getRoleId()); lqw.eq(bo.getRoleId() != null, SysUserProject::getRoleId, bo.getRoleId());
return lqw; return lqw;
} }
...@@ -98,6 +105,9 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec ...@@ -98,6 +105,9 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
@Override @Override
public void validEntityBeforeSave(SysUserProject entity) { public void validEntityBeforeSave(SysUserProject entity) {
super.validEntityBeforeSave(entity); super.validEntityBeforeSave(entity);
if (entity.getId() == null) {
entity.setUserType(Optional.ofNullable(sysUserMapper.selectById(entity.getUserId())).map(SysUser::getUserType).orElse(UserType.SYS_USER.getUserType()));
}
//校验用户是否已经存在 //校验用户是否已经存在
List<SysUserProject> supList = baseMapper.selectList(SysUserProject::getUserId, entity.getUserId(), SysUserProject::getProjectId, entity.getProjectId()); List<SysUserProject> supList = baseMapper.selectList(SysUserProject::getUserId, entity.getUserId(), SysUserProject::getProjectId, entity.getProjectId());
SysUserProject sysUserProject = StreamUtils.findFirst(supList, sup -> !Objects.equal(sup.getId(), entity.getId())); SysUserProject sysUserProject = StreamUtils.findFirst(supList, sup -> !Objects.equal(sup.getId(), entity.getId()));
...@@ -144,4 +154,47 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec ...@@ -144,4 +154,47 @@ public class SysUserProjectServiceImpl extends AbstractBaseService<SysUserProjec
.eq(SysProject::getStatus, Constant.PROJECT_NORMAL)); .eq(SysProject::getStatus, Constant.PROJECT_NORMAL));
return BeanUtil.copyToList(projectList, UserProjectVo.class); return BeanUtil.copyToList(projectList, UserProjectVo.class);
} }
@Override
public void insert(SysUserProjectInsertBo bo) {
SysUserProjectBo sup = new SysUserProjectBo();
sup.setProjectId(bo.getProjectId());
sup.setRoleId(bo.getRoleId());
String userType = UserType.PROJECT_USER.getUserType();
if (bo.getUserId() != null) {
sup.setUserId(bo.getUserId());
} else {
validEntity(bo);
//根据手机号查询是否存在用户信息
SysUser user = sysUserMapper.selectOne(SysUser::getUserType, UserType.PROJECT_USER.getUserType(), SysUser::getPhonenumber, bo.getPhonenumber());
if (user != null) {
sup.setUserId(user.getUserId());
} else {
//新增用户
SysUserBo su = new SysUserBo();
su.setNickName(bo.getNickName());
su.setUserName(bo.getPhonenumber());
su.setPhonenumber(bo.getPhonenumber());
su.setEmail(bo.getEmail());
su.setPassword(bo.getPassword());
su.setCreateBy(bo.getCreateBy());
su.setUserType(userType);
userService.insertUser(su);
//查询用户
user = sysUserMapper.selectOne(SysUser::getUserType, userType, SysUser::getPhonenumber, bo.getPhonenumber());
sup.setUserId(user.getUserId());
}
}
sup.setUserType(userType);
insertByBo(sup);
}
private void validEntity(SysUserProjectInsertBo bo) {
if (StringUtils.isBlank(bo.getNickName())) {
throw new ServiceException("姓名不能为空");
}
if (StringUtils.isEmpty(bo.getPhonenumber())) {
throw new ServiceException("手机号码不能为空");
}
}
} }
package org.dromara.system.service.impl; package org.dromara.system.service.impl;
import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
...@@ -15,7 +16,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; ...@@ -15,7 +16,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.constant.CacheNames; import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.enums.UserType; import org.dromara.common.core.enums.UserType;
...@@ -29,8 +29,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; ...@@ -29,8 +29,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.helper.DataBaseHelper; import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.server.api.RemoteServerService;
import org.dromara.server.api.domain.RemoteUser;
import org.dromara.system.domain.*; import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysPostVo; import org.dromara.system.domain.vo.SysPostVo;
...@@ -38,7 +36,10 @@ import org.dromara.system.domain.vo.SysRoleVo; ...@@ -38,7 +36,10 @@ import org.dromara.system.domain.vo.SysRoleVo;
import org.dromara.system.domain.vo.SysUserExportVo; import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.*; import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysDeptService;
import org.dromara.system.service.ISysTenantService;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.IThirdService;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -65,18 +66,42 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -65,18 +66,42 @@ public class SysUserServiceImpl implements ISysUserService {
private final SysUserPostMapper userPostMapper; private final SysUserPostMapper userPostMapper;
private final SysTenantMapper sysTenantMapper; private final SysTenantMapper sysTenantMapper;
private final SysUserProjectMapper sysUserProjectMapper; private final SysUserProjectMapper sysUserProjectMapper;
@DubboReference private final ISysDeptService deptService;
private RemoteServerService remoteServerService; private final ISysTenantService tenantService;
private final IThirdService thirdService;
@Override @Override
public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) { public TableDataInfo<SysUserVo> selectPageUserList(SysUserBo user, PageQuery pageQuery) {
Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user)); Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
processData(page);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
private void processData(Page<SysUserVo> page) {
List<Long> userIds = StreamUtils.toList(page.getRecords(), SysUserVo::getUserId);
userIds = CollectionUtils.isEmpty(userIds) ? List.of(-1L) : userIds;
//获取角色信息
List<SysUserRole> surList = userRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
List<SysRole> roleList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(surList)) {
List<Long> roleIds = StreamUtils.toList(surList, SysUserRole::getRoleId);
roleList = roleMapper.selectByIds(roleIds);
}
for (SysUserVo record : page.getRecords()) {
//设置角色信息
List<SysUserRole> roles = StreamUtils.filter(surList, sur -> Objects.equals(sur.getUserId(), record.getUserId()));
if (CollectionUtils.isNotEmpty(roles)) {
List<Long> rIds = StreamUtils.toList(roles, SysUserRole::getRoleId);
List<SysRole> finalRoleList = roleList;
record.setRoles(StreamUtils.toList(rIds, roleId -> BeanUtil.copyProperties(StreamUtils.findFirst(finalRoleList, r -> Objects.equals(r.getRoleId(), roleId)), SysRoleVo.class)));
}
}
}
@Override @Override
public TableDataInfo<SysUserVo> selectPageUserFullList(SysUserBo user, PageQuery pageQuery) { public TableDataInfo<SysUserVo> selectPageUserFullList(SysUserBo user, PageQuery pageQuery) {
Page<SysUserVo> page = baseMapper.selectPageUserFullList(pageQuery.build(), this.buildQueryWrapper(user)); Page<SysUserVo> page = baseMapper.selectPageUserFullList(pageQuery.build(), this.buildQueryWrapper(user));
processData(page);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
...@@ -113,7 +138,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -113,7 +138,7 @@ public class SysUserServiceImpl implements ISysUserService {
//获取角色信息 //获取角色信息
List<SysUserRole> surList = userRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds)); List<SysUserRole> surList = userRoleMapper.selectList(new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getUserId, userIds));
List<SysRole> roleList = new ArrayList<>(); List<SysRole> roleList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(supList)) { if (CollectionUtils.isNotEmpty(surList)) {
List<Long> roleIds = StreamUtils.toList(surList, SysUserRole::getRoleId); List<Long> roleIds = StreamUtils.toList(surList, SysUserRole::getRoleId);
roleList = roleMapper.selectByIds(roleIds); roleList = roleMapper.selectByIds(roleIds);
} }
...@@ -139,9 +164,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -139,9 +164,7 @@ public class SysUserServiceImpl implements ISysUserService {
List<SysUserPost> posts = StreamUtils.filter(supList, sup -> Objects.equals(sup.getUserId(), export.getUserId())); List<SysUserPost> posts = StreamUtils.filter(supList, sup -> Objects.equals(sup.getUserId(), export.getUserId()));
if (CollectionUtils.isNotEmpty(posts)) { if (CollectionUtils.isNotEmpty(posts)) {
List<Long> pIds = StreamUtils.toList(posts, SysUserPost::getPostId); List<Long> pIds = StreamUtils.toList(posts, SysUserPost::getPostId);
export.setPostName(pIds.stream().map(pid -> { export.setPostName(pIds.stream().map(pid -> Optional.ofNullable(StreamUtils.findFirst(finalPostList, p -> Objects.equals(p.getPostId(), pid))).map(SysPost::getPostName).orElse(null)).filter(Objects::nonNull).collect(Collectors.joining("/")));
return Optional.ofNullable(StreamUtils.findFirst(finalPostList, p -> Objects.equals(p.getPostId(), pid))).map(SysPost::getPostName).orElse(null);
}).filter(Objects::nonNull).collect(Collectors.joining("/")));
} }
//设置角色信息 //设置角色信息
List<SysUserRole> roles = StreamUtils.filter(surList, sur -> Objects.equals(sur.getUserId(), export.getUserId())); List<SysUserRole> roles = StreamUtils.filter(surList, sur -> Objects.equals(sur.getUserId(), export.getUserId()));
...@@ -163,6 +186,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -163,6 +186,7 @@ public class SysUserServiceImpl implements ISysUserService {
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.eq(StringUtils.isNotBlank(user.getUserType()), "u.user_type", user.getUserType())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName()) .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
...@@ -178,16 +202,14 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -178,16 +202,14 @@ public class SysUserServiceImpl implements ISysUserService {
if (StringUtils.isNotBlank(user.getExcludeUserIds())) { if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds())); wrapper.notIn("u.user_id", StringUtils.splitList(user.getExcludeUserIds()));
} }
if (StringUtils.isNotBlank(user.getUserType())) { Object projectId = params.get("projectId");
boolean contains = user.getUserType().contains(":"); if (projectId != null) {
if (contains) { List<SysUserProject> supList = sysUserProjectMapper.selectList(SysUserProject::getProjectId, projectId);
wrapper.eq("u.user_type", user.getUserType()); wrapper.in("u.user_id", CollectionUtils.isEmpty(supList) ? List.of(-1L) : StreamUtils.toList(supList, SysUserProject::getUserId));
} else {
wrapper.likeRight("u.user_type", user.getUserType());
}
} }
if (params.get("excludeProjectId") != null) { Object excludeProjectId = params.get("excludeProjectId");
List<SysUserProject> supList = sysUserProjectMapper.selectList(SysUserProject::getProjectId, params.get("excludeProjectId")); if (excludeProjectId != null) {
List<SysUserProject> supList = sysUserProjectMapper.selectList(SysUserProject::getProjectId, excludeProjectId);
wrapper.notIn("u.user_id", CollectionUtils.isEmpty(supList) ? List.of(-1L) : StreamUtils.toList(supList, SysUserProject::getUserId)); wrapper.notIn("u.user_id", CollectionUtils.isEmpty(supList) ? List.of(-1L) : StreamUtils.toList(supList, SysUserProject::getUserId));
} }
return wrapper; return wrapper;
...@@ -412,6 +434,21 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -412,6 +434,21 @@ public class SysUserServiceImpl implements ISysUserService {
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int insertUser(SysUserBo user) { public int insertUser(SysUserBo user) {
deptService.checkDeptDataScope(user.getDeptId());
if (!checkUserNameUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !checkPhoneUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (StringUtils.isNotEmpty(user.getEmail()) && !checkEmailUnique(user)) {
throw new ServiceException("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
if (TenantHelper.isEnable()) {
if (!tenantService.checkAccountBalance(TenantHelper.getTenantId())) {
throw new ServiceException("当前租户下用户名额不足,请联系管理员");
}
}
user.setPassword(BCrypt.hashpw(user.getPassword()));
//新增用户
user.setUserType(StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType()); user.setUserType(StringUtils.isEmpty(user.getUserType()) ? UserType.SYS_USER.getUserType() : user.getUserType());
SysUser sysUser = MapstructUtils.convert(user, SysUser.class); SysUser sysUser = MapstructUtils.convert(user, SysUser.class);
sysUser.setTenantId(LoginHelper.getTenantId()); sysUser.setTenantId(LoginHelper.getTenantId());
...@@ -423,7 +460,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -423,7 +460,7 @@ public class SysUserServiceImpl implements ISysUserService {
// 新增用户与角色管理 // 新增用户与角色管理
insertUserRole(user, false); insertUserRole(user, false);
//保存用户信息 //保存用户信息
saveOrUpdateYsUser(sysUser); thirdService.saveOrUpdateYsUser(sysUser);
return rows; return rows;
} }
...@@ -441,29 +478,12 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -441,29 +478,12 @@ public class SysUserServiceImpl implements ISysUserService {
sysUser.setTenantId(tenantId); sysUser.setTenantId(tenantId);
boolean result = baseMapper.insert(sysUser) > 0; boolean result = baseMapper.insert(sysUser) > 0;
if (result) { if (result) {
saveOrUpdateYsUser(sysUser); thirdService.saveOrUpdateYsUser(sysUser);
} }
user.setUserId(sysUser.getUserId()); user.setUserId(sysUser.getUserId());
return result; return result;
} }
/**
* 保存或更新用户信息
*
* @param sysUser 用户信息
*/
@Override
public void saveOrUpdateYsUser(SysUser sysUser) {
remoteServerService.saveOrUpdateUser(
new RemoteUser()
.setSystemUserId(sysUser.getUserId())
.setUserName(sysUser.getUserName())
.setPhoneNumber(sysUser.getPhonenumber())
.setIdCard(sysUser.getIdCard())
.setUserType(sysUser.getUserType())
.setTenantId(sysUser.getTenantId())
);
}
/** /**
* 修改保存用户信息 * 修改保存用户信息
...@@ -485,7 +505,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -485,7 +505,7 @@ public class SysUserServiceImpl implements ISysUserService {
if (flag < 1) { if (flag < 1) {
throw new ServiceException("修改用户" + user.getUserName() + "信息失败"); throw new ServiceException("修改用户" + user.getUserName() + "信息失败");
} }
saveOrUpdateYsUser(baseMapper.selectById(user.getUserId())); thirdService.saveOrUpdateYsUser(baseMapper.selectById(user.getUserId()));
return flag; return flag;
} }
......
package org.dromara.system.service.impl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.server.api.RemoteServerService;
import org.dromara.server.api.domain.RemoteUser;
import org.dromara.system.domain.SysUser;
import org.dromara.system.service.IThirdService;
import org.springframework.stereotype.Service;
/**
* @author hzh
* @date 2025-06-25
**/
@Slf4j
@RequiredArgsConstructor
@Service
public class ThirdServiceImpl implements IThirdService {
@DubboReference
private RemoteServerService remoteServerService;
@Override
public void saveOrUpdateYsUser(SysUser sysUser) {
remoteServerService.saveOrUpdateUser(
new RemoteUser()
.setSystemUserId(sysUser.getUserId())
.setUserName(sysUser.getUserName())
.setPhoneNumber(sysUser.getPhonenumber())
.setIdCard(sysUser.getIdCard())
.setUserType(sysUser.getUserType())
.setTenantId(sysUser.getTenantId())
);
}
}
package org.dromara.workflow.flowable.listener; package org.dromara.workflow.flowable.listener;
import cn.hutool.core.collection.CollectionUtil;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.FileApprove; import org.dromara.workflow.domain.FileApprove;
import org.dromara.workflow.mapper.FileApproveMapper; import org.dromara.workflow.mapper.FileApproveMapper;
import org.dromara.workflow.service.IDeptService; import org.dromara.workflow.service.IDeptService;
import org.flowable.common.engine.api.variable.VariableContainer;
import org.flowable.engine.impl.el.FixedValue;
import org.flowable.task.service.delegate.DelegateTask; import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener; import org.flowable.task.service.delegate.TaskListener;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Objects; import java.util.List;
/** /**
* 部门文件下载申请自定义审批人监听器 * 部门文件下载申请自定义审批人监听器
...@@ -20,8 +26,15 @@ import java.util.Objects; ...@@ -20,8 +26,15 @@ import java.util.Objects;
*/ */
@Component @Component
@Slf4j @Slf4j
@Getter
@Setter
public class DeptFileApproveAssigneeListener implements TaskListener { public class DeptFileApproveAssigneeListener implements TaskListener {
/**
* 角色编码
*/
private FixedValue roleKey;
@Override @Override
public void notify(DelegateTask delegateTask) { public void notify(DelegateTask delegateTask) {
// 获取业务id // 获取业务id
...@@ -34,10 +47,15 @@ public class DeptFileApproveAssigneeListener implements TaskListener { ...@@ -34,10 +47,15 @@ public class DeptFileApproveAssigneeListener implements TaskListener {
// 调用服务获取审批人列表 // 调用服务获取审批人列表
Long approveId = deptService.selectLeaderIdByFileId(fa.getSysDeptFileId()); Long approveId = deptService.selectLeaderIdByFileId(fa.getSysDeptFileId());
List<Long> roleUserIds = deptService.selectUserListByFileIdAndRoleKey(fa.getSysDeptFileId(), roleKey.getValue(VariableContainer.empty()).toString());
if (approveId != null) {
roleUserIds.add(approveId);
}
if (CollectionUtil.isEmpty(roleUserIds)) {
roleUserIds = List.of(-1L);
}
// 设置候选用户 // 设置候选用户
String owner = Objects.isNull(approveId) ? null : approveId.toString(); delegateTask.addCandidateUsers(StreamUtils.toList(roleUserIds, Object::toString));
delegateTask.setAssignee(owner);
} }
} }
package org.dromara.workflow.flowable.listener;
import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.domain.FileApprove;
import org.dromara.workflow.mapper.FileApproveMapper;
import org.dromara.workflow.service.IDeptService;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* 部门文件下载申请自定义审批人监听器
*
* @author wenhe
*/
@Component
@Slf4j
public class DeptFileApproveGroupListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 获取业务id
Long businessKey = Long.parseLong(delegateTask.getVariable(FlowConstant.BUSINESS_KEY).toString());
FileApproveMapper mapper = SpringUtils.getBean(FileApproveMapper.class);
FileApprove fa = mapper.selectById(businessKey);
IDeptService deptService = SpringUtils.getBean(IDeptService.class);
// 调用服务获取审批人列表
List<Long> userIds = deptService.selectUserListByFileIdAndRoleKey(fa.getSysDeptFileId(), "file_approve");
if (CollectionUtil.isEmpty(userIds)) {
userIds = List.of(-1L);
}
// 设置候选用户
delegateTask.addCandidateUsers(StreamUtils.toList(userIds, Object::toString));
}
}
package org.dromara.workflow.flowable.listener;
import org.flowable.task.service.delegate.DelegateTask;
import org.flowable.task.service.delegate.TaskListener;
/**
* @author wenhe
*/
public class DeptReviewCompleteListener implements TaskListener {
@Override
public void notify(DelegateTask task) {
task.setVariable("end", true);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论