OnlinePublicUtils.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731
  1. package jnpf.onlinedev.util.onlineDevUtil;
  2. import jnpf.base.entity.DataInterfaceEntity;
  3. import jnpf.base.entity.VisualdevEntity;
  4. import jnpf.base.entity.VisualdevReleaseEntity;
  5. import jnpf.base.model.ColumnDataModel;
  6. import jnpf.base.model.Template6.ColumnListField;
  7. import jnpf.base.model.VisualDevJsonModel;
  8. import jnpf.base.model.VisualWebTypeEnum;
  9. import jnpf.constant.MsgCode;
  10. import jnpf.database.model.superQuery.SuperJsonModel;
  11. import jnpf.database.model.superQuery.SuperQueryJsonModel;
  12. import jnpf.exception.WorkFlowException;
  13. import jnpf.model.OnlineDevData;
  14. import jnpf.model.visualJson.FieLdsModel;
  15. import jnpf.model.visualJson.FormDataModel;
  16. import jnpf.model.visualJson.TableModel;
  17. import jnpf.model.visualJson.analysis.FormEnum;
  18. import jnpf.model.visualJson.analysis.FormModel;
  19. import jnpf.model.visualJson.config.ConfigModel;
  20. import jnpf.onlinedev.model.OnlineDevEnum.MultipleControlEnum;
  21. import jnpf.util.JsonUtil;
  22. import jnpf.util.StringUtil;
  23. import jnpf.util.XSSEscape;
  24. import jnpf.util.visiual.JnpfKeyConsts;
  25. import org.apache.commons.collections4.MapUtils;
  26. import java.time.Instant;
  27. import java.time.LocalDateTime;
  28. import java.time.ZoneId;
  29. import java.time.format.DateTimeFormatter;
  30. import java.util.*;
  31. import java.util.stream.Collectors;
  32. /**
  33. * 在线开发公用
  34. *
  35. * @author JNPF开发平台组
  36. * @version V3.1.0
  37. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  38. * @date 2021/7/28
  39. */
  40. public class OnlinePublicUtils {
  41. /**
  42. * 判断有表无表
  43. *
  44. * @return
  45. */
  46. public static Boolean isUseTables(String tableJson) {
  47. if (!StringUtil.isEmpty(tableJson) && !OnlineDevData.TABLE_CONST.equals(tableJson)) {
  48. return true;
  49. }
  50. return false;
  51. }
  52. /**
  53. * map key转小写
  54. *
  55. * @param requestMap
  56. * @return
  57. */
  58. public static Map<String, Object> mapKeyToLower(Map<String, ?> requestMap) {
  59. // 非空校验
  60. if (requestMap.isEmpty()) {
  61. return null;
  62. }
  63. // 初始化放转换后数据的Map
  64. Map<String, Object> responseMap = new HashMap<>(16);
  65. // 使用迭代器进行循环遍历
  66. Set<String> requestSet = requestMap.keySet();
  67. Iterator<String> iterator = requestSet.iterator();
  68. iterator.forEachRemaining(obj -> {
  69. // 判断Key对应的Value是否为Map
  70. if ((requestMap.get(obj) instanceof Map)) {
  71. // 递归调用,将value中的Map的key转小写
  72. responseMap.put(obj.toLowerCase(), mapKeyToLower((Map) requestMap.get(obj)));
  73. } else {
  74. // 直接将key小写放入responseMap
  75. responseMap.put(obj.toLowerCase(), requestMap.get(obj));
  76. }
  77. });
  78. return responseMap;
  79. }
  80. /**
  81. * 获取map中第一个数据值
  82. *
  83. * @param map 数据源
  84. * @return
  85. */
  86. public static Object getFirstOrNull(Map<String, Object> map) {
  87. Object obj = null;
  88. for (Map.Entry<String, Object> entry : map.entrySet()) {
  89. obj = entry.getValue();
  90. if (obj != null) {
  91. break;
  92. }
  93. }
  94. return obj;
  95. }
  96. /**
  97. * 去除列表里无用的控件
  98. *
  99. * @param fieldsModelList
  100. * @return
  101. */
  102. public static void removeUseless(List<FieLdsModel> fieldsModelList) {
  103. for (int i = 0; i < fieldsModelList.size(); i++) {
  104. if (fieldsModelList.get(i).getConfig().getJnpfKey() == null) {
  105. continue;
  106. }
  107. if (fieldsModelList.get(i).getConfig().getJnpfKey().equals(JnpfKeyConsts.CHILD_TABLE)) {
  108. continue;
  109. }
  110. }
  111. }
  112. /**
  113. * 递归控件
  114. *
  115. * @param allFields
  116. * @param fieLdsModelList
  117. * @return
  118. */
  119. public static void recursionFields(List<FieLdsModel> allFields, List<FieLdsModel> fieLdsModelList) {
  120. for (FieLdsModel fieLdsModel : fieLdsModelList) {
  121. ConfigModel config = fieLdsModel.getConfig();
  122. String jnpfKey = config.getJnpfKey();
  123. if (JnpfKeyConsts.CHILD_TABLE.equals(jnpfKey)) {
  124. allFields.add(fieLdsModel);
  125. continue;
  126. } else {
  127. if (config.getChildren() != null) {
  128. recursionFields(allFields, config.getChildren());
  129. } else {
  130. if (jnpfKey == null) {
  131. continue;
  132. }
  133. allFields.add(fieLdsModel);
  134. }
  135. }
  136. }
  137. }
  138. /**
  139. * 判断字符串是否有某个字符存在
  140. *
  141. * @param var1 完整字符串
  142. * @param var2 统计字符
  143. * @return
  144. */
  145. public static Boolean getMultiple(String var1, String var2) {
  146. if (var1.startsWith(var2)) {
  147. return true;
  148. }
  149. return false;
  150. }
  151. /**
  152. * 数据字典处理(从缓存中取出)
  153. *
  154. * @param dataList
  155. * @param swapModel
  156. * @return
  157. */
  158. public static Map<String, Object> getDataMap(List<Map<String, Object>> dataList, FieLdsModel swapModel) {
  159. String label = swapModel.getProps() != null ? swapModel.getProps().getLabel() : "";
  160. String value = swapModel.getProps() != null ? swapModel.getProps().getValue() : "";
  161. Map<String, Object> dataInterfaceMap = new HashMap<>();
  162. dataList.stream().forEach(data -> {
  163. dataInterfaceMap.put(String.valueOf(data.get(value)), String.valueOf(data.get(label)));
  164. });
  165. return dataInterfaceMap;
  166. }
  167. /**
  168. * 获取时间(+8)
  169. *
  170. * @param date
  171. * @param format
  172. * @return
  173. */
  174. public static String getDateByFormat(Long date, String format) {
  175. DateTimeFormatter ftf = DateTimeFormatter.ofPattern(format);
  176. String dateString = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(date), ZoneId.of("+8")));
  177. return dateString;
  178. }
  179. /**
  180. * 递归表单控件
  181. *
  182. * @param modelList 所有控件
  183. * @param mainFields 主表
  184. * @param childFields 子表
  185. * @param models 二维码 条形码
  186. */
  187. public static void recurseFiled(List<FieLdsModel> modelList, List<FieLdsModel> mainFields, List<FieLdsModel> childFields, List<FormModel> models) {
  188. for (FieLdsModel fieLdsModel : modelList) {
  189. ConfigModel config = fieLdsModel.getConfig();
  190. String jnpfkey = config.getJnpfKey();
  191. List<FieLdsModel> childrenList = config.getChildren();
  192. boolean isJnpfKey = StringUtil.isEmpty(jnpfkey);
  193. List<String> keyList = new ArrayList() {
  194. {
  195. add(FormEnum.card.getMessage());
  196. add(FormEnum.row.getMessage());
  197. add(FormEnum.tab.getMessage());
  198. add(FormEnum.collapse.getMessage());
  199. add(FormEnum.collapseItem.getMessage());
  200. add(FormEnum.tabItem.getMessage());
  201. add(FormEnum.tableGrid.getMessage());
  202. add(FormEnum.tableGridTr.getMessage());
  203. add(FormEnum.tableGridTd.getMessage());
  204. add(FormEnum.STEPS.getMessage());
  205. add(FormEnum.STEP_ITEM.getMessage());
  206. }
  207. };
  208. if (keyList.contains(jnpfkey) || isJnpfKey) {
  209. if (childrenList.size() > 0) {
  210. recurseFiled(childrenList, mainFields, childFields, models);
  211. } else {
  212. mainFields.add(fieLdsModel);
  213. }
  214. } else if (FormEnum.table.getMessage().equals(jnpfkey)) {
  215. childFields.add(fieLdsModel);
  216. } else if (FormEnum.groupTitle.getMessage().equals(jnpfkey) || FormEnum.divider.getMessage().equals(jnpfkey) || FormEnum.JNPFText.getMessage().equals(jnpfkey)) {
  217. } else if (FormEnum.QR_CODE.getMessage().equals(jnpfkey) || FormEnum.BARCODE.getMessage().equals(jnpfkey)) {
  218. FormModel formModel = JsonUtil.getJsonToBean(fieLdsModel, FormModel.class);
  219. models.add(formModel);
  220. } else {
  221. mainFields.add(fieLdsModel);
  222. }
  223. }
  224. }
  225. /**
  226. * 递归控件
  227. *
  228. * @return
  229. */
  230. public static void recursionFormFields(List<FieLdsModel> allFields, List<FieLdsModel> fieLdsModelList) {
  231. for (FieLdsModel fieLdsModel : fieLdsModelList) {
  232. ConfigModel config = fieLdsModel.getConfig();
  233. String jnpfKey = config.getJnpfKey();
  234. if (JnpfKeyConsts.CHILD_TABLE.equals(jnpfKey)) {
  235. allFields.add(fieLdsModel);
  236. continue;
  237. } else {
  238. if (config.getChildren() != null) {
  239. recursionFormFields(allFields, config.getChildren());
  240. } else {
  241. allFields.add(fieLdsModel);
  242. }
  243. }
  244. }
  245. }
  246. /**
  247. * 递归控件(取出所有子集)
  248. *
  249. * @return
  250. */
  251. public static void recursionFormChildFields(List<FieLdsModel> allFields, List<FieLdsModel> fieLdsModelList) {
  252. for (FieLdsModel fieLdsModel : fieLdsModelList) {
  253. ConfigModel config = fieLdsModel.getConfig();
  254. String jnpfKey = config.getJnpfKey();
  255. if (JnpfKeyConsts.CHILD_TABLE.equals(jnpfKey)) {
  256. String childVmodel = fieLdsModel.getVModel();
  257. String childLabel = fieLdsModel.getConfig().getLabel();
  258. for (FieLdsModel child : Optional.ofNullable(fieLdsModel.getConfig().getChildren()).orElse(new ArrayList<>())) {
  259. if (child.getVModel() != null) {
  260. child.setVModel(childVmodel + "-" + child.getVModel());
  261. child.getConfig().setLabel(childLabel + "-" + child.getConfig().getLabel());
  262. allFields.add(child);
  263. }
  264. }
  265. } else {
  266. if (config.getChildren() != null) {
  267. recursionFormChildFields(allFields, config.getChildren());
  268. } else {
  269. if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) {
  270. allFields.add(fieLdsModel);
  271. }
  272. }
  273. }
  274. }
  275. }
  276. public static void recurseOnlineFiled(List<FieLdsModel> modelList, List<FieLdsModel> mainFields, List<FieLdsModel> childFields) {
  277. for (FieLdsModel fieLdsModel : modelList) {
  278. ConfigModel config = fieLdsModel.getConfig();
  279. String jnpfkey = config.getJnpfKey();
  280. List<FieLdsModel> childrenList = config.getChildren();
  281. boolean isJnpfKey = StringUtil.isEmpty(jnpfkey);
  282. if (FormEnum.row.getMessage().equals(jnpfkey) || FormEnum.card.getMessage().equals(jnpfkey)
  283. || FormEnum.tab.getMessage().equals(jnpfkey) || FormEnum.collapse.getMessage().equals(jnpfkey)
  284. || isJnpfKey) {
  285. if (childrenList.size() > 0) {
  286. recurseOnlineFiled(childrenList, mainFields, childFields);
  287. } else {
  288. mainFields.add(fieLdsModel);
  289. }
  290. } else if (FormEnum.table.getMessage().equals(jnpfkey)) {
  291. childFields.add(fieLdsModel);
  292. } else if (FormEnum.groupTitle.getMessage().equals(jnpfkey) || FormEnum.divider.getMessage().equals(jnpfkey) || FormEnum.JNPFText.getMessage().equals(jnpfkey)) {
  293. } else {
  294. mainFields.add(fieLdsModel);
  295. }
  296. }
  297. }
  298. /**
  299. * @param redisMap 缓存集合
  300. * @param modelData 数据
  301. * @param isMultiple 是否多选
  302. * @return
  303. */
  304. public static String getDataInMethod(Map<String, Object> redisMap, Object modelData, Boolean isMultiple) {
  305. if (redisMap == null || redisMap.isEmpty()) {
  306. return modelData.toString();
  307. }
  308. String Separator = isMultiple ? ";" : "/";
  309. String s2;
  310. if (OnlinePublicUtils.getMultiple(String.valueOf(modelData), MultipleControlEnum.MULTIPLE_JSON_TWO.getMultipleChar())) {
  311. String[][] data = JsonUtil.getJsonToBean(String.valueOf(modelData), String[][].class);
  312. List<String> addList = new ArrayList<>();
  313. for (String[] AddressData : data) {
  314. List<String> adList = new ArrayList<>();
  315. for (String s : AddressData) {
  316. adList.add(String.valueOf(redisMap.get(s)));
  317. }
  318. addList.add(String.join("/", adList));
  319. }
  320. s2 = String.join(";", addList);
  321. } else if (OnlinePublicUtils.getMultiple(String.valueOf(modelData), MultipleControlEnum.MULTIPLE_JSON_ONE.getMultipleChar())) {
  322. List<String> modelDataList = JsonUtil.getJsonToList(String.valueOf(modelData), String.class);
  323. modelDataList = modelDataList.stream().map(s -> String.valueOf(redisMap.get(s))).collect(Collectors.toList());
  324. s2 = String.join(Separator, modelDataList);
  325. } else {
  326. String[] modelDatas = String.valueOf(modelData).split(",");
  327. StringBuilder dynamicData = new StringBuilder();
  328. for (int i = 0; i < modelDatas.length; i++) {
  329. modelDatas[i] = String.valueOf(Objects.nonNull(redisMap.get(modelDatas[i])) ? redisMap.get(modelDatas[i]) : "");
  330. dynamicData.append(modelDatas[i] + Separator);
  331. }
  332. s2 = dynamicData.deleteCharAt(dynamicData.length() - 1).toString();
  333. }
  334. return StringUtil.isEmpty(s2) ? modelData.toString() : s2;
  335. }
  336. public static List<String> getDataNoSwapInMethod(Object modelData) {
  337. List<String> dataValueList = new ArrayList<>();
  338. if (OnlinePublicUtils.getMultiple(String.valueOf(modelData), MultipleControlEnum.MULTIPLE_JSON_ONE.getMultipleChar())) {
  339. List<String> modelDataList = JsonUtil.getJsonToList(String.valueOf(modelData), String.class);
  340. dataValueList = modelDataList;
  341. } else {
  342. String[] modelDatas = String.valueOf(modelData).split(",");
  343. for (int i = 0; i < modelDatas.length; i++) {
  344. dataValueList.add(modelDatas[i]);
  345. }
  346. }
  347. return dataValueList;
  348. }
  349. public static VisualDevJsonModel getVisualJsonModel(VisualdevEntity entity) {
  350. VisualDevJsonModel jsonModel = new VisualDevJsonModel();
  351. if (entity.getColumnData() != null) {
  352. jsonModel.setColumnData(JsonUtil.getJsonToBean(entity.getColumnData(), ColumnDataModel.class));
  353. }
  354. if (entity.getAppColumnData() != null) {
  355. jsonModel.setAppColumnData(JsonUtil.getJsonToBean(entity.getAppColumnData(), ColumnDataModel.class));
  356. }
  357. FormDataModel formDataModel = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class);
  358. jsonModel.setFormData(formDataModel);
  359. if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())) {
  360. jsonModel.setFormListModels(JsonUtil.getJsonToList(formDataModel.getFields(), FieLdsModel.class));
  361. }
  362. jsonModel.setVisualTables(JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class));
  363. jsonModel.setId(entity.getId());
  364. jsonModel.setDbLinkId(entity.getDbLinkId());
  365. jsonModel.setFullName(entity.getFullName());
  366. jsonModel.setType(entity.getType());
  367. jsonModel.setWebType(entity.getWebType());
  368. return jsonModel;
  369. }
  370. public static VisualDevJsonModel getVisualJsonModel(VisualdevReleaseEntity entity) throws WorkFlowException {
  371. if (entity == null) throw new WorkFlowException(MsgCode.VS412.get());
  372. VisualDevJsonModel jsonModel = new VisualDevJsonModel();
  373. if (entity.getColumnData() != null) {
  374. jsonModel.setColumnData(JsonUtil.getJsonToBean(entity.getColumnData(), ColumnDataModel.class));
  375. }
  376. if (entity.getAppColumnData() != null) {
  377. jsonModel.setAppColumnData(JsonUtil.getJsonToBean(entity.getAppColumnData(), ColumnDataModel.class));
  378. }
  379. FormDataModel formDataModel = JsonUtil.getJsonToBean(entity.getFormData(), FormDataModel.class);
  380. jsonModel.setFormData(formDataModel);
  381. if (!VisualWebTypeEnum.DATA_VIEW.getType().equals(entity.getWebType())) {
  382. jsonModel.setFormListModels(JsonUtil.getJsonToList(formDataModel.getFields(), FieLdsModel.class));
  383. }
  384. jsonModel.setVisualTables(JsonUtil.getJsonToList(entity.getVisualTables(), TableModel.class));
  385. jsonModel.setId(entity.getId());
  386. jsonModel.setDbLinkId(entity.getDbLinkId());
  387. jsonModel.setFullName(entity.getFullName());
  388. jsonModel.setType(entity.getType());
  389. jsonModel.setWebType(entity.getWebType());
  390. return jsonModel;
  391. }
  392. /**
  393. * @param mapList
  394. * @return List<Map < String, Object>>
  395. * @Date 21:51 2020/11/11
  396. * @Description 将map中的所有key转化为小写
  397. */
  398. public static List<Map<String, Object>> toLowerKeyList(List<Map<String, Object>> mapList) {
  399. List<Map<String, Object>> newMapList = new ArrayList<>();
  400. for (Map<String, Object> map : mapList) {
  401. Map<String, Object> resultMap = new HashMap(16);
  402. Set<String> sets = map.keySet();
  403. for (String key : sets) {
  404. resultMap.put(key.toLowerCase(), map.get(key));
  405. }
  406. newMapList.add(resultMap);
  407. }
  408. return newMapList;
  409. }
  410. /**
  411. * 字符串转数组
  412. *
  413. * @param value 值
  414. * @return
  415. */
  416. public static Object getDataConversion(Object value) {
  417. Object dataValue = getDataConversion(null, value, false, "/");
  418. return dataValue;
  419. }
  420. /**
  421. * 字符串转数组
  422. *
  423. * @param redis 转换对象
  424. * @param value 值
  425. * @return
  426. */
  427. public static Object getDataConversion(Map<String, Object> redis, Object value, boolean isMultiple, String separator) {
  428. Object dataValue = value;
  429. boolean iszhuanhuan = redis != null;
  430. try {
  431. List<List> list = JsonUtil.getJsonToList(String.valueOf(value), List.class);
  432. dataValue = list;
  433. if (iszhuanhuan) {
  434. //一级分隔符
  435. StringJoiner joiner = new StringJoiner(",");
  436. for (List listChild : list) {
  437. StringJoiner aa = new StringJoiner(separator);
  438. for (Object object : listChild) {
  439. String value1 = redis.get(String.valueOf(object)) != null ? String.valueOf(redis.get(String.valueOf(object))) : "";
  440. if (StringUtil.isNotEmpty(value1)) {
  441. aa.add(value1);
  442. }
  443. }
  444. joiner.add(aa.toString());
  445. }
  446. dataValue = joiner.toString();
  447. }
  448. } catch (Exception e) {
  449. try {
  450. List<String> list = JsonUtil.getJsonToList(String.valueOf(value), String.class);
  451. dataValue = list;
  452. if (iszhuanhuan) {
  453. if (isMultiple) {//一级分隔符
  454. separator = ",";
  455. }
  456. StringJoiner joiner = new StringJoiner(separator);
  457. for (Object listChild : list) {
  458. String value1 = redis.get(String.valueOf(listChild)) != null ? String.valueOf(redis.get(String.valueOf(listChild))) : "";
  459. if (StringUtil.isNotEmpty(value1)) {
  460. joiner.add(value1);
  461. }
  462. }
  463. dataValue = joiner.toString();
  464. }
  465. } catch (Exception e1) {
  466. dataValue = String.valueOf(value);
  467. if (iszhuanhuan) {
  468. dataValue = redis.get(String.valueOf(value)) != null ? String.valueOf(redis.get(String.valueOf(value))) : "";
  469. }
  470. }
  471. }
  472. return dataValue;
  473. }
  474. /**
  475. * 视图sql条件拼接
  476. *
  477. * @param info
  478. * @param queryCondition
  479. * @param parameterMap
  480. * @return
  481. */
  482. public static void getViewQuerySql(DataInterfaceEntity info, List<FieLdsModel> queryCondition, Map<String, String> parameterMap, Map<String, Object> extraMap) {
  483. if (Objects.equals(info.getType(), 1) && queryCondition.size() > 0) {
  484. String searchSqlStr = "";
  485. for (FieLdsModel item : queryCondition) {
  486. switch (item.getSearchType()) {
  487. case 1:
  488. if (StringUtil.isNotEmpty(searchSqlStr)) {
  489. searchSqlStr += " and t." + item.getVModel() + " = '" + XSSEscape.escape(item.getFieldValue()) + "'";
  490. } else {
  491. searchSqlStr = "t." + item.getVModel() + " = '" + XSSEscape.escape(item.getFieldValue()) + "'";
  492. }
  493. break;
  494. case 2:
  495. if (StringUtil.isNotEmpty(searchSqlStr)) {
  496. searchSqlStr += " and t." + item.getVModel() + " like '%" + XSSEscape.escape(item.getFieldValue()) + "%'";
  497. } else {
  498. searchSqlStr = "t." + item.getVModel() + " like '%" + XSSEscape.escape(item.getFieldValue()) + "%'";
  499. }
  500. break;
  501. case 3://between
  502. if (StringUtil.isNotEmpty(searchSqlStr)) {
  503. searchSqlStr += " and t." + item.getVModel() + " between '" + XSSEscape.escape(String.valueOf(item.getFieldValueOne()))
  504. + "' and '" + XSSEscape.escape(String.valueOf(item.getFieldValueTwo())) + "'";
  505. } else {
  506. searchSqlStr = "t." + item.getVModel() + " between '" + XSSEscape.escape(String.valueOf(item.getFieldValueOne()))
  507. + "' and '" + XSSEscape.escape(String.valueOf(item.getFieldValueTwo())) + "'";
  508. }
  509. break;
  510. case 4://包含
  511. List<String> dataList = item.getDataList();
  512. if (dataList.size() > 0) {
  513. if (StringUtil.isNotEmpty(searchSqlStr)) {
  514. searchSqlStr += " and (";
  515. } else {
  516. searchSqlStr += " 1=1 and (";
  517. }
  518. int n = 0;
  519. for (String value : dataList) {
  520. if (n > 0) {
  521. searchSqlStr += " or t." + item.getVModel() + " like '%" + value + "%'";
  522. } else {
  523. searchSqlStr += "t." + item.getVModel() + " like '%" + value + "%'";
  524. }
  525. n++;
  526. }
  527. searchSqlStr += ") ";
  528. }
  529. break;
  530. default:
  531. break;
  532. }
  533. }
  534. //页签条件额外拼接
  535. if (MapUtils.isNotEmpty(extraMap)) {
  536. for (String key : extraMap.keySet()) {
  537. if (StringUtil.isNotEmpty(searchSqlStr)) {
  538. searchSqlStr += " and t." + key + " = '" + XSSEscape.escape(extraMap.get(key).toString()) + "'";
  539. } else {
  540. searchSqlStr = "t." + key + " = '" + XSSEscape.escape(extraMap.get(key).toString()) + "'";
  541. }
  542. }
  543. }
  544. parameterMap.put("searchSqlStr", searchSqlStr);
  545. }
  546. }
  547. /**
  548. * 视图非sql条件过滤
  549. *
  550. * @param info
  551. * @param queryCondition
  552. * @param dataRes
  553. * @return
  554. */
  555. public static List<Map<String, Object>> getViewQueryNotSql(DataInterfaceEntity info, List<FieLdsModel> queryCondition, List<Map<String, Object>> dataRes, Map<String, Object> extraMap) {
  556. //是否包含页签参数
  557. boolean hasExtra = false;
  558. String key = "";
  559. if (MapUtils.isNotEmpty(extraMap)) {
  560. hasExtra = true;
  561. List<String> keyList = new ArrayList<>(extraMap.keySet());
  562. key = keyList.get(0);
  563. }
  564. List<Map<String, Object>> dataInterfaceList = new ArrayList<>();
  565. if (!Objects.equals(info.getType(), 1) && queryCondition.size() > 0) {
  566. for (Map<String, Object> map : dataRes) {
  567. if (OnlinePublicUtils.mapCompar(queryCondition, map)) {
  568. if (hasExtra) {
  569. if (Objects.equals(map.get(key), extraMap.get(key))) dataInterfaceList.add(map);
  570. } else {
  571. dataInterfaceList.add(map);
  572. }
  573. }
  574. }
  575. } else {
  576. for (Map<String, Object> map : dataRes) {
  577. if (hasExtra) {
  578. if (Objects.equals(map.get(key), extraMap.get(key))) dataInterfaceList.add(map);
  579. } else {
  580. dataInterfaceList.add(map);
  581. }
  582. }
  583. }
  584. return dataInterfaceList;
  585. }
  586. /**
  587. * 判断两个map有相同key-value
  588. *
  589. * @return
  590. * @copyright 引迈信息技术有限公司
  591. * @date 2023/1/5
  592. */
  593. public static boolean mapCompar(List<FieLdsModel> searchList, Map<String, Object> hashMap2) {
  594. boolean isChange = false;
  595. for (FieLdsModel item : searchList) {
  596. String realValue = hashMap2.get(item.getVModel()) == null ? "" : (String) hashMap2.get(item.getVModel());
  597. switch (item.getSearchType()) {
  598. case 2:
  599. if (realValue.indexOf(item.getFieldValue()) >= 0) {
  600. isChange = true;
  601. }
  602. break;
  603. case 3://between
  604. List<String> longList = new ArrayList() {{
  605. add(JnpfKeyConsts.NUM_INPUT);
  606. add(JnpfKeyConsts.DATE);
  607. add(JnpfKeyConsts.DATE_CALCULATE);
  608. }};
  609. if (longList.contains(item.getConfig().getJnpfKey())) {
  610. Long valueLong = Long.parseLong(realValue);
  611. Long valueLongOne = (Long) item.getFieldValueOne();
  612. Long valueLongTwo = (Long) item.getFieldValueTwo();
  613. if (valueLong >= valueLongOne && valueLong <= valueLongTwo) {
  614. isChange = true;
  615. }
  616. } else {
  617. String valueLongOne = (String) item.getFieldValueOne();
  618. String valueLongTwo = (String) item.getFieldValueTwo();
  619. if (realValue.compareTo(valueLongOne) >= 0 && realValue.compareTo(valueLongTwo) <= 0) {
  620. isChange = true;
  621. }
  622. }
  623. break;
  624. case 4://包含
  625. List<String> dataList = item.getDataList();
  626. for (String value : dataList) {
  627. isChange = value.indexOf(realValue) >= 0;
  628. }
  629. if (isChange) {
  630. return true;
  631. }
  632. break;
  633. default://1,其他条件都按等于查询
  634. isChange = item.getFieldValue().equals(realValue);
  635. break;
  636. }
  637. }
  638. return isChange;
  639. }
  640. /**
  641. * 获取所有有使用的表
  642. *
  643. * @return
  644. */
  645. public static List<String> getAllTableName(List<ColumnListField> modelList, List<SuperJsonModel> listQuery, Map<String, String> fieldTableMap) {
  646. List<String> list = new ArrayList<>();
  647. for (ColumnListField item : modelList) {
  648. String table = StringUtil.isNotEmpty(item.getConfig().getRelationTable()) ?
  649. item.getConfig().getRelationTable() : item.getConfig().getTableName();
  650. if (StringUtil.isBlank(table)) {
  651. table = fieldTableMap.get(item.getConfig().getParentVModel());
  652. }
  653. list.add(table);
  654. }
  655. for (SuperJsonModel superJsonModel : listQuery) {
  656. if (superJsonModel.getConditionList() != null && superJsonModel.getConditionList().size() > 0) {
  657. List<SuperQueryJsonModel> conditionList = superJsonModel.getConditionList();
  658. for (SuperQueryJsonModel sqj : conditionList) {
  659. if (sqj.getGroups() != null && sqj.getGroups().size() > 0) {
  660. List<FieLdsModel> groups = sqj.getGroups();
  661. for (FieLdsModel item : groups) {
  662. String table = StringUtil.isNotEmpty(item.getConfig().getRelationTable()) ?
  663. item.getConfig().getRelationTable() : item.getConfig().getTableName();
  664. list.add(table);
  665. }
  666. }
  667. }
  668. }
  669. }
  670. return list.stream().distinct().collect(Collectors.toList());
  671. }
  672. /**
  673. * 递归控件(取出所有子集=-字段不变)
  674. *
  675. * @return
  676. */
  677. public static void getAllFields(List<FieLdsModel> allFields, List<FieLdsModel> fieLdsModelList) {
  678. for (FieLdsModel fieLdsModel : fieLdsModelList) {
  679. ConfigModel config = fieLdsModel.getConfig();
  680. String jnpfKey = config.getJnpfKey();
  681. if (JnpfKeyConsts.CHILD_TABLE.equals(jnpfKey)) {
  682. allFields.addAll(config.getChildren());
  683. } else {
  684. if (config.getChildren() != null) {
  685. getAllFields(allFields, config.getChildren());
  686. } else {
  687. if (StringUtil.isNotEmpty(fieLdsModel.getVModel())) {
  688. allFields.add(fieLdsModel);
  689. }
  690. }
  691. }
  692. }
  693. }
  694. }