ModuleDataAuthorizeController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package jnpf.base.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.dev33.satoken.annotation.SaMode;
  4. import io.swagger.v3.oas.annotations.Operation;
  5. import io.swagger.v3.oas.annotations.Parameter;
  6. import io.swagger.v3.oas.annotations.Parameters;
  7. import io.swagger.v3.oas.annotations.tags.Tag;
  8. import jakarta.validation.Valid;
  9. import jnpf.base.ActionResult;
  10. import jnpf.base.entity.ModuleDataAuthorizeEntity;
  11. import jnpf.base.entity.ModuleDataAuthorizeSchemeEntity;
  12. import jnpf.base.entity.ModuleEntity;
  13. import jnpf.base.model.module.PropertyJsonModel;
  14. import jnpf.base.model.moduledataauthorize.DataAuthorizeCrForm;
  15. import jnpf.base.model.moduledataauthorize.DataAuthorizeInfoVO;
  16. import jnpf.base.model.moduledataauthorize.DataAuthorizeListVO;
  17. import jnpf.base.model.moduledataauthorize.DataAuthorizeUpForm;
  18. import jnpf.base.service.ModuleDataAuthorizeSchemeService;
  19. import jnpf.base.service.ModuleDataAuthorizeService;
  20. import jnpf.base.service.ModuleService;
  21. import jnpf.base.vo.ListVO;
  22. import jnpf.constant.MsgCode;
  23. import jnpf.emnus.SearchMethodEnum;
  24. import jnpf.exception.DataException;
  25. import jnpf.model.visualJson.FieLdsModel;
  26. import jnpf.model.visualJson.FormCloumnUtil;
  27. import jnpf.model.visualJson.FormDataModel;
  28. import jnpf.model.visualJson.TableModel;
  29. import jnpf.model.visualJson.analysis.*;
  30. import jnpf.permission.model.authorize.AuthorizeConditionEnum;
  31. import jnpf.permission.model.authorize.ConditionModel;
  32. import jnpf.util.JsonUtil;
  33. import jnpf.util.JsonUtilEx;
  34. import jnpf.util.ReflectionUtil;
  35. import jnpf.util.StringUtil;
  36. import jnpf.util.context.SpringContext;
  37. import org.apache.commons.collections4.map.HashedMap;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.web.bind.annotation.*;
  40. import java.util.ArrayList;
  41. import java.util.List;
  42. import java.util.Map;
  43. import java.util.StringJoiner;
  44. /**
  45. * 数据权限配置
  46. *
  47. * @author JNPF开发平台组
  48. * @version V3.1.0
  49. * @copyright 引迈信息技术有限公司
  50. * @date 2019年9月27日 上午9:18
  51. */
  52. @Tag(name = "数据权限字段管理", description = "ModuleDataAuthorize")
  53. @RestController
  54. @RequestMapping("/api/system/ModuleDataAuthorize")
  55. public class ModuleDataAuthorizeController extends SuperController<ModuleDataAuthorizeService, ModuleDataAuthorizeEntity> {
  56. @Autowired
  57. private ModuleDataAuthorizeService dataAuthorizeService;
  58. @Autowired
  59. private ModuleDataAuthorizeSchemeService dataAuthorizeSchemeService;
  60. @Autowired
  61. private ModuleService moduleService;
  62. /**
  63. * 获取数据权限配置信息列表
  64. *
  65. * @param moduleId 功能主键
  66. * @return ignore
  67. */
  68. @Operation(summary = "获取字段列表")
  69. @Parameters({
  70. @Parameter(name = "moduleId", description = "功能主键", required = true)
  71. })
  72. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  73. @GetMapping("/{moduleId}/List")
  74. public ActionResult<ListVO<DataAuthorizeListVO>> list(@PathVariable("moduleId") String moduleId) {
  75. List<ModuleDataAuthorizeEntity> data = dataAuthorizeService.getList(moduleId);
  76. List<DataAuthorizeListVO> list = JsonUtil.getJsonToList(data, DataAuthorizeListVO.class);
  77. list.stream().forEach(t -> {
  78. String conditionSymbol = StringUtil.isNotEmpty(t.getConditionSymbol()) ? t.getConditionSymbol() : "";
  79. StringJoiner symbolJoiner = new StringJoiner(",");
  80. String[] symbolSplit = conditionSymbol.split(",");
  81. for (String id : symbolSplit) {
  82. SearchMethodEnum itemMethod = SearchMethodEnum.getSearchMethod(id);
  83. if (itemMethod != null) {
  84. symbolJoiner.add(itemMethod.getMessage());
  85. }
  86. }
  87. t.setConditionText(StringUtil.isNotEmpty(t.getConditionText()) ? t.getConditionText() : "");
  88. StringJoiner textJoiner = new StringJoiner(",");
  89. String conditionText = StringUtil.isNotEmpty(t.getConditionText()) ? t.getConditionText() : "";
  90. String[] textSplit = conditionText.split(",");
  91. for (String id : textSplit) {
  92. AuthorizeConditionEnum itemMethod = AuthorizeConditionEnum.getByMessage(id);
  93. if (itemMethod != null) {
  94. textJoiner.add(itemMethod.getMessage());
  95. }
  96. }
  97. t.setConditionSymbolName(symbolJoiner.toString());
  98. t.setConditionName(textJoiner.toString());
  99. if (StringUtil.isNotEmpty(t.getBindTable())) {
  100. t.setEnCode(StringUtil.isNotEmpty(t.getEnCode()) ? t.getEnCode().replace(t.getBindTable() + ".", "") : "");
  101. }
  102. });
  103. ListVO<DataAuthorizeListVO> vo = new ListVO<>();
  104. vo.setList(list);
  105. return ActionResult.success(vo);
  106. }
  107. /**
  108. * 菜单数据权限
  109. *
  110. * @param moduleId 功能主键
  111. * @return ignore
  112. */
  113. @Operation(summary = "菜单数据权限")
  114. @Parameters({
  115. @Parameter(name = "moduleId", description = "功能主键", required = true)
  116. })
  117. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  118. @GetMapping("/{moduleId}/FieldList")
  119. public ActionResult<List<Map<String, String>>> fieldList(@PathVariable("moduleId") String moduleId) {
  120. List<Map<String, String>> list = new ArrayList<>();
  121. // 得到菜单id
  122. ModuleEntity entity = moduleService.getInfo(moduleId);
  123. PropertyJsonModel model = JsonUtil.getJsonToBean(entity.getPropertyJson(), PropertyJsonModel.class);
  124. if (model == null) {
  125. model = new PropertyJsonModel();
  126. }
  127. // 得到bean
  128. Object bean = SpringContext.getBean("visualdevServiceImpl");
  129. Object method = ReflectionUtil.invokeMethod(bean, "getInfo", new Class[]{String.class}, new Object[]{model.getModuleId()});
  130. Map<String, Object> map = JsonUtil.entityToMap(method);
  131. if (map != null && map.containsKey("formData")) {
  132. FormDataModel formDataModel = JsonUtil.getJsonToBean(String.valueOf(map.get("formData")), FormDataModel.class);
  133. List<FieLdsModel> fieLdsModelList = JsonUtil.getJsonToList(formDataModel.getFields(), FieLdsModel.class);
  134. RecursionForm recursionForm = new RecursionForm();
  135. recursionForm.setList(fieLdsModelList);
  136. recursionForm.setTableModelList(JsonUtil.getJsonToList(String.valueOf(map.get("tables")), TableModel.class));
  137. List<FormAllModel> formAllModel = new ArrayList<>();
  138. FormCloumnUtil.recursionForm(recursionForm, formAllModel);
  139. for (FormAllModel allModel : formAllModel) {
  140. if (FormEnum.table.getMessage().equals(allModel.getJnpfKey())) {
  141. FormColumnTableModel childList = allModel.getChildList();
  142. List<FormColumnModel> childList1 = childList.getChildList();
  143. for (FormColumnModel formColumnModel : childList1) {
  144. FieLdsModel fieLdsModel = formColumnModel.getFieLdsModel();
  145. if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) {
  146. Map<String, String> map1 = new HashedMap<>();
  147. map1.put("field", fieLdsModel.getVModel());
  148. map1.put("fieldName", fieLdsModel.getConfig().getLabel());
  149. list.add(map1);
  150. }
  151. }
  152. } else if (FormEnum.mast.getMessage().equals(allModel.getJnpfKey())) {
  153. FormColumnModel formColumnModel = allModel.getFormColumnModel();
  154. FieLdsModel fieLdsModel = formColumnModel.getFieLdsModel();
  155. if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) {
  156. Map<String, String> map1 = new HashedMap<>();
  157. map1.put("field", fieLdsModel.getVModel());
  158. map1.put("fieldName", fieLdsModel.getConfig().getLabel());
  159. list.add(map1);
  160. }
  161. } else if (FormEnum.mastTable.getMessage().equals(allModel.getJnpfKey())) {
  162. FormMastTableModel formColumnModel = allModel.getFormMastTableModel();
  163. FieLdsModel fieLdsModel = formColumnModel.getMastTable().getFieLdsModel();
  164. if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) {
  165. Map<String, String> map1 = new HashedMap<>();
  166. map1.put("field", fieLdsModel.getVModel());
  167. map1.put("fieldName", fieLdsModel.getConfig().getLabel());
  168. list.add(map1);
  169. }
  170. }
  171. }
  172. }
  173. return ActionResult.success(list);
  174. }
  175. /**
  176. * 获取数据权限配置信息
  177. *
  178. * @param id 主键值
  179. * @return ignore
  180. * @throws DataException ignore
  181. */
  182. @Operation(summary = "获取数据权限配置信息")
  183. @Parameters({
  184. @Parameter(name = "id", description = "主键值", required = true)
  185. })
  186. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  187. @GetMapping("/{id}")
  188. public ActionResult<DataAuthorizeInfoVO> info(@PathVariable("id") String id) throws DataException {
  189. ModuleDataAuthorizeEntity entity = dataAuthorizeService.getInfo(id);
  190. ModuleEntity moduleEntity = moduleService.getInfo(entity.getModuleId());
  191. if (moduleEntity != null && StringUtil.isNotEmpty(entity.getBindTable())) {
  192. entity.setEnCode(StringUtil.isNotEmpty(entity.getEnCode()) ? entity.getEnCode().replace(entity.getBindTable() + ".", "") : "");
  193. }
  194. DataAuthorizeInfoVO vo = JsonUtilEx.getJsonToBeanEx(entity, DataAuthorizeInfoVO.class);
  195. return ActionResult.success(vo);
  196. }
  197. /**
  198. * 新建数据权限配置
  199. *
  200. * @param dataAuthorizeCrForm 实体对象
  201. * @return ignore
  202. */
  203. @Operation(summary = "新建数据权限配置")
  204. @Parameters({
  205. @Parameter(name = "dataAuthorizeCrForm", description = "实体对象", required = true)
  206. })
  207. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  208. @PostMapping
  209. public ActionResult create(@RequestBody @Valid DataAuthorizeCrForm dataAuthorizeCrForm) {
  210. ModuleEntity moduleEntity = moduleService.getInfo(dataAuthorizeCrForm.getModuleId());
  211. ModuleDataAuthorizeEntity entity = JsonUtil.getJsonToBean(dataAuthorizeCrForm, ModuleDataAuthorizeEntity.class);
  212. entity.setPropertyJson(dataAuthorizeCrForm.getChildTableKey());
  213. if (moduleEntity != null && moduleEntity.getType() == 3 && entity.getFieldRule() != 0 && StringUtil.isNotEmpty(entity.getBindTable())) {
  214. String enCode = entity.getBindTable() + "." + entity.getEnCode();
  215. entity.setEnCode(enCode);
  216. }
  217. dataAuthorizeService.create(entity);
  218. return ActionResult.success(MsgCode.SU001.get());
  219. }
  220. /**
  221. * 更新数据权限配置
  222. *
  223. * @param id 主键值
  224. * @param dataAuthorizeUpForm 实体对象
  225. * @return ignore
  226. */
  227. @Operation(summary = "更新数据权限配置")
  228. @Parameters({
  229. @Parameter(name = "id", description = "主键值", required = true),
  230. @Parameter(name = "dataAuthorizeUpForm", description = "实体对象", required = true)
  231. })
  232. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  233. @PutMapping("/{id}")
  234. public ActionResult update(@PathVariable("id") String id, @RequestBody @Valid DataAuthorizeUpForm dataAuthorizeUpForm) {
  235. ModuleEntity moduleEntity = moduleService.getInfo(dataAuthorizeUpForm.getModuleId());
  236. ModuleDataAuthorizeEntity entity = JsonUtil.getJsonToBean(dataAuthorizeUpForm, ModuleDataAuthorizeEntity.class);
  237. if (moduleEntity != null && moduleEntity.getType() == 3 && entity.getFieldRule() == 1 && StringUtil.isNotEmpty(entity.getBindTable())) {
  238. String enCode = entity.getBindTable() + "." + entity.getEnCode();
  239. entity.setEnCode(enCode);
  240. }
  241. entity.setPropertyJson(dataAuthorizeUpForm.getChildTableKey());
  242. boolean flag = dataAuthorizeService.update(id, entity);
  243. if (!flag) {
  244. return ActionResult.success(MsgCode.FA002.get());
  245. }
  246. return ActionResult.success(MsgCode.SU004.get());
  247. }
  248. /**
  249. * 删除数据权限配置
  250. *
  251. * @param id 主键值
  252. * @return ignore
  253. */
  254. @Operation(summary = "删除数据权限配置")
  255. @Parameters({
  256. @Parameter(name = "id", description = "主键值", required = true)
  257. })
  258. @SaCheckPermission(value = {"permission.resource", "appConfig.appResource"}, mode = SaMode.OR)
  259. @DeleteMapping("/{id}")
  260. public ActionResult delete(@PathVariable("id") String id) {
  261. ModuleDataAuthorizeEntity entity = dataAuthorizeService.getInfo(id);
  262. //菜单id
  263. String moduleId = entity.getModuleId();
  264. //该菜单下的数据权限方案
  265. List<ModuleDataAuthorizeSchemeEntity> list = dataAuthorizeSchemeService.getList(moduleId);
  266. String schemeName = null;
  267. for (ModuleDataAuthorizeSchemeEntity schemeEntity : list) {
  268. List<ConditionModel> conditionModels = JsonUtil.getJsonToList(schemeEntity.getConditionJson(), ConditionModel.class);
  269. if (conditionModels != null) {
  270. for (ConditionModel conditionModel : conditionModels) {
  271. List<ConditionModel.ConditionItemModel> groups = conditionModel.getGroups();
  272. for (ConditionModel.ConditionItemModel conditionItemModel : groups) {
  273. if (conditionItemModel.getField().equalsIgnoreCase(entity.getEnCode())) {
  274. schemeName = schemeEntity.getFullName();
  275. break;
  276. }
  277. }
  278. }
  279. }
  280. }
  281. if (StringUtil.isNotEmpty(schemeName)) {
  282. return ActionResult.fail(MsgCode.SYS020.get(schemeName));
  283. }
  284. if (entity != null) {
  285. dataAuthorizeService.delete(entity);
  286. return ActionResult.success(MsgCode.SU003.get());
  287. }
  288. return ActionResult.fail(MsgCode.FA003.get());
  289. }
  290. }