package com.imed.costaccount.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.imed.costaccount.common.exception.CostException; import com.imed.costaccount.common.util.BeanUtil; import com.imed.costaccount.common.util.PageUtils; import com.imed.costaccount.mapper.RoleMapper; import com.imed.costaccount.model.Role; import com.imed.costaccount.model.User; import com.imed.costaccount.model.dto.RoleEditDTO; import com.imed.costaccount.model.dto.RoleSaveDTO; import com.imed.costaccount.model.vo.RoleVO; import com.imed.costaccount.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Slf4j @Service("roleService") public class RoleServiceImpl extends ServiceImpl implements RoleService { private final UserService userService; public RoleServiceImpl(UserService userService) { this.userService = userService; } /** * 保存角色 * * @param roleSaveDTO {@link RoleSaveDTO} * @param user */ @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void saveRole(RoleSaveDTO roleSaveDTO, User user) { Role role = BeanUtil.convertObj(roleSaveDTO, Role.class); role.setCreateUserId(user.getId()) .setHospId(user.getHospId()) .setCreateTime(System.currentTimeMillis()); this.save(role); } /** * 查询角色列表并分页 * * @param page 页码 * @param pageSize 每页展示数据条数 * @param keyword 模糊匹配关键字 * @param user 当前登录用户 * @param modifyTime * @return {@link PageUtils} 分页对象 */ @Override public PageUtils selectList(Integer page, Integer pageSize, String keyword, User user, String modifyTime) { DateTime modifyDate = DateUtil.parseDate(modifyTime); long startTime = DateUtil.beginOfDay(modifyDate).getTime(); long endTime = DateUtil.endOfDay(modifyDate).getTime(); Page rolePage = new Page<>(page, pageSize); Page pages = this.page(rolePage, new LambdaQueryWrapper().eq(Role::getHospId, user.getHospId()) .and(StrUtil.isNotBlank(keyword), i -> i.eq(Role::getRoleName, keyword) .or() .eq(Role::getRemark, keyword)) .between(StrUtil.isNotBlank(modifyTime), Role::getCreateTime, startTime, endTime) ); List records = pages.getRecords(); List list = records.stream().map(i -> { RoleVO roleVO = BeanUtil.convertObj(i, RoleVO.class); roleVO.setModifyUserName(userService.getUsernameByIdAndHospId(i.getCreateUserId(), user.getHospId())); roleVO.setModifyTime(DateUtil.formatDateTime(DateUtil.date(i.getCreateTime()))); // List users = userRoleService.getUsersByRoleId(i.getRoleId(), user.getHospId()); // roleVO.setUsers(users); return roleVO; }).collect(Collectors.toList()); return new PageUtils(list, (int) pages.getTotal(), pageSize, page); } /** * 编辑某个角色 * * @param roleEditDTO {@link RoleEditDTO} * @param userId 当前登录人id */ @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void updateRole(RoleEditDTO roleEditDTO, Long userId) { Role byId = this.getById(roleEditDTO.getRoleId()); if (Objects.isNull(byId)) { throw new CostException(500, "选择的角色已被移除"); } BeanUtil.convertObj(roleEditDTO, byId); byId.setCreateTime(System.currentTimeMillis()); byId.setCreateUserId(userId); log.info("byId:{}", byId); this.updateById(byId); } }