DataAuthController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.dragoninfo.dcuc.authweb.restcontroller.auth;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.TypeReference;
  4. import com.dragoninfo.dcuc.app.facade.IDataResourceFacade;
  5. import com.dragoninfo.dcuc.app.vo.DataResourceClassifyVo;
  6. import com.dragoninfo.dcuc.auth.auth.dto.data.*;
  7. import com.dragoninfo.dcuc.auth.auth.enumresources.SubDataAuthTypeEnum;
  8. import com.dragoninfo.dcuc.auth.auth.facade.IDataAuthFacade;
  9. import com.dragoninfo.dcuc.auth.auth.vo.BusResultVO;
  10. import com.dragoninfo.dcuc.auth.auth.vo.DataAuthAcceptVo;
  11. import com.dragoninfo.dcuc.auth.auth.vo.DataAuthTreeReactVo;
  12. import com.dragoninfo.dcuc.auth.sub.dto.LabelSearchDTO;
  13. import com.dragoninfo.dcuc.auth.sub.facade.IUserCenterApiFacade;
  14. import com.dragoninfo.dcuc.authweb.restcontroller.auth.vo.data.*;
  15. import com.dragoninfo.dcuc.auth.sub.vo.LabelTreeVO;
  16. import com.dragoninfo.dcuc.authweb.util.VersionUtils;
  17. import com.dragoninfo.duceap.core.response.Result;
  18. import com.dragonsoft.duceap.base.entity.search.SearchDTO;
  19. import io.swagger.annotations.Api;
  20. import io.swagger.annotations.ApiImplicitParam;
  21. import io.swagger.annotations.ApiImplicitParams;
  22. import io.swagger.annotations.ApiOperation;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.beans.BeanUtils;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.web.bind.annotation.*;
  27. import java.util.ArrayList;
  28. import java.util.List;
  29. import java.util.stream.Collectors;
  30. /**
  31. * @author mazq
  32. * @date 2021/4/6
  33. */
  34. @Slf4j
  35. @Api(tags ="数据授权API")
  36. @RestController
  37. @RequestMapping("authsvr/"+ VersionUtils.VERSION_UID +"/dataauth")
  38. public class DataAuthController {
  39. public static final String idJoin = "|";
  40. @Autowired
  41. IDataAuthFacade dataAuthFacade;
  42. @Autowired
  43. IUserCenterApiFacade userCenterApiFacade;
  44. @Autowired
  45. IDataResourceFacade dataResourceFacade;
  46. @ApiOperation(value = "获取属性列表,树形结构:警种1-业务域N")
  47. @ApiImplicitParam(name = "name", value = "查询条件")
  48. @GetMapping(value = "businessTreeList", produces = "application/json;charset=UTF-8")
  49. public Result<List<LabelTreeVO>> businessTreeList(){
  50. LabelSearchDTO labelSearchDTO = new LabelSearchDTO();
  51. labelSearchDTO.setShowAll(false);
  52. List<LabelTreeVO> labelTreeList = userCenterApiFacade.labelTreeList(labelSearchDTO);
  53. return Result.success(labelTreeList);
  54. }
  55. @ApiOperation(value = "获取所有数据资源,返回树结构")
  56. @ApiImplicitParam(name = "attrType",value = "数据属性类型 TABLE:表 COLUMN:列")
  57. @GetMapping(value = "allDataTree", produces = "application/json;charset=UTF-8")
  58. public Result<List<DataResourceClassifyVo>> getAllDataResource(@RequestParam(value = "attrType", required = false) String attrType){
  59. log.info("allDataTree >> attrType:{}", attrType);
  60. List<DataResourceClassifyVo> dataResourceTree = dataResourceFacade.getAllDataResourceTree(attrType);
  61. return Result.success(dataResourceTree);
  62. }
  63. @ApiOperation(value = "获取数据资源,返回树结构")
  64. @ApiImplicitParam(name = "typeCode",value = "typeCode类型(数据分级:DATA_CLASSIFY;数据资源分类:DATA_RESOURCE_CLASSIFY;数据安全级别:DATA_SECURITY_LEVEL;字段分类:COLUMN_CLASSIFY)")
  65. @GetMapping(value = "getDataResourceTree")
  66. public Result<DataResourceClassifyVo> getDataResource(@RequestParam("typeCode") String typeCode){
  67. log.info("dataTree >> typeCode:{}", typeCode);
  68. DataResourceClassifyVo dataResourceTree = dataResourceFacade.getDataResourceTree(typeCode);
  69. return Result.success(dataResourceTree);
  70. }
  71. @ApiOperation(value = "人员数据授权接口")
  72. @PostMapping(value = "userDataAuth", produces = "application/json;charset=UTF-8")
  73. public Result<Boolean> userDataAuth(@RequestBody UserDataAuthAcceptVo vo){
  74. List<DataAuthAcceptVo> authVoList = vo.getAuthVoList();
  75. log.info("userDataAuth >> userDataAuthAcceptVo:{}",JSON.toJSONString(vo));
  76. SubDataAuthDTO subDataAuthDTO = convertToSubAuthDTO(vo.getIdcard(), SubDataAuthTypeEnum.SUB_DATA_AUTH_USER.getValue(), vo.getAuthType(), authVoList);
  77. dataAuthFacade.subDataAuthAdd(subDataAuthDTO);
  78. return Result.success(true);
  79. }
  80. @ApiOperation(value = "数据资源树联动勾选接口")
  81. @PostMapping("tree-react")
  82. public Result<List<DataClassifyVo>> treeReact(@RequestBody DataAuthTreeReactVo treeReactVo) {
  83. List<DataClassifyDTO> classifyDTOS = dataAuthFacade.treeReact(treeReactVo);
  84. List<DataClassifyVo> vos = convertToVos(classifyDTOS);
  85. return Result.success(vos);
  86. }
  87. @ApiOperation(value = "机构数据授权接口")
  88. @PostMapping(value = "orgDataAuth", produces = "application/json;charset=UTF-8")
  89. public Result<Boolean> orgDataAuth(@RequestBody OrgDataAuthAcceptVo vo){
  90. List<DataAuthAcceptVo> authVoList = vo.getAuthVoList();
  91. log.info("orgDataAuth>>orgDataAuthAcceptVo:{}",JSON.toJSONString(vo));
  92. SubDataAuthDTO subDataAuthDTO = convertToSubAuthDTO(vo.getOrgCode(), SubDataAuthTypeEnum.SUB_DATA_AUTH_ORG.getValue(), vo.getAuthType(), authVoList);
  93. dataAuthFacade.subDataAuthAdd(subDataAuthDTO);
  94. return Result.success(true);
  95. }
  96. @ApiOperation(value = "业务域标签数据授权接口")
  97. @PostMapping(value = "labelDataAuth", produces = "application/json;charset=UTF-8")
  98. public Result<Boolean> labelDataAuth(@RequestBody LabelDataAuthAcceptVo vo){
  99. List<DataAuthAcceptVo> authVoList = vo.getAuthVoList();
  100. log.info("labelDataAuth >> labelDataAuthAcceptVo:{}",JSON.toJSONString(vo));
  101. SubDataAuthDTO subDataAuthDTO = convertToSubAuthDTO(vo.getBusinessCode(), SubDataAuthTypeEnum.SUB_DATA_AUTH_BUSINESS.getValue(), vo.getAuthType(), authVoList);
  102. dataAuthFacade.subDataAuthAdd(subDataAuthDTO);
  103. return Result.success(true);
  104. }
  105. @ApiOperation(value = "查询多个主体相关数据权限")
  106. @PostMapping(value = "subListDataAuth", produces = "application/json;charset=UTF-8")
  107. public Result<List<DataClassifyVo>> subDataAuthList(@RequestBody List<SubDataAuthQueryVo> queryVoList) {
  108. List<SubDataAuthQueryDTO> dtos = new ArrayList<>();
  109. for (SubDataAuthQueryVo vo : queryVoList) {
  110. SubDataAuthQueryDTO dto = new SubDataAuthQueryDTO();
  111. BeanUtils.copyProperties(vo,dto);
  112. }
  113. List<DataClassifyDTO> classifyDTOS = dataAuthFacade.subDataAuthList(dtos);
  114. List<DataClassifyVo> vos = convertToVos(classifyDTOS);
  115. return Result.success(vos);
  116. }
  117. @ApiOperation(value = "查询单个主体数据权限")
  118. @PostMapping(value = "getSubDataAuth" , produces = "application/json;charset=UTF-8")
  119. public Result<List<DataClassifyVo>> getSubDataAuth(@RequestBody SubDataAuthQueryVo queryVo){
  120. log.info("getSubDataAuth >> vo:{}",JSON.toJSONString(queryVo));
  121. SubDataAuthQueryDTO queryDTO = new SubDataAuthQueryDTO();
  122. BeanUtils.copyProperties(queryVo,queryDTO);
  123. List<DataClassifyDTO> dtos = dataAuthFacade.getSubDataAuth(queryDTO);
  124. List<DataClassifyVo> vos = convertToVos(dtos);
  125. return Result.success(vos);
  126. }
  127. @ApiOperation(value = "人员视角数据权限查询-根据人员id查询")
  128. @ApiImplicitParams(value = {
  129. @ApiImplicitParam(name = "userId",value = "人员id"),
  130. @ApiImplicitParam(name = "authType",value = "数据属性授权类型 TABLE:表授权 COLUMN:列授权")
  131. })
  132. @GetMapping(value = "dataAuthInfoByUserId" , produces = "application/json;charset=UTF-8")
  133. public Result<List<DataClassifyVo>> userDataAuthInfoById(@RequestParam("userId") String userId,
  134. @RequestParam(value = "authType", required = false) String authType){
  135. log.info("dataAuthInfoByUserId >> userId:{},authType:{}", userId, authType);
  136. List<DataClassifyDTO> dtos = dataAuthFacade.userDataAuthInfoByUserId(userId, authType);
  137. List<DataClassifyVo> vos = convertToVos(dtos);
  138. return Result.success(vos);
  139. }
  140. @ApiOperation(value = "人员视角数据权限查询-根据人员身份证号查询")
  141. @ApiImplicitParams(value = {
  142. @ApiImplicitParam(name = "idcard",value = "身份证号"),
  143. @ApiImplicitParam(name = "authType",value = "数据属性授权类型 TABLE:表授权 COLUMN:列授权")
  144. })
  145. @GetMapping(value = "dataAuthInfoByIdcard" , produces = "application/json;charset=UTF-8")
  146. public Result<List<DataClassifyVo>> userDataAuthInfoByIdcard(@RequestParam("idcard") String idcard,
  147. @RequestParam(value = "authType",required = false) String authType){
  148. List<DataClassifyDTO> dtos = dataAuthFacade.userDataAuthInfoByIdcard(idcard, authType);
  149. List<DataClassifyVo> vos = convertToVos(dtos);
  150. return Result.success(vos);
  151. }
  152. @ApiOperation(value = "人员视角-有权限的数据资源查询(树结构)-根据身份证号查询")
  153. @ApiImplicitParams(value = {
  154. @ApiImplicitParam(name = "idcard",value = "身份证号"),
  155. @ApiImplicitParam(name = "authType",value = "数据属性授权类型 TABLE:表授权 COLUMN:列授权")
  156. })
  157. @GetMapping(value = "userDataTreeByIdcard" , produces = "application/json;charset=UTF-8")
  158. public Result<List<DataResourceClassifyVo>> userDataAuthTreeByIdcard(@RequestParam("idcard") String idcard, @RequestParam(value = "authType",required = false) String authType){
  159. List<DataResourceDTO> dtos = dataAuthFacade.userDataTreeByIdcard(idcard, authType);
  160. //树节点dto转vo多层次拷贝,使用JSONString序列化
  161. //字段key值要能对应上
  162. String dtoStr = JSON.toJSONString(dtos);
  163. List<DataResourceClassifyVo> vos = JSON.parseObject(dtoStr, new TypeReference<List<DataResourceClassifyVo>>() {{
  164. }});
  165. return Result.success(vos);
  166. }
  167. @ApiOperation(value = "分级分类清单数据")
  168. @PostMapping(value = "dataDetailList")
  169. public Result dataDetailList(SearchDTO searchDTO){
  170. BusResultVO busResultVO = dataAuthFacade.dataDetailList(searchDTO);
  171. return Result.success((long) busResultVO.getResultData().getTotalCount(),busResultVO.getResultData().getDataList());
  172. }
  173. private List<DataClassifyVo> convertToVos(List<DataClassifyDTO> classifyDTOS) {
  174. return classifyDTOS.stream().map(item -> {
  175. DataClassifyVo vo = new DataClassifyVo();
  176. BeanUtils.copyProperties(item, vo,"tickedDatas");
  177. List<SubDataDTO> tickedDatas = item.getTickedDatas();
  178. List<SubDataVo> dataVoList = tickedDatas.stream()
  179. .map(dto->{
  180. //拼接dataId给前端使用,保证dataId是唯一值
  181. dto.setDataId(dto.getClassifyCode()+ idJoin + dto.getDataId());
  182. SubDataVo subDataVo = new SubDataVo();
  183. BeanUtils.copyProperties(dto,subDataVo);
  184. return subDataVo;
  185. }).collect(Collectors.toList());
  186. vo.setTickedDatas(dataVoList);
  187. return vo;
  188. }).collect(Collectors.toList());
  189. }
  190. private SubDataAuthDTO convertToSubAuthDTO(String subId, String subType, String authType,List<DataAuthAcceptVo> authVoList) {
  191. SubDataAuthDTO subDataAuthDTO = new SubDataAuthDTO(subId,subType,authType);
  192. List<SubDataDTO> dataDTOList = new ArrayList<>();
  193. for (DataAuthAcceptVo vo : authVoList) {
  194. SubDataDTO subDataDTO = new SubDataDTO();
  195. String dataId = vo.getDataId();
  196. //除去分级分类标签的code
  197. int index = dataId.indexOf(idJoin);
  198. //从dataId截取拼接各种参数
  199. subDataDTO.setDataId(dataId);
  200. subDataDTO.setClassifyCode(vo.getClassifyCode());
  201. dataDTOList.add(subDataDTO);
  202. }
  203. subDataAuthDTO.setDataAuthList(dataDTOList);
  204. return subDataAuthDTO;
  205. }
  206. }