123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- package com.imed.costaccount.service.impl;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.util.StrUtil;
- import cn.hutool.crypto.SecureUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- 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.token.JwtUtil;
- import com.imed.costaccount.common.token.RedisUtil;
- import com.imed.costaccount.common.util.BeanUtil;
- import com.imed.costaccount.common.util.PageUtils;
- import com.imed.costaccount.common.util.Result;
- import com.imed.costaccount.mapper.UserMapper;
- import com.imed.costaccount.model.Hospital;
- import com.imed.costaccount.model.User;
- import com.imed.costaccount.model.dto.LoginDTO;
- import com.imed.costaccount.model.dto.UserDto;
- import com.imed.costaccount.model.vo.LoginVO;
- import com.imed.costaccount.model.vo.UserVO;
- import com.imed.costaccount.service.HospitalService;
- import com.imed.costaccount.service.UserService;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.shiro.SecurityUtils;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Propagation;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.StringUtils;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.Objects;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.stream.Collectors;
- /**
- * @author 11290
- */
- @Slf4j
- @Service("userService")
- public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
- private JwtUtil jwtUtil;
- private HospitalService hosptailService;
- private final RedisUtil redisUtil;
- private Map<String, Integer> map = new ConcurrentHashMap<>();
- public UserServiceImpl(JwtUtil jwtUtil, HospitalService hosptailService, RedisUtil redisUtil) {
- this.jwtUtil = jwtUtil;
- this.hosptailService = hosptailService;
- this.redisUtil = redisUtil;
- }
- /**
- * 登录具体逻辑
- *
- * @param loginDTO {@link LoginDTO} 登录相关参数
- * @return
- */
- @Override
- public LoginVO login(LoginDTO loginDTO) {
- String hospSign = loginDTO.getHospSign();
- Long id = loginDTO.getId();
- if (Objects.isNull(id)) {
- Hospital hospital = hosptailService.getBySign(hospSign);
- id = hospital.getId();
- }
- // 院区情况
- User one = this.getOne(
- new LambdaQueryWrapper<User>()
- .eq(User::getAccount, loginDTO.getAccount())
- .eq(User::getHospId, id)
- .last("limit 1")
- );
- if (Objects.isNull(one)) {
- throw new CostException("用户不存在");
- }
- if (!SecureUtil.md5(loginDTO.getPassword()).equals(one.getPassword())) {
- throw new CostException("密码错误");
- }
- String token = jwtUtil.createToken(one.getId());
- // 保存到redis 有效期一天
- redisUtil.set(one.getId() + "", token, 60 * 60 * 24);
- return LoginVO.builder().token(token).name(one.getName()).userid(one.getId()).build();
- }
- /**
- * 查询查询用户的数据信息
- *
- * @param page
- * @param pageSize
- * @param hospId
- * @return
- */
- @Override
- public PageUtils queryList(Integer page, Integer pageSize, Long hospId, String name) {
- Page<User> userPage = new Page<>(page, pageSize);
- Page<User> pages = this.page(userPage,
- new QueryWrapper<User>().lambda().
- eq(User::getHospId, hospId)
- .like(!StringUtils.isEmpty(name), User::getName, name)
- .orderByDesc(User::getCreateTime));
- List<User> records = pages.getRecords();
- List<UserVO> userVOS = BeanUtil.convertList(records, UserVO.class);
- PageUtils pageUtils = new PageUtils(pages);
- pageUtils.setList(userVOS);
- return pageUtils;
- }
- /**
- * 根据用户的姓名查询用户
- *
- * @param name
- * @return
- */
- @Override
- public List<UserVO> getByUserName(String name) {
- List<User> users = baseMapper.selectList(new QueryWrapper<User>().lambda().like(!StringUtils.isEmpty(name), User::getName, name));
- List<UserVO> userVOS = BeanUtil.convertList(users, UserVO.class);
- return userVOS;
- }
- /**
- * 保存用户信息
- *
- * @param userDto
- */
- @Override
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- public void saveUser(UserDto userDto) {
- User user = (User) SecurityUtils.getSubject().getPrincipal();
- // 医院的Id
- Long hospId = user.getHospId();
- User userRequest = BeanUtil.convertObj(userDto, User.class);
- if (StringUtils.isEmpty(userDto.getPassword())) {
- throw new CostException("密码不能为空");
- }
- userRequest.setPassword(SecureUtil.md5(userDto.getPassword()));
- userRequest.setHospId(hospId);
- userRequest.setCreateTime(System.currentTimeMillis());
- baseMapper.insert(userRequest);
- }
- /**
- * 修改用户
- *
- * @param userDto
- */
- @Override
- @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
- public void updateByUser(UserDto userDto) {
- User userOne = (User) SecurityUtils.getSubject().getPrincipal();
- User user = baseMapper.selectOne(new QueryWrapper<User>().lambda().like(
- !StringUtils.isEmpty(userDto.getId()), User::getId, userDto.getId()));
- if (Objects.isNull(user)) {
- throw new CostException("用户不存在");
- }
- baseMapper.deleteById(user.getId());
- User userRequest = BeanUtil.convertObj(userDto, User.class);
- userRequest.setId(null);
- userRequest.setHospitalStatus(userDto.getHospitalStatus());
- userRequest.setCreateTime(System.currentTimeMillis());
- userRequest.setHospId(userOne.getHospId());
- if (!StringUtils.isEmpty(userDto.getPassword())) {
- String newPassWord = SecureUtil.md5(userDto.getPassword());
- userRequest.setPassword(newPassWord);
- }else {
- userRequest.setPassword(user.getPassword());
- }
- baseMapper.insert(userRequest);
- }
- /**
- * 导入用户
- *
- * @param list 上传的文件读取的内容
- * @param currentUser 当前登录用户
- */
- @Override
- @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
- public Result importUser(List<List<Object>> list, User currentUser) {
- // TODO: 2021/7/26 校验excel格式是否正确
- for (int i = list.size() - 1; i >= 0; i--) {
- if (i == 0 || i == 1 || i == 2 || i == 3) {
- list.remove(list.get(i));
- }
- }
- log.info("读取的数据为:{}", list);
- List<User> users = new ArrayList<>();
- List<String> errRowNums = new ArrayList<>();
- for (int i = 0; i < list.size(); i++) {
- List<Object> data = list.get(i);
- log.info("得到用户输入的数据为:{}", data);
- User user = new User();
- user.setHospId(currentUser.getHospId());
- user.setCreateTime(System.currentTimeMillis());
- int size = data.size();
- if (size != 5) {
- // 补充读取的null问题
- if (size == 4) {
- data.add(StrUtil.EMPTY);
- }
- for (int j = 0; j < 5; j++) {
- if (Objects.isNull(data.get(j))) {
- data.set(j, StrUtil.EMPTY);
- }
- }
- }
- for (int j = 0; j < 5; j++) {
- String str = String.valueOf(data.get(j));
- log.info("得到的字符串{}", str);
- if (StrUtil.isBlank(str)) {
- errRowNums.add("" + (i + 5));
- }
- if (j == 0) {
- Hospital hospital = hosptailService.getByName(str);
- user.setHospId(hospital.getId());
- } else if (j == 1) {
- user.setName(str);
- } else if (j == 2) {
- user.setAccount(str);
- } else if (j == 3) {
- user.setPassword(SecureUtil.md5(str));
- } else {
- user.setMobilePhoneNum(str);
- }
- }
- users.add(user);
- }
- if (CollUtil.isNotEmpty(errRowNums)) {
- String collect = errRowNums.stream().collect(Collectors.joining(StrUtil.COMMA));
- throw new CostException(500, "第" + collect + "行数据异常");
- }
- // 校验users
- List<User> realUsers = new ArrayList<>();
- users.forEach(i -> {
- User one = getOne(
- new QueryWrapper<User>().lambda()
- .eq(User::getAccount, i.getAccount())
- .eq(User::getHospId, i.getHospId())
- );
- if (Objects.nonNull(one)) {
- realUsers.add(one);
- }
- });
- users = users.stream().filter(i -> !realUsers.stream().map(User::getAccount).collect(Collectors.toList()).contains(i.getAccount())).collect(Collectors.toList());
- this.saveBatch(users);
- return Result.build(200, "有" + realUsers.size() + "条数据已存在,未被导入", null);
- }
- // /**
- // * 校验是否是本院下人员,并且返回对应的院区id
- // * @param hospId
- // * @param str
- // * @return
- // */
- // private Integer getByNameAndCheck(Long hospId, String str) {
- // Integer thisHospAreaId = this.hosptailService.getByNameAndCheck(hospId, str);
- // return thisHospAreaId;
- // }
- /**
- * 退出登录
- *
- * @param user
- */
- @Override
- public void logout(User user) {
- redisUtil.del(user.getId() + "");
- }
- }
|