UserServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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).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. *
  151. * @param list 上传的文件读取的内容
  152. * @param currentUser 当前登录用户
  153. */
  154. @Override
  155. @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
  156. public Result importUser(List<List<Object>> list, User currentUser) {
  157. // TODO: 2021/7/26 校验excel格式是否正确
  158. for (int i = list.size() - 1; i >= 0; i--) {
  159. if (i == 0 || i == 1 || i == 2 || i == 3) {
  160. list.remove(list.get(i));
  161. }
  162. }
  163. log.info("读取的数据为:{}", list);
  164. List<User> users = new ArrayList<>();
  165. List<String> errRowNums = new ArrayList<>();
  166. for (int i = 0; i < list.size(); i++) {
  167. List<Object> data = list.get(i);
  168. log.info("得到用户输入的数据为:{}", data);
  169. User user = new User();
  170. user.setHospId(currentUser.getHospId());
  171. user.setCreateTime(System.currentTimeMillis());
  172. int size = data.size();
  173. if (size != 5) {
  174. // 补充读取的null问题
  175. if (size == 4) {
  176. data.add(StrUtil.EMPTY);
  177. }
  178. for (int j = 0; j < 5; j++) {
  179. if (Objects.isNull(data.get(j))) {
  180. data.set(j, StrUtil.EMPTY);
  181. }
  182. }
  183. }
  184. for (int j = 0; j < 5; j++) {
  185. String str = String.valueOf(data.get(j));
  186. log.info("得到的字符串{}", str);
  187. if (StrUtil.isBlank(str)) {
  188. errRowNums.add("" + (i + 5));
  189. }
  190. if (j == 0) {
  191. // TODO: 2021/7/27 查询到具体院区
  192. user.setHospId(8);
  193. } else if (j == 1) {
  194. user.setName(str);
  195. } else if (j == 2) {
  196. user.setAccount(str);
  197. } else if (j == 3) {
  198. user.setPassword(SecureUtil.md5(str));
  199. } else {
  200. user.setMobilePhoneNum(str);
  201. }
  202. }
  203. users.add(user);
  204. }
  205. if (CollUtil.isNotEmpty(errRowNums)) {
  206. String collect = errRowNums.stream().collect(Collectors.joining(StrUtil.COMMA));
  207. throw new CostException(500, "第" + collect + "行数据异常");
  208. }
  209. // 校验users
  210. List<User> realUsers = new ArrayList<>();
  211. users.forEach(i -> {
  212. User one = getOne(
  213. new QueryWrapper<User>().lambda()
  214. .eq(User::getAccount, i.getAccount())
  215. .eq(User::getHospId, i.getHospId())
  216. );
  217. if (Objects.nonNull(one)) {
  218. realUsers.add(one);
  219. }
  220. });
  221. users = users.stream().filter(i -> !realUsers.stream().map(User::getAccount).collect(Collectors.toList()).contains(i.getAccount())).collect(Collectors.toList());
  222. this.saveBatch(users);
  223. return Result.build(200, "有" + realUsers.size() + "条数据已存在,未被导入", null);
  224. }
  225. }