UserServiceImpl.java 8.9 KB

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