RoleInfoController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. package com.dragoninfo.dcuc.authweb.restcontroller.auth;
  2. import com.alibaba.fastjson.JSON;
  3. import com.dragoninfo.dcuc.auth.auth.entity.RoleInfo;
  4. import com.dragoninfo.dcuc.auth.auth.entity.StaffAssignAuthInfo;
  5. import com.dragoninfo.dcuc.auth.auth.facade.IRoleInfoFacade;
  6. import com.dragoninfo.dcuc.auth.auth.facade.IStaffAssignAuthInfoFacade;
  7. import com.dragoninfo.dcuc.auth.auth.vo.RoleInfoVO;
  8. import com.dragoninfo.dcuc.auth.auth.vo.RsGridCheckedVO;
  9. import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.RoleFunRsRlVo;
  10. import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.RoleInfoVo;
  11. import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.RoleQuotaVo;
  12. import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.StaffAssignAuthInfoVo;
  13. import com.dragoninfo.duceap.core.response.Result;
  14. import com.dragonsoft.duceap.base.entity.search.SearchDTO;
  15. import com.dragonsoft.duceap.base.entity.security.SecurityUser;
  16. import com.dragonsoft.duceap.base.enums.BooleanEnum;
  17. import com.dragonsoft.duceap.commons.util.string.StringUtils;
  18. import com.dragonsoft.duceap.core.context.ContextUtils;
  19. import com.dragonsoft.duceap.core.search.Searchable;
  20. import com.dragonsoft.duceap.core.search.enums.SearchOperator;
  21. import com.dragonsoft.duceap.core.search.filter.Condition;
  22. import com.dragonsoft.duceap.web.annotation.Permission;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiImplicitParam;
  25. import io.swagger.annotations.ApiImplicitParams;
  26. import io.swagger.annotations.ApiOperation;
  27. import org.slf4j.Logger;
  28. import org.slf4j.LoggerFactory;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.data.domain.Page;
  32. import org.springframework.http.MediaType;
  33. import org.springframework.web.bind.annotation.*;
  34. import java.util.ArrayList;
  35. import java.util.Date;
  36. import java.util.List;
  37. @Api(tags = {"授权模块-角色管理接口"})
  38. @RestController
  39. @RequestMapping(value = "authsvr/v2/roleinfo")
  40. public class RoleInfoController {
  41. private static Logger logger = LoggerFactory.getLogger(RoleInfoController.class);
  42. @Autowired
  43. private IRoleInfoFacade iRoleInfoFacade;
  44. @Autowired
  45. private IStaffAssignAuthInfoFacade iStaffAssignAuthInfoFacade;
  46. /**
  47. * 角色列表
  48. *
  49. * @param searchDTO
  50. * @return
  51. */
  52. @ApiOperation(value = "角色列表")
  53. @ApiImplicitParam(name = "searchable", value = "查询条件,app_id_eq不能为空")
  54. @PostMapping(value = "roleList/_search")
  55. public Result<List<RoleInfoVO>> roleList(SearchDTO searchDTO) {
  56. Page<RoleInfoVO> roleInfoVOPage = iRoleInfoFacade.page(searchDTO);
  57. return Result.success(roleInfoVOPage.getTotalElements(), roleInfoVOPage.getContent());
  58. }
  59. /**
  60. * 保存菜单,功能
  61. *
  62. * @return
  63. */
  64. @ApiOperation(value = "保存菜单")
  65. @Permission(value = "power_config")
  66. @PostMapping(value = "/rsGrid", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  67. public Result saveRsGrid(@RequestBody RoleFunRsRlVo roleFunRsRlVo) {
  68. Result result;
  69. try {
  70. //TODO
  71. //DTO暂未设计,沿用原来的接口参数,后期修改
  72. String roleId = roleFunRsRlVo.getRoleId();
  73. String rsGridList = JSON.toJSONString(roleFunRsRlVo.getRsGridLists());
  74. iRoleInfoFacade.saveRsGrid(rsGridList, roleId);
  75. result = Result.success("保存成功");
  76. } catch (Exception e) {
  77. logger.error("saveRsGrid error:{}", e);
  78. result = Result.fail("保存异常");
  79. }
  80. return result;
  81. }
  82. /**
  83. * 查看角色信息
  84. *
  85. * @param id
  86. * @return
  87. */
  88. @ApiOperation(value = "查看角色信息")
  89. @ApiImplicitParams({@ApiImplicitParam(paramType = "path", name = "id", value = "角色ID", required = true
  90. , example = "40288a8b699fc2500169a33b20540000")})
  91. @GetMapping(value = "/role/{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  92. public Result<RoleInfoVo> roleInfo(@PathVariable("id") String id) {
  93. RoleInfo roleInfo = iRoleInfoFacade.get(id);
  94. RoleInfoVo vo = new RoleInfoVo();
  95. BeanUtils.copyProperties(roleInfo, vo);
  96. return Result.success(vo);
  97. }
  98. /**
  99. * 保存角色
  100. *
  101. * @param roleInfoVo
  102. * @return
  103. */
  104. @ApiOperation(value = "保存角色信息")
  105. @Permission(value = "power_config")
  106. @PostMapping(value = "/role", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  107. public Result saveRole(@RequestBody RoleInfoVo roleInfoVo) {
  108. Result result;
  109. try {
  110. if (!StringUtils.isEmpty(roleInfoVo.getDetail()) && (roleInfoVo.getDetail().trim().length() > 40 || roleInfoVo.getDetail().trim().getBytes().length > 120)) {
  111. result = Result.fail("角色描述不能超过40个字");
  112. return result;
  113. }
  114. Searchable searchable = Searchable.newSearchable();
  115. searchable.addSearchFilter("code", SearchOperator.eq, roleInfoVo.getCode());
  116. if (StringUtils.isNotEmpty(roleInfoVo.getId()))
  117. searchable.addSearchFilter("id", SearchOperator.ne, roleInfoVo.getId());
  118. List<RoleInfo> list = iRoleInfoFacade.roleList(searchable.toSearchDTO());
  119. if (list != null && list.size() > 0)
  120. return Result.fail("角色代码已被使用");
  121. SecurityUser user = (SecurityUser) ContextUtils.getUserInfo();
  122. roleInfoVo.setInitNumber(0);
  123. roleInfoVo.setCreator(user.getId());
  124. roleInfoVo.setIsActive(BooleanEnum.TRUE.getValue());
  125. roleInfoVo.setPoliceCategory(StringUtils.isEmpty(roleInfoVo.getPoliceCategory()) ? null : roleInfoVo.getPoliceCategory());
  126. roleInfoVo.setCreateTime(new Date());
  127. //TODO
  128. //DTO暂未设计,沿用原来的接口参数,后期修改
  129. RoleInfo roleInfo = new RoleInfo();
  130. BeanUtils.copyProperties(roleInfoVo, roleInfo);
  131. iRoleInfoFacade.save(roleInfo);
  132. result = Result.success("保存成功");
  133. } catch (Exception e) {
  134. logger.error("", e);
  135. result = Result.fail("保存失败");
  136. }
  137. return result;
  138. }
  139. /**
  140. * 修改角色
  141. *
  142. * @param roleInfoVo
  143. * @return
  144. */
  145. @ApiOperation(value = "修改角色信息")
  146. @Permission(value = "power_config")
  147. @PutMapping(value = "/role", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  148. public Result updateRole(@RequestBody RoleInfoVo roleInfoVo) {
  149. Result result;
  150. try {
  151. if (!StringUtils.isEmpty(roleInfoVo.getDetail()) && (roleInfoVo.getDetail().trim().length() > 40 || roleInfoVo.getDetail().trim().getBytes().length > 120)) {
  152. result = Result.fail("角色描述不能超过40个字");
  153. return result;
  154. }
  155. Searchable searchable = Searchable.newSearchable();
  156. searchable.addSearchFilter("code", SearchOperator.eq, roleInfoVo.getCode());
  157. if (StringUtils.isNotEmpty(roleInfoVo.getId()))
  158. searchable.addSearchFilter("id", SearchOperator.ne, roleInfoVo.getId());
  159. List<RoleInfo> list = iRoleInfoFacade.roleList(searchable.toSearchDTO());
  160. if (list != null && list.size() > 0)
  161. return Result.fail("角色代码已被使用");
  162. RoleInfo role_info = iRoleInfoFacade.get(roleInfoVo.getId());
  163. role_info.setCode(roleInfoVo.getCode());
  164. role_info.setName(roleInfoVo.getName());
  165. role_info.setRoleLevel(roleInfoVo.getRoleLevel());
  166. role_info.setDetail(roleInfoVo.getDetail());
  167. role_info.setModifier(ContextUtils.getUserInfo().getName());
  168. role_info.setModifiedTime(new Date());
  169. role_info.setPoliceCategory(StringUtils.isEmpty(roleInfoVo.getPoliceCategory()) ? null : roleInfoVo.getPoliceCategory());
  170. role_info.setRoleBusiness(roleInfoVo.getRoleBusiness());
  171. role_info.setIsNotLimitCount(roleInfoVo.getIsNotLimitCount());
  172. iRoleInfoFacade.update(role_info);
  173. result = Result.success("保存成功");
  174. } catch (Exception e) {
  175. logger.error("", e);
  176. result = Result.fail("保存失败");
  177. }
  178. return result;
  179. }
  180. /**
  181. * 删除角色
  182. *
  183. * @param id 角色id
  184. * @return
  185. */
  186. @ApiOperation(value = "删除角色信息")
  187. @ApiImplicitParams({@ApiImplicitParam(paramType = "path", name = "id", value = "角色ID", required = true
  188. , example = "40288a8b699fc2500169a33b20540000")})
  189. @Permission(value = "power_config")
  190. @DeleteMapping(value = "/role/{id}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  191. public Result deleteRole(@PathVariable("id") String id) {
  192. Result result;
  193. try {
  194. //删除角色信息
  195. iRoleInfoFacade.delete(id);
  196. //删除角色相关表的信息
  197. iRoleInfoFacade.delAllRolesInfo(id);
  198. result = Result.success("删除成功");
  199. } catch (Exception e) {
  200. logger.error("delete role error:{}", e);
  201. result = Result.fail("删除异常");
  202. }
  203. return result;
  204. }
  205. /**
  206. * 根据角色获取选中菜单、功能
  207. *
  208. * @param roleId 角色id
  209. * @return
  210. */
  211. @ApiOperation(value = "根据角色获取选中菜单、功能")
  212. @ApiImplicitParam(name = "roleId", value = "角色id", required = true)
  213. @GetMapping(value = "/checked/{roleId}")
  214. public Result<List<RsGridCheckedVO>> checked(@PathVariable("roleId") String roleId) {
  215. List<RsGridCheckedVO> rsGridCheckedVOList = iRoleInfoFacade.getRsGridChecked(roleId);
  216. return Result.success(rsGridCheckedVOList);
  217. }
  218. /**
  219. * 获取角色配额授权情况列表
  220. *
  221. * @param searchDTO
  222. * @return
  223. */
  224. @ApiOperation(value = "获取角色配额授权情况列表")
  225. @ApiImplicitParam(name = "searchDTO", value = "查询条件,applicationId不能为空", required = true)
  226. @PostMapping(value = "/roleQuotaList/_search")
  227. public Result<List<RoleInfoVO>> getRoleQuotaList(SearchDTO searchDTO) {
  228. Searchable searchable = Searchable.toSearchable(searchDTO);
  229. Condition condition = searchable.getSearchFilterByKey("applicationId_eq");
  230. if (null == condition) return Result.fail("400", "applicationId 不能为空");
  231. String applicationId = (String) condition.getValue();
  232. if (StringUtils.isBlank(applicationId)){
  233. return Result.fail("400", "applicationId 不能为空");
  234. }
  235. Page<RoleInfoVO> page = iRoleInfoFacade.getRoleQuotaList(searchDTO);
  236. return Result.success(page.getTotalElements(), page.getContent());
  237. }
  238. /**
  239. * 获取应用有限配额的角色列表
  240. *
  241. * @param searchDTO
  242. * @return
  243. */
  244. @ApiOperation(value = "获取应用有限配额的角色列表")
  245. @ApiImplicitParam(name = "searchDTO", value = "查询条件,applicationId不能为空", required = true)
  246. @PostMapping(value = "/orgQuotoAuthInfo/_search")
  247. public Result<List<RoleInfoVO>> getOrgQuotoAuthInfo(SearchDTO searchDTO) {
  248. Searchable searchable = Searchable.toSearchable(searchDTO);
  249. Condition condition = searchable.getSearchFilterByKey("applicationId_eq");
  250. if (null == condition) {
  251. return Result.fail("400", "applicationId 不能为空");
  252. }
  253. String applicationId = (String) condition.getValue();
  254. if (StringUtils.isBlank(applicationId)) {
  255. return Result.fail("400", "applicationId 不能为空");
  256. }
  257. Condition roleLevel_eq = searchable.getSearchFilterByKey("roleLevel_eq");
  258. if (roleLevel_eq != null) {
  259. searchable.removeSearchFilter("roleLevel_eq");
  260. searchable.addSearchFilter("role_level", SearchOperator.eq, roleLevel_eq.getValue());
  261. }
  262. searchable.addSearchFilter("is_not_limit_count", SearchOperator.eq, BooleanEnum.TRUE.value);
  263. Page<RoleInfoVO> page = iRoleInfoFacade.getQuotoRoles(searchable.toSearchDTO());
  264. return Result.success(page.getTotalElements(), page.getContent());
  265. }
  266. /**
  267. * 角色初始配额信息保存
  268. *
  269. * @return
  270. */
  271. @ApiOperation(value = "角色初始配额信息保存")
  272. @Permission(value = "quota_init")
  273. @PostMapping(value = "/roleQuota", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  274. public Result roleQuotaSave(@RequestBody List<RoleQuotaVo> roleQuotaList) {
  275. Result result;
  276. try {
  277. String listStr = JSON.toJSONString(roleQuotaList);
  278. iRoleInfoFacade.roleQuotaSave(listStr);
  279. result = Result.success("保存成功");
  280. } catch (Exception e) {
  281. logger.error("role quota save error:{}", e);
  282. result = Result.fail(e.getMessage());
  283. }
  284. return result;
  285. }
  286. /**
  287. * 用户角色列表
  288. *
  289. * @param searchDTO
  290. * @return
  291. */
  292. @ApiOperation(value = "用户角色列表")
  293. @ApiImplicitParam(name = "searchDTO", value = "查询条件,staffId不能为空 ", required = true)
  294. @PostMapping(value = "/userRole/_search")
  295. public Result<List<StaffAssignAuthInfoVo>> userRole(SearchDTO searchDTO) {
  296. Searchable searchable = Searchable.toSearchable(searchDTO);
  297. String staffId = (String) searchable.getSearchFilterByKey("staffId_eq").getValue();
  298. if (StringUtils.isBlank(staffId)) {
  299. return Result.fail("300", "staffId 不能为空");
  300. }
  301. Page<StaffAssignAuthInfo> page = iStaffAssignAuthInfoFacade.findForPage(searchable.toSearchDTO());
  302. List<StaffAssignAuthInfoVo> vos = new ArrayList<>();
  303. for (StaffAssignAuthInfo source : page.getContent()) {
  304. StaffAssignAuthInfoVo vo = new StaffAssignAuthInfoVo();
  305. BeanUtils.copyProperties(source, vo);
  306. }
  307. return Result.success(page.getTotalElements(), vos);
  308. }
  309. }