UserServiceImpl.java 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.imed.costaccount.service.impl;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.StrUtil;
  4. import cn.hutool.crypto.SecureUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.imed.costaccount.common.exception.CostException;
  10. import com.imed.costaccount.common.token.JwtUtil;
  11. import com.imed.costaccount.common.util.BeanUtil;
  12. import com.imed.costaccount.common.util.PageUtils;
  13. import com.imed.costaccount.common.util.Result;
  14. import com.imed.costaccount.mapper.UserMapper;
  15. import com.imed.costaccount.model.Hospital;
  16. import com.imed.costaccount.model.User;
  17. import com.imed.costaccount.model.dto.LoginDTO;
  18. import com.imed.costaccount.model.dto.UserDto;
  19. import com.imed.costaccount.model.vo.LoginVO;
  20. import com.imed.costaccount.model.vo.UserVO;
  21. import com.imed.costaccount.service.HospitalService;
  22. import com.imed.costaccount.service.UserService;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.apache.shiro.SecurityUtils;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Propagation;
  27. import org.springframework.transaction.annotation.Transactional;
  28. import org.springframework.util.StringUtils;
  29. import java.util.ArrayList;
  30. import java.util.List;
  31. import java.util.Objects;
  32. import java.util.stream.Collectors;
  33. /**
  34. * @author 11290
  35. */
  36. @Slf4j
  37. @Service("userService")
  38. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
  39. private JwtUtil jwtUtil;
  40. private HospitalService hosptailService;
  41. public UserServiceImpl(JwtUtil jwtUtil, HospitalService hosptailService) {
  42. this.jwtUtil = jwtUtil;
  43. this.hosptailService = hosptailService;
  44. }
  45. /**
  46. * 登录具体逻辑
  47. *
  48. * @param loginDTO {@link LoginDTO} 登录相关参数
  49. * @return
  50. */
  51. @Override
  52. public LoginVO login(LoginDTO loginDTO) {
  53. String hospSign = loginDTO.getHospSign();
  54. Integer id = loginDTO.getId();
  55. if (Objects.isNull(id)) {
  56. Hospital hospital = hosptailService.getBySign(hospSign);
  57. id = hospital.getId();
  58. }
  59. // 院区情况
  60. User one = this.getOne(
  61. new LambdaQueryWrapper<User>()
  62. .eq(User::getAccount, loginDTO.getAccount())
  63. .eq(User::getHospId, id)
  64. .last("limit 1")
  65. );
  66. if (Objects.isNull(one)) {
  67. throw new CostException("用户不存在");
  68. }
  69. if (!SecureUtil.md5(loginDTO.getPassword()).equals(one.getPassword())) {
  70. throw new CostException("密码错误");
  71. }
  72. String token = jwtUtil.createToken(one.getId());
  73. return LoginVO.builder().token(token).name(one.getName()).userid(one.getId()).build();
  74. }
  75. /**
  76. * 查询查询用户的数据信息
  77. *
  78. * @param page
  79. * @param pageSize
  80. * @param hospId
  81. * @return
  82. */
  83. @Override
  84. public PageUtils queryList(Integer page, Integer pageSize, Integer hospId,String name) {
  85. Page<User> userPage = new Page<>(page, pageSize);
  86. Page<User> pages = this.page(userPage, new QueryWrapper<User>().lambda().eq(User::getHospId, hospId).like(!StringUtils.isEmpty(name),User::getName,name));
  87. List<User> records = pages.getRecords();
  88. List<UserVO> userVOS = BeanUtil.convertList(records, UserVO.class);
  89. PageUtils pageUtils = new PageUtils(pages);
  90. pageUtils.setList(userVOS);
  91. return pageUtils;
  92. }
  93. /**
  94. * 根据用户的姓名查询用户
  95. *
  96. * @param name
  97. * @return
  98. */
  99. @Override
  100. public List<UserVO> getByUserName(String name) {
  101. List<User> users = baseMapper.selectList(new QueryWrapper<User>().lambda().like(!StringUtils.isEmpty(name),User::getName,name));
  102. List<UserVO> userVOS = BeanUtil.convertList(users, UserVO.class);
  103. return userVOS;
  104. }
  105. /**
  106. * 保存用户信息
  107. *
  108. * @param userDto
  109. */
  110. @Override
  111. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  112. public void saveUser(UserDto userDto) {
  113. User user = (User) SecurityUtils.getSubject().getPrincipal();
  114. // 医院的Id
  115. Integer hospId = user.getHospId();
  116. User userRequest = BeanUtil.convertObj(userDto, User.class);
  117. if (StringUtils.isEmpty(userDto.getPassword())){
  118. throw new CostException("密码不能为空");
  119. }
  120. userRequest.setPassword(SecureUtil.md5(userDto.getPassword()));
  121. userRequest.setHospId(hospId);
  122. userRequest.setCreateTime(System.currentTimeMillis());
  123. baseMapper.insert(userRequest);
  124. }
  125. /**
  126. * 修改用户
  127. *
  128. * @param userDto
  129. */
  130. @Override
  131. @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
  132. public void updateByUser(UserDto userDto) {
  133. User user = baseMapper.selectOne(new QueryWrapper<User>().lambda().like(
  134. !StringUtils.isEmpty(userDto.getId()),User::getId,userDto.getId()));
  135. if (Objects.isNull(user)) {
  136. throw new CostException("用户不存在");
  137. }
  138. baseMapper.deleteById(user.getId());
  139. User userRequest = BeanUtil.convertObj(user,User.class);
  140. user.setId(null);
  141. user.setHospitalStatus(userDto.getHospitalStatus());
  142. if (!StringUtils.isEmpty(userDto.getPassword()) ){
  143. String newPassWord = SecureUtil.md5(userDto.getPassword());
  144. user.setPassword(newPassWord);
  145. }
  146. baseMapper.insert(userRequest);
  147. }
  148. /**
  149. * 导入用户
  150. * @param list 上传的文件读取的内容
  151. * @param currentUser 当前登录用户
  152. */
  153. @Override
  154. @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
  155. public Result importUser(List<List<Object>> list, User currentUser) {
  156. // TODO: 2021/7/26 校验excel格式是否正确
  157. for (int i = list.size() - 1; i >= 0; i--) {
  158. if (i == 0 || i == 1 || i == 2 || i == 3) {
  159. list.remove(list.get(i));
  160. }
  161. }
  162. log.info("读取的数据为:{}", list);
  163. List<User> users = new ArrayList<>();
  164. List<String> errRowNums = new ArrayList<>();
  165. for (int i = 0; i < list.size(); i++) {
  166. List<Object> data = list.get(i);
  167. log.info("得到用户输入的数据为:{}",data);
  168. User user = new User();
  169. user.setHospId(currentUser.getHospId());
  170. user.setCreateTime(System.currentTimeMillis());
  171. int size = data.size();
  172. if (size != 3) {
  173. // 补充读取的null问题
  174. if (size == 2) {
  175. data.add(StrUtil.EMPTY);
  176. }
  177. for (int j = 0; j < 3; j++) {
  178. if (Objects.isNull(data.get(j))) {
  179. data.set(j, StrUtil.EMPTY);
  180. }
  181. }
  182. }
  183. for (int j = 0; j < 3; j++) {
  184. String str = String.valueOf(data.get(j));
  185. log.info("得到的字符串{}",str);
  186. if (StrUtil.isBlank(str)) {
  187. errRowNums.add("" + (i + 5));
  188. }
  189. if (j == 0) {
  190. user.setName(str);
  191. } else if (j == 1) {
  192. user.setAccount(str);
  193. } else {
  194. user.setPassword(SecureUtil.md5(str));
  195. }
  196. }
  197. users.add(user);
  198. }
  199. if (CollUtil.isNotEmpty(errRowNums)) {
  200. String collect = errRowNums.stream().collect(Collectors.joining(StrUtil.COMMA));
  201. throw new CostException(500, "第" + collect + "行数据异常");
  202. }
  203. // 校验users
  204. List<User> realUsers = new ArrayList<>();
  205. users.forEach(i -> {
  206. User one = getOne(
  207. new QueryWrapper<User>().lambda()
  208. .eq(User::getAccount, i.getAccount())
  209. .eq(User::getHospId, i.getHospId())
  210. );
  211. if (Objects.nonNull(one)) {
  212. realUsers.add(one);
  213. }
  214. });
  215. users = users.stream().filter(i -> !realUsers.stream().map(User::getAccount).collect(Collectors.toList()).contains(i.getAccount())).collect(Collectors.toList());
  216. this.saveBatch(users);
  217. return Result.build(200, "有" + realUsers.size() + "条数据已存在,未被导入", null);
  218. }
  219. }