VisualUtil.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. package jnpf.base.util;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import jnpf.base.entity.ModuleDataAuthorizeSchemeEntity;
  4. import jnpf.base.entity.VisualdevEntity;
  5. import jnpf.base.model.ColumnDataModel;
  6. import jnpf.base.model.Template6.BtnData;
  7. import jnpf.base.model.Template6.ColumnListField;
  8. import jnpf.base.model.VisualDevPubModel;
  9. import jnpf.base.model.VisualWebTypeEnum;
  10. import jnpf.base.model.form.DraftJsonModel;
  11. import jnpf.base.model.online.AuthFlieds;
  12. import jnpf.base.model.online.PerColModels;
  13. import jnpf.base.model.online.VisualMenuModel;
  14. import jnpf.base.util.common.DataControlUtils;
  15. import jnpf.constant.JnpfConst;
  16. import jnpf.constant.MsgCode;
  17. import jnpf.constant.PermissionConst;
  18. import jnpf.emnus.SearchMethodEnum;
  19. import jnpf.model.OnlineDevData;
  20. import jnpf.model.visualJson.*;
  21. import jnpf.model.visualJson.analysis.FormAllModel;
  22. import jnpf.model.visualJson.analysis.FormColumnModel;
  23. import jnpf.model.visualJson.analysis.FormEnum;
  24. import jnpf.model.visualJson.analysis.RecursionForm;
  25. import jnpf.model.visualJson.config.ConfigModel;
  26. import jnpf.permission.model.authCondition.AuthConditionModel;
  27. import jnpf.permission.model.authCondition.AuthGroup;
  28. import jnpf.permission.model.authCondition.AuthItem;
  29. import jnpf.permission.model.authCondition.AuthItemConfig;
  30. import jnpf.permission.model.authorize.AuthorizeConditionEnum;
  31. import jnpf.util.JsonUtil;
  32. import jnpf.util.RandomUtil;
  33. import jnpf.util.StringUtil;
  34. import jnpf.util.visiual.JnpfKeyConsts;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * @author JNPF开发平台组
  39. * @version V3.1.0
  40. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  41. * @date 2021/3/16
  42. */
  43. public class VisualUtil {
  44. public static List<String> symbol = new ArrayList() {{
  45. add(AuthorizeConditionEnum.USER.getCondition());
  46. add(AuthorizeConditionEnum.ORGANIZE.getCondition());
  47. }};
  48. /**
  49. * @param entity
  50. * @return
  51. * @Description 删除F_, 且全转小写
  52. */
  53. public static VisualdevEntity delfKey(VisualdevEntity entity) {
  54. List<TableModel> list = JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class);
  55. for (TableModel tableModel : list) {
  56. List<TableFields> fields = tableModel.getFields();
  57. if (StringUtil.isNotEmpty(tableModel.getTableField()) && "f_".equalsIgnoreCase(tableModel.getTableField().substring(0, 2))) {
  58. tableModel.setTableField(tableModel.getTableField().substring(2).toLowerCase());
  59. }
  60. if (StringUtil.isNotEmpty(tableModel.getRelationField()) && "f_".equalsIgnoreCase(tableModel.getRelationField().substring(0, 2))) {
  61. tableModel.setRelationField(tableModel.getRelationField().substring(2).toLowerCase());
  62. }
  63. for (TableFields tableFields : fields) {
  64. String feild = tableFields.getField().toLowerCase();
  65. if ("f_".equals(feild.substring(0, 2))) {
  66. tableFields.setField(feild.substring(2).toLowerCase());
  67. } else {
  68. tableFields.setField(feild.toLowerCase());
  69. }
  70. tableModel.setFields(fields);
  71. }
  72. }
  73. entity.setVisualTables(JsonUtil.getObjectToString(list));
  74. //取出列表数据中的查询列表和数据列表
  75. Map<String, Object> columnDataMap = JsonUtil.stringToMap(entity.getColumnData());
  76. if (columnDataMap != null) {
  77. for (Map.Entry<String, Object> entry : columnDataMap.entrySet()) {
  78. if ("searchList".equals(entry.getKey())) {
  79. List<FieLdsModel> fieLdsModelList = JsonUtil.getJsonToList(entry.getValue(), FieLdsModel.class);
  80. for (FieLdsModel fieLdsModel : fieLdsModelList) {
  81. String vModel = fieLdsModel.getVModel().toLowerCase();
  82. String modelStr = fieLdsModel.getVModel();
  83. //去除F_
  84. if (!StringUtil.isEmpty(vModel) && "f_".equals(vModel.substring(0, 2))) {
  85. fieLdsModel.setVModel(modelStr.substring(2).toLowerCase());
  86. } else if (!StringUtil.isEmpty(vModel)) {
  87. fieLdsModel.setVModel(modelStr.toLowerCase());
  88. }
  89. }
  90. entry.setValue(fieLdsModelList);
  91. }
  92. if ("columnList".equals(entry.getKey())) {
  93. List<ColumnListField> columnListFields = JsonUtil.getJsonToList(entry.getValue(), ColumnListField.class);
  94. for (ColumnListField columnListField : columnListFields) {
  95. String prop = columnListField.getProp().toLowerCase();
  96. String modelStr = columnListField.getProp();
  97. //去除F_
  98. if (!StringUtil.isEmpty(prop) && "f_".equals(prop.substring(0, 2))) {
  99. columnListField.setProp(modelStr.substring(2).toLowerCase());
  100. } else if (!StringUtil.isEmpty(prop)) {
  101. columnListField.setProp(modelStr.toLowerCase());
  102. }
  103. }
  104. entry.setValue(columnListFields);
  105. }
  106. }
  107. }
  108. entity.setColumnData(JsonUtil.getObjectToString(columnDataMap));
  109. Map<String, Object> formData = JsonUtil.stringToMap(entity.getFormData());
  110. List<FieLdsModel> modelList = JsonUtil.getJsonToList(formData.get("fields").toString(), FieLdsModel.class);
  111. for (FieLdsModel fieLdsModel : modelList) {
  112. //去除F_
  113. if (!StringUtil.isEmpty(fieLdsModel.getVModel())) {
  114. if ("f_".equals(fieLdsModel.getVModel().substring(0, 2).toLowerCase())) {
  115. String modelStr = fieLdsModel.getVModel();
  116. fieLdsModel.setVModel(modelStr.substring(2).toLowerCase());
  117. } else {
  118. String modelStr = fieLdsModel.getVModel();
  119. fieLdsModel.setVModel(modelStr.toLowerCase());
  120. }
  121. }
  122. ConfigModel configModel = fieLdsModel.getConfig();
  123. //子表
  124. if ("table".equals(configModel.getJnpfKey())) {
  125. List<FieLdsModel> childlist = JsonUtil.getJsonToList(configModel.getChildren(), FieLdsModel.class);
  126. for (FieLdsModel childmodel : childlist) {
  127. //前台界面的属性去掉前2个
  128. if (StringUtil.isNotEmpty(childmodel.getVModel())) {
  129. if ("f_".equals(childmodel.getVModel().substring(0, 2).toLowerCase())) {
  130. String vmodel = childmodel.getVModel().substring(2).toLowerCase();
  131. childmodel.setVModel(vmodel);
  132. } else {
  133. String vmodel = childmodel.getVModel().toLowerCase();
  134. childmodel.setVModel(vmodel);
  135. }
  136. }
  137. }
  138. fieLdsModel.getConfig().setChildren(childlist);
  139. }
  140. }
  141. formData.put("fields", JsonUtil.getObjectToString(modelList));
  142. entity.setFormData(JsonUtil.getObjectToString(formData));
  143. return entity;
  144. }
  145. public static VisualMenuModel getVisual(VisualdevEntity visualdevEntity, VisualDevPubModel visualDevPubModel) {
  146. VisualMenuModel visualMenuModel = new VisualMenuModel();
  147. visualMenuModel.setFullName(visualdevEntity.getFullName());
  148. visualMenuModel.setEnCode(visualdevEntity.getEnCode());
  149. if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(visualdevEntity.getWebType())) {//数据视图不解析formdata
  150. FormDataModel formDataModel = JsonUtil.getJsonToBean(visualdevEntity.getFormData(), FormDataModel.class);
  151. //递归封装表单数据
  152. List<FormAllModel> formAllModel = new ArrayList<>();
  153. RecursionForm recursionForm = new RecursionForm();
  154. List<TableModel> tableModels = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
  155. TableModel tableModel = tableModels.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null);
  156. recursionForm.setTableModelList(tableModels);
  157. recursionForm.setList(JsonUtil.getJsonToList(formDataModel.getFields(), FieLdsModel.class));
  158. FormCloumnUtil.recursionForm(recursionForm, formAllModel);
  159. //主表数据
  160. List<FormAllModel> mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
  161. //列表子表数据
  162. List<FormAllModel> mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
  163. //子表
  164. List<FormAllModel> childTable = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList());
  165. String mainTableName = tableModel.getTable();
  166. List<AuthFlieds> allColumnDataList = new ArrayList<>();
  167. mast.stream().forEach(formModel -> {
  168. String vModel = formModel.getFormColumnModel().getFieLdsModel().getVModel();
  169. String tableName = formModel.getFormColumnModel().getFieLdsModel().getConfig().getTableName();
  170. if (StringUtil.isNotEmpty(vModel)) {
  171. String label = formModel.getFormColumnModel().getFieLdsModel().getConfig().getLabel();
  172. AuthFlieds authFlieds = AuthFlieds.builder().enCode(vModel).fullName(label).status(false).rule(0).bindTableName(tableName)
  173. .jnpfKey(formModel.getFormColumnModel().getFieLdsModel().getConfig().getJnpfKey()).build();
  174. allColumnDataList.add(authFlieds);
  175. }
  176. });
  177. mastTable.stream().forEach(formModel -> {
  178. String vModel = formModel.getFormMastTableModel().getMastTable().getFieLdsModel().getVModel();
  179. String tableName = formModel.getFormMastTableModel().getMastTable().getFieLdsModel().getConfig().getTableName();
  180. if (StringUtil.isNotEmpty(vModel)) {
  181. String label = formModel.getFormMastTableModel().getMastTable().getFieLdsModel().getConfig().getLabel();
  182. AuthFlieds authFlieds = AuthFlieds.builder().enCode(vModel).fullName(label).status(false).rule(1).bindTableName(tableName)
  183. .jnpfKey(formModel.getFormMastTableModel().getMastTable().getFieLdsModel().getConfig().getJnpfKey()).build();
  184. allColumnDataList.add(authFlieds);
  185. }
  186. });
  187. childTable.stream().forEach(formModel -> {
  188. String vModel = formModel.getChildList().getTableModel();
  189. String tableName = formModel.getChildList().getTableName();
  190. String label = formModel.getChildList().getLabel();
  191. if (StringUtil.isNotEmpty(vModel)) {
  192. AuthFlieds authFlieds = AuthFlieds.builder().enCode(vModel).fullName(label).status(false).rule(0).jnpfKey(formModel.getJnpfKey()).bindTableName(tableName).build();
  193. allColumnDataList.add(authFlieds);
  194. }
  195. List<FormColumnModel> childList = formModel.getChildList().getChildList();
  196. for (FormColumnModel columnModel : childList) {
  197. String childlabel = columnModel.getFieLdsModel().getConfig().getLabel();
  198. String childvModel = columnModel.getFieLdsModel().getVModel();
  199. if (StringUtil.isNotEmpty(childvModel)) {
  200. AuthFlieds authFlieds = AuthFlieds.builder().enCode(vModel + "-" + childvModel).fullName(label + "-" + childlabel).status(false).bindTableName(tableName).rule(2).childTableKey(vModel)
  201. .jnpfKey(columnModel.getFieLdsModel().getConfig().getJnpfKey()).build();
  202. allColumnDataList.add(authFlieds);
  203. }
  204. }
  205. });
  206. //分配对应权限
  207. if (1 == visualDevPubModel.getPc()) {
  208. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(visualdevEntity.getColumnData(), ColumnDataModel.class);
  209. List<Integer> pcAuth = new ArrayList<>();
  210. pcAuth.add(columnDataModel != null && columnDataModel.getUseBtnPermission() ? 1 : 0);
  211. pcAuth.add(columnDataModel != null && columnDataModel.getUseColumnPermission() ? 1 : 0);
  212. pcAuth.add(columnDataModel != null && columnDataModel.getUseFormPermission() ? 1 : 0);
  213. pcAuth.add(columnDataModel != null && columnDataModel.getUseDataPermission() ? 1 : 0);
  214. visualMenuModel.setPcAuth(pcAuth);
  215. visualMenuModel.setPcPerCols(new PerColModels());
  216. if (Objects.nonNull(columnDataModel)) {
  217. visualMenuModel.setPcPerCols(fillPermission(columnDataModel, allColumnDataList, true, mainTableName));
  218. }
  219. }
  220. if (1 == visualDevPubModel.getApp()) {
  221. ColumnDataModel appColumnDataModel = JsonUtil.getJsonToBean(visualdevEntity.getAppColumnData(), ColumnDataModel.class);
  222. List<Integer> appAuth = new ArrayList<>();
  223. appAuth.add(appColumnDataModel != null && appColumnDataModel.getUseBtnPermission() ? 1 : 0);
  224. appAuth.add(appColumnDataModel != null && appColumnDataModel.getUseColumnPermission() ? 1 : 0);
  225. appAuth.add(appColumnDataModel != null && appColumnDataModel.getUseFormPermission() ? 1 : 0);
  226. appAuth.add(appColumnDataModel != null && appColumnDataModel.getUseDataPermission() ? 1 : 0);
  227. visualMenuModel.setAppAuth(appAuth);
  228. visualMenuModel.setAppPerCols(new PerColModels());
  229. if (Objects.nonNull(appColumnDataModel)) {
  230. visualMenuModel.setAppPerCols(fillPermission(appColumnDataModel, allColumnDataList, false, mainTableName));
  231. }
  232. }
  233. }
  234. visualMenuModel.setFullName(visualdevEntity.getFullName());
  235. visualMenuModel.setEnCode(visualdevEntity.getEnCode());
  236. visualMenuModel.setId(visualdevEntity.getId());
  237. return visualMenuModel;
  238. }
  239. /**
  240. * 填充权限字段
  241. *
  242. * @param columnDataModel
  243. * @param allColumnDataList
  244. * @param isPC
  245. * @return
  246. */
  247. private static PerColModels fillPermission(ColumnDataModel columnDataModel, List<AuthFlieds> allColumnDataList, Boolean isPC, String mainTable) {
  248. PerColModels perColModel = new PerColModels();
  249. List<ColumnListField> columnListFields = JsonUtil.getJsonToList(columnDataModel.getDefaultColumnList(), ColumnListField.class);
  250. //副表正则
  251. String reg = "^[jnpf_]\\S*_jnpf\\S*";
  252. //按钮
  253. if (columnDataModel != null && columnDataModel.getUseBtnPermission()) {
  254. perColModel.setButtonPermission(getAuthFiledList(isPC, columnDataModel));
  255. }
  256. //列表
  257. if (columnDataModel.getUseColumnPermission() && columnListFields != null) {
  258. List<AuthFlieds> colAuthFileds = columnListFields.stream().map(col -> {
  259. boolean matches = col.getProp().toLowerCase().matches(reg);
  260. String childTableKey = "";
  261. int rule = 0;
  262. String tableName;
  263. if (col.getConfig() == null) {
  264. tableName = mainTable;
  265. } else {
  266. tableName = col.getConfig().getRelationTable() != null ? col.getConfig().getRelationTable() : StringUtil.isNotEmpty(col.getConfig().getTableName()) ? col.getConfig().getTableName() : mainTable;
  267. }
  268. if (matches) {
  269. rule = 1;
  270. } else {
  271. rule = col.getProp().toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX) ? 2 : 0;
  272. childTableKey = col.getProp().toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX) ? col.getProp().substring(0, col.getProp().indexOf("-")) : null;
  273. }
  274. return AuthFlieds.builder().enCode(col.getProp()).fullName(col.getLabel()).status(col.getChecked()).rule(rule).bindTableName(tableName).childTableKey(childTableKey).build();
  275. }).collect(Collectors.toList());
  276. perColModel.setListPermission(colAuthFileds);
  277. }
  278. //表单
  279. if (columnDataModel.getUseFormPermission()) {
  280. List<AuthFlieds> formAuthList = allColumnDataList.stream().map(colFlied -> {
  281. return AuthFlieds.builder().enCode(colFlied.getEnCode()).fullName(colFlied.getFullName()).status(true).rule(colFlied.getRule()).childTableKey(colFlied.getChildTableKey())
  282. .bindTableName(colFlied.getBindTableName()).build();
  283. }).collect(Collectors.toList());
  284. perColModel.setFormPermission(formAuthList);
  285. }
  286. //数据权限
  287. if (columnDataModel.getUseDataPermission() && columnListFields != null) {
  288. List<ColumnListField> mainColFieldList = columnListFields.stream()
  289. .filter(col -> !col.getProp().toLowerCase().matches(reg) && !col.getProp().toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX))
  290. .filter(DataControlUtils.distinctByKey(data -> data.getJnpfKey())).collect(Collectors.toList());
  291. //数据权限方案
  292. List<ModuleDataAuthorizeSchemeEntity> schemeEntityList = new ArrayList<>();
  293. for (ColumnListField field : mainColFieldList) {
  294. if (JnpfKeyConsts.CREATEUSER.equals(field.getJnpfKey())) {
  295. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Equal, AuthorizeConditionEnum.USER));
  296. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Included, AuthorizeConditionEnum.USERANDUNDER));
  297. } else if (JnpfKeyConsts.CURRORGANIZE.equals(field.getJnpfKey())) {
  298. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Included, AuthorizeConditionEnum.ORGANIZE));
  299. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Included, AuthorizeConditionEnum.ORGANDSUB));
  300. } else if (JnpfKeyConsts.CURRPOSITION.equals(field.getJnpfKey())) {
  301. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Included, AuthorizeConditionEnum.POSITIONID));
  302. schemeEntityList.add(getSchemeEntity(field, SearchMethodEnum.Included, AuthorizeConditionEnum.POSITIONANDSUB));
  303. }
  304. }
  305. perColModel.setDataPermissionScheme(schemeEntityList);
  306. }
  307. return perColModel;
  308. }
  309. /**
  310. * 数据权限方案赋值
  311. *
  312. * @param field
  313. * @param thisSymbol
  314. * @param thisCondition
  315. * @return
  316. */
  317. private static ModuleDataAuthorizeSchemeEntity getSchemeEntity(ColumnListField field, SearchMethodEnum thisSymbol, AuthorizeConditionEnum thisCondition) {
  318. ConfigModel config = field.getConfig();
  319. String tableName = StringUtil.isNotEmpty(config.getRelationTable()) ? config.getRelationTable() : config.getTableName();
  320. AuthConditionModel conditionModel = new AuthConditionModel();
  321. AuthGroup group = new AuthGroup();
  322. AuthItem authItem = new AuthItem();
  323. authItem.setId(field.getId());
  324. authItem.setField(field.getId());
  325. authItem.setFieldId(field.getId());
  326. authItem.setFieldName(field.getLabel());
  327. authItem.setFullName(field.getLabel());
  328. authItem.setSymbol(thisSymbol.getSymbol());
  329. authItem.setSymbolName(thisSymbol.getMessage());
  330. authItem.setJnpfKey(field.getJnpfKey());
  331. //4-系统参数
  332. authItem.setFieldValueType(4);
  333. authItem.setFieldValue(thisCondition.getCondition());
  334. authItem.setCellKey(RandomUtil.uuId());
  335. authItem.setTableName(tableName);
  336. authItem.setRequired(false);
  337. authItem.setMultiple(false);
  338. authItem.setDisabled(false);
  339. authItem.set__config__(new AuthItemConfig(field.getJnpfKey(), field.getLabel()));
  340. group.setGroups(new ArrayList() {{
  341. add(authItem);
  342. }});
  343. conditionModel.setConditionList(new ArrayList() {{
  344. add(group);
  345. }});
  346. String conditionText = field.getLabel() + " " + thisSymbol.getMessage() + thisCondition.getMessage();
  347. ModuleDataAuthorizeSchemeEntity schemeEntity = new ModuleDataAuthorizeSchemeEntity();
  348. schemeEntity.setFullName(thisCondition.getMessage());
  349. schemeEntity.setEnCode(RandomUtil.uuId());
  350. schemeEntity.setConditionJson(JsonUtil.getObjectToString(conditionModel));
  351. schemeEntity.setConditionText(conditionText);
  352. schemeEntity.setEnabledMark(1);
  353. schemeEntity.setDescription("0_" + field.getId() + "_" + thisSymbol.getSymbol());
  354. schemeEntity.setSortCode(-9527l);
  355. return schemeEntity;
  356. }
  357. /**
  358. * 获取系统按钮集合
  359. *
  360. * @param isPC 是否pc端
  361. * @return
  362. */
  363. private static List<AuthFlieds> getAuthFiledList(Boolean isPC, ColumnDataModel columnDataModel) {
  364. List<AuthFlieds> btnList = new ArrayList<>(6);
  365. String btnValues = AuthPerConfirm(columnDataModel);
  366. btnList.add(AuthFlieds.builder().fullName("新增").enCode(PermissionConst.BTN_ADD).status(false).build());
  367. btnList.add(AuthFlieds.builder().fullName("编辑").enCode(PermissionConst.BTN_EDIT).status(false).build());
  368. btnList.add(AuthFlieds.builder().fullName("删除").enCode(PermissionConst.BTN_REMOVE).status(false).build());
  369. btnList.add(AuthFlieds.builder().fullName("详情").enCode(PermissionConst.BTN_DETAIL).status(false).build());
  370. btnList.add(AuthFlieds.builder().fullName("批量删除").enCode(PermissionConst.BTN_BATCHREMOVE).status(false).build());
  371. //pc端 按钮
  372. if (isPC) {
  373. btnList.add(AuthFlieds.builder().fullName("导入").enCode(PermissionConst.BTN_UPLOAD).status(false).build());
  374. btnList.add(AuthFlieds.builder().fullName("导出").enCode(PermissionConst.BTN_DOWNLOAD).status(false).build());
  375. btnList.add(AuthFlieds.builder().fullName("批量打印").enCode(PermissionConst.BTN_BATCHPRINT).status(false).build());
  376. }
  377. btnList.stream().filter(btn -> btnValues.contains(btn.getEnCode().replace("btn_", ""))).forEach(btn -> btn.setStatus(true));
  378. //自定义按钮区
  379. List<BtnData> CustomBtnList = JsonUtil.getJsonToList(columnDataModel.getCustomBtnsList(), BtnData.class);
  380. if (Objects.nonNull(CustomBtnList)) {
  381. List<AuthFlieds> CustomBtnAuth = CustomBtnList.stream().map(cus -> AuthFlieds.builder().fullName(cus.getLabel()).enCode(cus.getValue()).status(true).build()).collect(Collectors.toList());
  382. btnList.addAll(CustomBtnAuth);
  383. }
  384. return btnList;
  385. }
  386. private static String AuthPerConfirm(ColumnDataModel columnDataModel) {
  387. List<BtnData> btnDataList = new ArrayList<>();
  388. List<BtnData> BtnList = JsonUtil.getJsonToList(columnDataModel.getBtnsList(), BtnData.class);
  389. List<BtnData> ColumnBtnList = JsonUtil.getJsonToList(columnDataModel.getColumnBtnsList(), BtnData.class);
  390. btnDataList.addAll(BtnList);
  391. btnDataList.addAll(ColumnBtnList);
  392. String btnValue = btnDataList.stream().filter(t -> t.isShow()).map(btn -> btn.getValue()).collect(Collectors.joining(","));
  393. return btnValue;
  394. }
  395. /**
  396. * 检验是否可发布
  397. *
  398. * @param entity
  399. * @param Action
  400. * @return
  401. */
  402. public static String checkPublishVisualModel(VisualdevEntity entity, String Action) {
  403. String errorMsg = null;
  404. if (OnlineDevData.FORM_TYPE_DEV.equals(entity.getType())) {
  405. //数据视图没有formdata
  406. if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())) {
  407. FormDataModel formDataModel = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class);
  408. errorMsg = formDataModel == null ? MsgCode.VS401.get() + Action + "!" : null;
  409. }
  410. if (StringUtil.isNotEmpty(errorMsg)) {
  411. return errorMsg;
  412. }
  413. if (VisualWebTypeEnum.FORM_LIST.getType().equals(entity.getWebType())
  414. || VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())) {
  415. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(entity.getColumnData(), ColumnDataModel.class);
  416. errorMsg = columnDataModel == null ? MsgCode.VS402.get() + Action + "!" : null;
  417. }
  418. }
  419. return errorMsg;
  420. }
  421. private static String getSchemeNameByCondition(String condition) {
  422. String name = "default";
  423. AuthorizeConditionEnum byMessage = AuthorizeConditionEnum.getByMessage(condition);
  424. if (byMessage != null) {
  425. name = byMessage.getMessage();
  426. }
  427. return name;
  428. }
  429. /**
  430. * 回传表单获取权限信息
  431. *
  432. * @param visualdevEntity
  433. * @return
  434. */
  435. public static VisualMenuModel getVisualHC(VisualdevEntity visualdevEntity) {
  436. VisualMenuModel visualMenuModel = new VisualMenuModel();
  437. visualMenuModel.setFullName(visualdevEntity.getFullName());
  438. visualMenuModel.setEnCode(visualdevEntity.getEnCode());
  439. visualMenuModel.setId(visualdevEntity.getId());
  440. List<TableModel> listTable = JsonUtil.getJsonToList(visualdevEntity.getVisualTables(), TableModel.class);
  441. String mainTableStr;
  442. if (CollectionUtil.isNotEmpty(listTable)) {
  443. mainTableStr = listTable.stream().filter(t -> t.getTypeId().equals("1")).findFirst().orElse(null).getTable();
  444. } else {
  445. mainTableStr = "";
  446. }
  447. List<DraftJsonModel> formFields = StringUtil.isNotEmpty(visualdevEntity.getFormData()) ?
  448. JsonUtil.getJsonToList(visualdevEntity.getFormData(), DraftJsonModel.class) : Collections.EMPTY_LIST;
  449. List<DraftJsonModel> columnFields = StringUtil.isNotEmpty(visualdevEntity.getColumnData()) ?
  450. JsonUtil.getJsonToList(visualdevEntity.getColumnData(), DraftJsonModel.class) : Collections.EMPTY_LIST;
  451. List<DraftJsonModel> appColumnFields = StringUtil.isNotEmpty(visualdevEntity.getAppColumnData()) ?
  452. JsonUtil.getJsonToList(visualdevEntity.getAppColumnData(), DraftJsonModel.class) : Collections.EMPTY_LIST;
  453. List<AuthFlieds> buttonFields = StringUtil.isNotEmpty(visualdevEntity.getButtonData()) ?
  454. JsonUtil.getJsonToList(visualdevEntity.getButtonData(), AuthFlieds.class) : Collections.EMPTY_LIST;
  455. buttonFields.stream().forEach(t -> t.setStatus(true));
  456. List<AuthFlieds> appButtonFields = StringUtil.isNotEmpty(visualdevEntity.getAppButtonData()) ?
  457. JsonUtil.getJsonToList(visualdevEntity.getAppButtonData(), AuthFlieds.class) : Collections.EMPTY_LIST;
  458. appButtonFields.stream().forEach(t -> t.setStatus(true));
  459. //表单权限
  460. List<AuthFlieds> formAuthList = formFields.stream().map(colFlied -> {
  461. String fieldId = colFlied.getFieldId();
  462. String field = "";
  463. String tableName = colFlied.getTableName();
  464. String childTableKey = null;//子表编码
  465. Integer rule = 0;
  466. if (fieldId.matches(JnpfConst.SIDE_REGULAR)) {
  467. field = fieldId.split(JnpfConst.SIDE_MARK)[1];
  468. rule = 1;
  469. } else if (fieldId.toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) {
  470. String[] split = fieldId.split("-");
  471. field = split.length == 1 ? split[0] : split[1];
  472. childTableKey = split[0];
  473. rule = 2;
  474. } else {
  475. field = fieldId;
  476. tableName = mainTableStr;
  477. }
  478. return AuthFlieds.builder().enCode(fieldId).fullName(colFlied.getFieldName()).status(true).rule(rule).bindTableName(tableName).childTableKey(childTableKey).build();
  479. }).collect(Collectors.toList());
  480. //列表
  481. List<AuthFlieds> listAuthList = getColumnList(columnFields);
  482. List<AuthFlieds> appListAuthList = getColumnList(appColumnFields);
  483. PerColModels pcModel = new PerColModels();
  484. pcModel.setFormPermission(formAuthList);
  485. pcModel.setListPermission(listAuthList);
  486. pcModel.setButtonPermission(buttonFields);
  487. visualMenuModel.setPcPerCols(pcModel);
  488. PerColModels appModel = new PerColModels();
  489. appModel.setFormPermission(formAuthList);
  490. appModel.setButtonPermission(appButtonFields);
  491. appModel.setListPermission(appListAuthList);
  492. visualMenuModel.setAppPerCols(appModel);
  493. return visualMenuModel;
  494. }
  495. //获取列表字段信息
  496. private static List<AuthFlieds> getColumnList(List<DraftJsonModel> columnFields) {
  497. List<AuthFlieds> listAuthList = columnFields.stream().map(colFlied -> {
  498. String fieldId = colFlied.getFieldId();
  499. String field = "";
  500. String tableName = colFlied.getTableName();
  501. String childTableKey = null;//子表编码
  502. Integer rule = 0;
  503. if (fieldId.matches(JnpfConst.SIDE_REGULAR)) {
  504. field = fieldId.split(JnpfConst.SIDE_MARK)[1];
  505. rule = 1;
  506. } else if (fieldId.toLowerCase().startsWith(JnpfKeyConsts.CHILD_TABLE_PREFIX)) {
  507. String[] split = fieldId.split("-");
  508. field = split.length == 1 ? split[0] : split[1];
  509. childTableKey = split[0];
  510. rule = 2;
  511. } else {
  512. field = fieldId;
  513. }
  514. return AuthFlieds.builder().enCode(fieldId).fullName(colFlied.getFieldName()).status(true).rule(rule).bindTableName(tableName).childTableKey(childTableKey).build();
  515. }).collect(Collectors.toList());
  516. return listAuthList;
  517. }
  518. }