TenantServiceImpl.java 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. package com.huaxu.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.huaxu.common.ToolUtil;
  5. import com.huaxu.dao.TenantMapper;
  6. import com.huaxu.dto.RoleRequestDto;
  7. import com.huaxu.dto.TenantDto;
  8. import com.huaxu.entity.Org;
  9. import com.huaxu.entity.Role;
  10. import com.huaxu.entity.TenantEntity;
  11. import com.huaxu.entity.UserEntity;
  12. import com.huaxu.model.LoginUser;
  13. import com.huaxu.service.OrgService;
  14. import com.huaxu.service.RoleService;
  15. import com.huaxu.service.TenantService;
  16. import com.huaxu.service.UserService;
  17. import com.huaxu.util.Snowflake;
  18. import com.huaxu.util.UserUtil;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import javax.annotation.Resource;
  22. import java.util.Date;
  23. import java.util.List;
  24. import java.util.stream.Collectors;
  25. /**
  26. * @description 租户管理实现类
  27. * @auto wangli
  28. * @data 2020-10-26 15:44
  29. */
  30. @Service("tenantService")
  31. public class TenantServiceImpl implements TenantService {
  32. /**
  33. * 租户
  34. */
  35. @Resource
  36. private TenantMapper tenantMapper;
  37. /**
  38. * 用户
  39. */
  40. @Autowired
  41. private UserService userService;
  42. /**
  43. * 角色
  44. */
  45. @Autowired
  46. private RoleService roleService;
  47. /**
  48. * 机构
  49. */
  50. @Autowired
  51. private OrgService orgService;
  52. /**
  53. * 通过ID查询单条数据
  54. *
  55. * @param id 主键
  56. * @return 实例对象
  57. */
  58. @Override
  59. public TenantDto selectById(Integer id) {
  60. TenantDto tenantDto = tenantMapper.selectById(id);
  61. //获取租户菜单
  62. if(tenantDto != null){
  63. tenantDto.setTenantMenuIds(tenantMapper.selectTenantMenuIds(id));
  64. }
  65. return tenantDto;
  66. }
  67. /**
  68. * 查询所有
  69. *
  70. * @return 实例对象的集合
  71. */
  72. @Override
  73. public List<TenantDto> selectAll() {
  74. return tenantMapper.selectAll();
  75. }
  76. /**
  77. * 根据条件查询
  78. *
  79. * @return 实例对象的集合
  80. */
  81. @Override
  82. public List<TenantDto> selectList(TenantDto tenantDto) {
  83. return tenantMapper.selectList(tenantDto);
  84. }
  85. /**
  86. * 新增数据
  87. *
  88. * @param tenantDto 实例对象
  89. * @return 实例对象
  90. */
  91. @Override
  92. public Integer insert(TenantDto tenantDto) {
  93. LoginUser loginUser = UserUtil.getCurrentUser();
  94. //创建租户信息
  95. if(loginUser != null){
  96. tenantDto.setUpdateBy(loginUser.getUsername());
  97. tenantDto.setCreateBy(loginUser.getUsername());
  98. }
  99. tenantDto.setDateCreate(new Date());
  100. tenantDto.setDateUpdate(new Date());
  101. tenantDto.setCode(Snowflake.generateId().toString());
  102. tenantDto.setStatus(1);
  103. tenantDto.setTenantState(1);
  104. tenantMapper.insert(tenantDto);
  105. //创建租户菜单信息
  106. if(tenantDto.getTenantMenuIds().size()>0){
  107. tenantMapper.createTenantMenu(tenantDto.getCreateBy(),tenantDto.getId(),tenantDto.getTenantMenuIds());
  108. }
  109. //创建角色
  110. RoleRequestDto roleRequestDto = new RoleRequestDto();
  111. Role role = new Role();
  112. role.setRoleName(tenantDto.getTenantName());
  113. role.setDescription(tenantDto.getTenantName() +"初始化角色");
  114. role.setRoleState(1);
  115. role.setPermissionType(1);
  116. role.setStatus(1);
  117. roleRequestDto.setRole(role);
  118. //查询租户菜单id
  119. // List<Integer > tenantMenuIds = tenantMapper.selectTenantMenuIds(tenantDto.getId());
  120. roleRequestDto.setIds(tenantDto.getTenantMenuIds());
  121. //插入角色
  122. roleService.insert(roleRequestDto);
  123. //插入角色菜单(租户菜单id)
  124. roleService.updateRoleMenuRelations(roleRequestDto);
  125. /*创建机构*/
  126. Org org = new Org();
  127. org.setOrgLeaderName(tenantDto.getUserName());
  128. org.setOrgLeaderPhone(tenantDto.getPhone());
  129. org.setOrgName(tenantDto.getTenantName());
  130. org.setOrgState(1);
  131. org.setStatus(1);
  132. org.setOrgType("company"); //机构类型
  133. org.setParentId(0);
  134. orgService.insert(org);
  135. //创建管理员信息
  136. UserEntity userEntity =new UserEntity();
  137. userEntity.setTenantId(tenantDto.getCode());
  138. userEntity.setCreateBy(tenantDto.getCreateBy());
  139. userEntity.setDateCreate(new Date());
  140. userEntity.setUpdateBy(tenantDto.getUpdateBy());
  141. userEntity.setDateUpdate(new Date());
  142. userEntity.setStatus(1);
  143. userEntity.setPhone(tenantDto.getPhone());
  144. userEntity.setUsername(tenantDto.getUserName());
  145. userEntity.setUserType("1");//租户系统管理员
  146. userEntity.setRoleId(role.getId().longValue()); //赋值角色
  147. userEntity.setCompanyOrgId(org.getId().longValue());//公司
  148. userEntity.setDeptOrgId(org.getId().longValue());//机构
  149. userService.addUser(userEntity);
  150. return 1;
  151. }
  152. /**
  153. * 修改数据
  154. *
  155. * @param tenantDto 实例对象
  156. * @return 实例对象
  157. */
  158. @Override
  159. public int update(TenantDto tenantDto) {
  160. LoginUser loginUser = UserUtil.getCurrentUser();
  161. if(tenantDto.getId() == null){
  162. return 0;
  163. }
  164. //修改租户信息
  165. if(loginUser != null){
  166. tenantDto.setUpdateBy(loginUser.getUsername());
  167. }
  168. tenantDto.setDateUpdate(new Date());
  169. tenantMapper.update(tenantDto);
  170. //修改租户菜单信息
  171. //界面传回的租户菜单id
  172. List<Integer > newTenantMenuIds = tenantDto.getTenantMenuIds();
  173. //数据库中已存在的租户菜单id
  174. List<Integer > oldTenantMenuIds = tenantMapper.selectTenantMenuIds(tenantDto.getId());
  175. //相同的暂时不改动
  176. //新增的菜单id(需要新增的)
  177. List<Integer> addTenantMenuIds = newTenantMenuIds.stream().filter(item -> !oldTenantMenuIds.contains(item)).collect(Collectors.toList());
  178. //创建租户菜单信息
  179. if(addTenantMenuIds.size()>0){
  180. tenantMapper.createTenantMenu(tenantDto.getUpdateBy(),tenantDto.getId(),addTenantMenuIds);
  181. }
  182. //去掉的菜单id(需要删除的)
  183. List<Integer> deleteTenantMenuIds = oldTenantMenuIds.stream().filter(item -> !newTenantMenuIds.contains(item)).collect(Collectors.toList());
  184. if(deleteTenantMenuIds.size()>0){
  185. tenantMapper.deleteTenantMenuIds(tenantDto.getId(),deleteTenantMenuIds);
  186. }
  187. //修改管理员信息
  188. UserEntity userEntity =userService.findUserById(tenantDto.getUserId());
  189. userEntity.setUpdateBy(tenantDto.getUpdateBy());
  190. userEntity.setDateUpdate(new Date());
  191. userEntity.setPhone(tenantDto.getPhone());
  192. userEntity.setUsername(tenantDto.getUserName());
  193. userService.updateUserById(userEntity);
  194. //创建角色
  195. RoleRequestDto roleRequestDto = new RoleRequestDto();
  196. Role role = roleService.selectById(userEntity.getRoleId().intValue());
  197. role.setRoleName(tenantDto.getTenantName());
  198. role.setDescription(tenantDto.getTenantName() +"初始化角色");
  199. roleRequestDto.setRole(role);
  200. //查询租户菜单id
  201. // List<Integer > tenantMenuIds = tenantMapper.selectTenantMenuIds(tenantDto.getId());
  202. roleRequestDto.setIds(newTenantMenuIds);
  203. //插入角色
  204. roleService.update(roleRequestDto);
  205. //插入角色菜单(租户菜单id)
  206. roleService.updateRoleMenuRelations(roleRequestDto);
  207. return 1;
  208. }
  209. /**
  210. * 通过主键删除数据
  211. *
  212. * @param id 主键
  213. * @return 是否成功
  214. */
  215. @Override
  216. public int deleteById(Integer id) {
  217. //先删除租户菜单
  218. tenantMapper.deleteTenantMenuIds(id,null);
  219. return tenantMapper.deleteById(id);
  220. }
  221. /**
  222. * 查询总数据数
  223. *
  224. * @return 数据总数
  225. */
  226. @Override
  227. public int count() {
  228. return tenantMapper.count();
  229. }
  230. /**
  231. * 分页查询
  232. *
  233. * @return 对象列表
  234. */
  235. @Override
  236. public IPage<TenantDto> selectPage(IPage<TenantDto> page, TenantDto tenantDto) {
  237. return tenantMapper.selectPage(page, tenantDto);
  238. }
  239. public boolean checkTenantNameUnique(TenantDto tenantDto) {
  240. List<Integer> tenantIds = tenantMapper.countIds(tenantDto.getTenantName());
  241. if(tenantIds.size()>1){ //名字匹配多个结果
  242. return true;
  243. }else if(tenantIds.size() == 0 ){ //没有匹配的结果
  244. return false;
  245. }else if(ToolUtil.isEmpty(tenantDto.getId())){ //新增情况匹配到一个结果
  246. return true;
  247. }else if(!tenantDto.getId().equals(tenantIds.get(0))){ //修改时匹配到一个结果,但id不相等
  248. return true;
  249. }else { //修改时匹配到一个结果且id相等
  250. return false;
  251. }
  252. }
  253. }