DataSetServiceImpl.java 53 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166
  1. package jnpf.base.service.impl;
  2. import cn.hutool.core.date.LocalDateTimeUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.baomidou.dynamic.datasource.annotation.DSTransactional;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.github.vertical_blank.sqlformatter.SqlFormatter;
  8. import com.google.common.collect.ImmutableList;
  9. import jnpf.base.ActionResult;
  10. import jnpf.base.ActionResultCode;
  11. import jnpf.base.UserInfo;
  12. import jnpf.base.entity.DataInterfaceEntity;
  13. import jnpf.base.entity.DataSetEntity;
  14. import jnpf.base.mapper.DataSetMapper;
  15. import jnpf.base.model.datainterface.*;
  16. import jnpf.base.model.dataset.*;
  17. import jnpf.base.service.DataInterfaceService;
  18. import jnpf.base.service.DataSetService;
  19. import jnpf.base.service.DbLinkService;
  20. import jnpf.base.service.SuperServiceImpl;
  21. import jnpf.base.util.DataInterfaceParamUtil;
  22. import jnpf.base.util.dataSet.DataSetConfigUtil;
  23. import jnpf.base.util.result.ResultStrategy;
  24. import jnpf.constant.*;
  25. import jnpf.database.model.dbfield.DbFieldModel;
  26. import jnpf.database.model.dbfield.JdbcColumnModel;
  27. import jnpf.database.model.dto.PrepSqlDTO;
  28. import jnpf.database.model.entity.DbLinkEntity;
  29. import jnpf.database.source.DbBase;
  30. import jnpf.database.sql.util.SqlFastUtil;
  31. import jnpf.database.util.ConnUtil;
  32. import jnpf.database.util.DbTypeUtil;
  33. import jnpf.database.util.DynamicDataSourceUtil;
  34. import jnpf.database.util.JdbcUtil;
  35. import jnpf.emnus.DsJoinTypeEnum;
  36. import jnpf.emnus.SearchMethodEnum;
  37. import jnpf.exception.DataException;
  38. import jnpf.model.SystemParamModel;
  39. import jnpf.model.visualJson.FieLdsModel;
  40. import jnpf.model.visualJson.config.ConfigModel;
  41. import jnpf.permission.entity.OrganizeEntity;
  42. import jnpf.permission.entity.PositionEntity;
  43. import jnpf.permission.entity.UserEntity;
  44. import jnpf.permission.entity.UserRelationEntity;
  45. import jnpf.permission.service.*;
  46. import jnpf.util.*;
  47. import jnpf.util.treeutil.SumTree;
  48. import jnpf.util.visiual.JnpfKeyConsts;
  49. import lombok.Cleanup;
  50. import lombok.SneakyThrows;
  51. import oracle.sql.TIMESTAMP;
  52. import org.apache.commons.collections4.CollectionUtils;
  53. import org.apache.ibatis.exceptions.PersistenceException;
  54. import org.springframework.beans.factory.annotation.Autowired;
  55. import org.springframework.stereotype.Service;
  56. import java.io.Reader;
  57. import java.math.BigDecimal;
  58. import java.sql.Clob;
  59. import java.sql.Connection;
  60. import java.sql.SQLSyntaxErrorException;
  61. import java.sql.Timestamp;
  62. import java.time.LocalDateTime;
  63. import java.util.*;
  64. import java.util.stream.Collectors;
  65. /**
  66. * 数据集合
  67. *
  68. * @author JNPF开发平台组
  69. * @version v5.0.0
  70. * @copyright 引迈信息技术有限公司
  71. * @date 2024/5/6 14:07:11
  72. */
  73. @Service
  74. public class DataSetServiceImpl extends SuperServiceImpl<DataSetMapper, DataSetEntity> implements DataSetService {
  75. @Autowired
  76. List<ResultStrategy> resultStrategyList;
  77. @Autowired
  78. private OrganizeService organizeApi;
  79. @Autowired
  80. private UserService userApi;
  81. @Autowired
  82. private UserRelationService userRelationApi;
  83. @Autowired
  84. private OrganizeAdministratorService organizeAdminTratorApi;
  85. @Autowired
  86. private DbLinkService dbLinkService;
  87. @Autowired
  88. private DataInterfaceService dataInterfaceService;
  89. @Autowired
  90. private PositionService positionApi;
  91. @Override
  92. public List<DataSetEntity> getList(DataSetPagination pagination) {
  93. QueryWrapper<DataSetEntity> queryWrapper = new QueryWrapper<>();
  94. if (StringUtil.isNotEmpty(pagination.getKeyword())) {
  95. queryWrapper.lambda().like(DataSetEntity::getFullName, pagination.getKeyword());
  96. }
  97. if (StringUtil.isNotEmpty(pagination.getObjectType())) {
  98. queryWrapper.lambda().eq(DataSetEntity::getObjectType, pagination.getObjectType());
  99. }
  100. if (StringUtil.isNotEmpty(pagination.getObjectId())) {
  101. queryWrapper.lambda().eq(DataSetEntity::getObjectId, pagination.getObjectId());
  102. }
  103. queryWrapper.lambda().orderByAsc(DataSetEntity::getCreatorTime);
  104. return list(queryWrapper);
  105. }
  106. @Override
  107. public void create(List<DataSetForm> listSet, String ObjectType, String ObjectId) {
  108. QueryWrapper<DataSetEntity> queryWrapper = new QueryWrapper<>();
  109. queryWrapper.lambda().eq(DataSetEntity::getObjectType, ObjectType);
  110. queryWrapper.lambda().eq(DataSetEntity::getObjectId, ObjectId);
  111. List<DataSetEntity> list = list(queryWrapper);
  112. if (CollectionUtils.isNotEmpty(listSet)) {
  113. List<String> nameList = listSet.stream().map(DataSetForm::getFullName).distinct().collect(Collectors.toList());
  114. if (listSet.size() != nameList.size()) {
  115. throw new DataException(MsgCode.SYS046.get());
  116. }
  117. List<String> collect = listSet.stream().map(DataSetForm::getId).collect(Collectors.toList());
  118. for (DataSetEntity entity : list) {
  119. if (!collect.contains(entity.getId())) {
  120. this.removeById(entity.getId());
  121. }
  122. }
  123. for (DataSetForm item : listSet) {
  124. item.setObjectType(ObjectType);
  125. item.setObjectId(ObjectId);
  126. DataSetEntity entity = JsonUtil.getJsonToBean(item, DataSetEntity.class);
  127. if (StringUtil.isNotEmpty(item.getId()) && this.getById(item.getId()) != null) {
  128. entity.setLastModifyUserId(UserProvider.getUser().getUserId());
  129. entity.setLastModifyTime(new Date());
  130. } else {
  131. entity.setId(RandomUtil.uuId());
  132. entity.setCreatorUserId(UserProvider.getUser().getUserId());
  133. entity.setCreatorTime(new Date());
  134. }
  135. this.setIgnoreLogicDelete().removeById(entity.getId());
  136. this.setIgnoreLogicDelete().saveOrUpdate(entity);
  137. this.clearIgnoreLogicDelete();
  138. }
  139. } else {
  140. this.remove(queryWrapper);
  141. }
  142. }
  143. @FunctionalInterface
  144. private interface MultiConsumer<T, S, U> {
  145. void accept(T t, S s, U u);
  146. }
  147. @Override
  148. @DSTransactional
  149. public SumTree<TableTreeModel> getTabFieldStruct(DataSetEntity item) throws Exception {
  150. //配置式
  151. if (Objects.equals(item.getType(), 3)) {
  152. return getInterfaceFields(item);
  153. }
  154. //配置式
  155. if (Objects.equals(item.getType(), 2)) {
  156. return getConfigureSQL(item);
  157. }
  158. //SQL语句
  159. TableTreeModel printTable = new TableTreeModel();
  160. if (StringUtil.isNotEmpty(ParameterUtil.checkContainsSensitive(item.getDataConfigJson(), DbSensitiveConstant.PRINT_SENSITIVE))) {
  161. throw new DataException(MsgCode.SYS047.get());
  162. }
  163. MultiConsumer<DataSetEntity, List<List<JdbcColumnModel>>, DbLinkEntity> consumer = (dataSetEntity, dataList, dbLinkEntity) -> {
  164. Set<String> tableNameSet = new HashSet<>();
  165. String parentId = dataSetEntity.getId();
  166. String headTable = dataSetEntity.getFullName();
  167. printTable.setId(parentId);
  168. printTable.setChildren(treeSetField(tableNameSet, dbLinkEntity, dataList.get(0), parentId));
  169. printTable.setFullName(headTable);
  170. printTable.setParentId("struct");
  171. };
  172. sqlCommon(item, consumer, new HashMap<>(), true);
  173. return printTable;
  174. }
  175. public List<SumTree<TableTreeModel>> treeSetField(Set<String> tableNameSet, DbLinkEntity dbLinkEntity, List<JdbcColumnModel> dbJdbcModelList, String parentId) {
  176. List<SumTree<TableTreeModel>> list = new ArrayList<>();
  177. for (Map<String, String> mapOne : getFieldMap(dbLinkEntity, dbJdbcModelList, tableNameSet)) {
  178. TableTreeModel fieldModel = new TableTreeModel();
  179. fieldModel.setId(mapOne.get("field"));
  180. fieldModel.setFullName(mapOne.get("fieldName"));
  181. fieldModel.setLabel(mapOne.get("comment"));
  182. fieldModel.setParentId(parentId);
  183. list.add(fieldModel);
  184. }
  185. return list;
  186. }
  187. private List<Map<String, String>> getFieldMap(DbLinkEntity dbLinkEntity, List<JdbcColumnModel> dbJdbcModelList, Set<String> tableNameSet) {
  188. List<Map<String, String>> mapList = new ArrayList<>();
  189. // JdbcTableModel tableComment = null;
  190. Map<String, List<DbFieldModel>> tableFiledsMap = new HashMap<>();
  191. if (CollectionUtils.isNotEmpty(dbJdbcModelList)) {
  192. // 部分数据库,无法从元数据中查出表、字段注释,比如Oracle
  193. // tableComment = PrintDevUtil.getColumnComment(dbLinkEntity, dbJdbcModelList.get(0).getTable());
  194. try {
  195. for (JdbcColumnModel jdbcColumnModel : dbJdbcModelList) {
  196. if (StringUtil.isNotBlank(jdbcColumnModel.getTable()) && !tableFiledsMap.containsKey(jdbcColumnModel.getTable())) {
  197. tableFiledsMap.put(jdbcColumnModel.getTable(), SqlFastUtil.getFieldList(dbLinkEntity, jdbcColumnModel.getTable()));
  198. }
  199. }
  200. } catch (Exception e) {
  201. throw new RuntimeException(e);
  202. }
  203. }
  204. for (JdbcColumnModel model : dbJdbcModelList) {
  205. // 获取表名
  206. Map<String, String> map = new HashMap<>();
  207. String tableInfo = model.getTable();
  208. String fieldInfo = model.getField();
  209. String comment = "";
  210. List<DbFieldModel> dbFieldModels = tableFiledsMap.get(tableInfo);
  211. if (CollectionUtils.isNotEmpty(dbFieldModels)) {
  212. String columnComment = "";
  213. for (DbFieldModel column : dbFieldModels) {
  214. if (column.getField().equalsIgnoreCase(fieldInfo)) {
  215. columnComment = column.getFieldName();
  216. }
  217. }
  218. fieldInfo = fieldInfo + " (" + columnComment + ")";
  219. comment = columnComment;
  220. }
  221. tableNameSet.add(tableInfo); // 表名
  222. map.put("fieldName", fieldInfo);// 表字段
  223. map.put("field", model.getLabel());
  224. map.put("comment", comment);
  225. mapList.add(map);
  226. }
  227. return mapList;
  228. }
  229. public void sqlCommon(DataSetEntity dataSetEntity, MultiConsumer<DataSetEntity, List<List<JdbcColumnModel>>, DbLinkEntity> consumer, Map<String, Object> params, boolean isFieldStruct) throws Exception {
  230. DbLinkEntity dbLinkEntity = dbLinkService.getResource(dataSetEntity.getDbLinkId());
  231. //转换json
  232. List<Object> values = new ArrayList<>();
  233. String sql = replaceSql(dataSetEntity.getDataConfigJson(), dataSetEntity.getParameterJson(), params, values);
  234. List<List<JdbcColumnModel>> dataList;
  235. String addition;
  236. try {
  237. if (DbTypeUtil.checkOracle(dbLinkEntity)) {
  238. addition = "SELECT major.* FROM\n" +
  239. "\t(SELECT 1 from dual) temp\n" +
  240. "LEFT JOIN \n" +
  241. " \t({sql}) major\n" +
  242. "ON \n" +
  243. "\t1 = 1";
  244. } else {
  245. addition = "SELECT major.* FROM\n" +
  246. "\t(SELECT 1 AS tempColumn) AS temp\n" +
  247. "LEFT JOIN \n" +
  248. " \t({sql}) AS major\n" +
  249. "ON \n" +
  250. "\t1 = 1";
  251. }
  252. boolean isFunction = StringUtil.isNotEmpty(sql) && sql.toLowerCase().startsWith("call");//判断是否存储过程
  253. //isFieldStruct 获取结构时才走sql替换
  254. sql = isFunction || !isFieldStruct ? sql : addition.replace("{sql}", sql);
  255. dataList = JdbcUtil.queryJdbcColumns(new PrepSqlDTO(sql, values).withConn(dbLinkEntity)).get();
  256. if (dataList.isEmpty()) {
  257. dataList = (JdbcUtil.queryJdbcColumns(new PrepSqlDTO(sql, values).withConn(dbLinkEntity)).setIsValue(false).get());
  258. }
  259. } catch (Exception e) {
  260. throw new DataException(MsgCode.PRI007.get());
  261. }
  262. if (dataList.isEmpty()) {
  263. throw new DataException(MsgCode.PRI004.get());
  264. }
  265. consumer.accept(dataSetEntity, dataList, dbLinkEntity);
  266. }
  267. @SneakyThrows
  268. @Override
  269. @DSTransactional
  270. public Map<String, Object> getDataMapOrList(DataSetEntity entity, Map<String, Object> params, String formId, boolean outIsMap) {
  271. Map<String, Object> printDataMap = new HashMap<>();
  272. DataSetForm dataSetForm = JsonUtil.getJsonToBean(entity, DataSetForm.class);
  273. dataSetForm.setFormId(formId);
  274. //数据接口
  275. if (Objects.equals(entity.getType(), 3)) {
  276. try {
  277. dataSetForm.setNoPage(true);
  278. DataSetViewInfo previewDataInterface = getPreviewDataInterface(dataSetForm);
  279. if (outIsMap) {
  280. printDataMap.put(entity.getFullName(), previewDataInterface.getPreviewData().get(0));
  281. } else {
  282. printDataMap.put(entity.getFullName(), previewDataInterface.getPreviewData());
  283. }
  284. } catch (Exception e) {
  285. e.printStackTrace();
  286. }
  287. return printDataMap;
  288. }
  289. //配置式 获取数据
  290. if (Objects.equals(entity.getType(), 2)) {
  291. dataSetForm.setNoPage(true);
  292. List<Map<String, Object>> previewData = getPreviewData(dataSetForm).getPreviewData();
  293. if (outIsMap) {
  294. printDataMap.put(entity.getFullName(), previewData.get(0));
  295. } else {
  296. printDataMap.put(entity.getFullName(), previewData);
  297. }
  298. return printDataMap;
  299. }
  300. //sql语句获取数据
  301. try {
  302. MultiConsumer<DataSetEntity, List<List<JdbcColumnModel>>, DbLinkEntity> consumer = (dataSetEntity, dataList, dbLinkEntity) -> {
  303. List<Map<String, Object>> lists = swapData(dataList);
  304. if (outIsMap) {
  305. printDataMap.put(dataSetEntity.getFullName(), lists.get(0));
  306. } else {
  307. printDataMap.put(dataSetEntity.getFullName(), lists);
  308. }
  309. };
  310. params.put("@formId", formId);
  311. sqlCommon(entity, consumer, params, false);
  312. } catch (Exception e) {
  313. log.error(e.getMessage());
  314. // throw new Exception(e.getMessage());
  315. }
  316. return printDataMap;
  317. }
  318. @Override
  319. public Map<String, Object> getDataList(DataSetQuery query) {
  320. Map<String, Object> dataMapOrList = new HashMap<>();
  321. List<FieLdsModel> queryList = StringUtil.isNotEmpty(query.getQueryList()) ? JsonUtil.getJsonToList(query.getQueryList(), FieLdsModel.class) : new ArrayList<>();
  322. List<DataSetEntity> dataSetList = getList(new DataSetPagination(query.getType(), query.getId()));
  323. Map<String, Object> queryMap = query.getMap() != null ? query.getMap() : new HashMap<>();
  324. Map<String, Map<String, FieLdsModel>> queryData = new HashMap<>();
  325. for (String key : queryMap.keySet()) {
  326. String vModel = key.replace("-", ".");
  327. String[] name = key.split("-");
  328. String model = name[0];
  329. Map<String, FieLdsModel> fieLdsModelMap = queryData.get(model) != null ? queryData.get(model) : new HashMap<>();
  330. FieLdsModel fieLdsModel = queryList.stream().filter(t -> Objects.equals(t.getVModel(), vModel)).findFirst().orElse(null);
  331. if (fieLdsModel != null) {
  332. fieLdsModelMap.put(key, fieLdsModel);
  333. }
  334. queryData.put(model, fieLdsModelMap);
  335. }
  336. for (DataSetEntity item : dataSetList) {
  337. Map<String, Object> map = new HashMap<>();
  338. Map<String, FieLdsModel> fieLdMap = queryData.get(item.getFullName()) != null ? queryData.get(item.getFullName()) : new HashMap<>();
  339. boolean isInterfaceSql = true;
  340. boolean ss = Objects.equals(item.getType(), 2);
  341. if (Objects.equals(item.getType(), 2)) {
  342. DataSetForm dataSetForm = JsonUtil.getJsonToBean(item, DataSetForm.class);
  343. dataSetForm.setFormId(query.getFormId());
  344. String previewSqlText = getPreviewData(dataSetForm).getPreviewSqlText();
  345. item.setDataConfigJson(previewSqlText);
  346. item.setType(1);
  347. }
  348. if (Objects.equals(item.getType(), 3)) {
  349. DataInterfaceEntity info = dataInterfaceService.getInfo(item.getInterfaceId());
  350. isInterfaceSql = info != null && Objects.equals(info.getType(), 1);
  351. if (info != null && Objects.equals(info.getType(), 1)) {
  352. if (StringUtil.isNotEmpty(item.getParameterJson())) {
  353. List<DataInterfaceModel> jsonToList = JsonUtil.getJsonToList(item.getParameterJson(), DataInterfaceModel.class);
  354. Map<String, String> dataMap = new HashMap<>();
  355. dataInterfaceService.paramSourceTypeReplaceValue(jsonToList, dataMap);
  356. map.putAll(dataMap);
  357. }
  358. DataConfigJsonModel configJsonModel = JsonUtil.getJsonToBean(info.getDataConfigJson(), DataConfigJsonModel.class);
  359. SqlDateModel countSqlDateModel = JsonUtil.getJsonToBean(configJsonModel.getSqlData(), SqlDateModel.class);
  360. item.setDbLinkId(countSqlDateModel.getDbLinkId());
  361. item.setDataConfigJson(countSqlDateModel.getSql());
  362. item.setType(1);
  363. }
  364. }
  365. //sql语句
  366. if (Objects.equals(item.getType(), 1)) {
  367. if (!fieLdMap.isEmpty()) {
  368. int num = 0;
  369. String sql = item.getDataConfigJson();
  370. DataSetEntity queryEntity = new DataSetEntity();
  371. queryEntity.setDataConfigJson("select * from (" + sql + ") t where 1=1 ");
  372. queryEntity.setDbLinkId(item.getDbLinkId());
  373. for (String key : fieLdMap.keySet()) {
  374. FieLdsModel fieLdsModel = fieLdMap.get(key);
  375. if (fieLdsModel != null) {
  376. String[] name = key.split("-");
  377. String model = name.length > 1 ? name[1] : name[0];
  378. keyJson(fieLdsModel, model, queryMap.get(key));
  379. num = value(fieLdsModel, queryEntity, model, num, map);
  380. }
  381. }
  382. item.setDataConfigJson(queryEntity.getDataConfigJson());
  383. }
  384. }
  385. Map<String, Object> dataList = new HashMap<>();
  386. Map<String, Object> dataMapOrList1 = getDataMapOrList(item, map, null, false);
  387. for (String key : dataMapOrList1.keySet()) {
  388. try {
  389. List<Map<String, Object>> data = (List<Map<String, Object>>) dataMapOrList1.get(key);
  390. List<FieLdsModel> queryCondition = new ArrayList<>(fieLdMap.values());
  391. List<Map<String, Object>> interfaceData = new ArrayList<>();
  392. if (!queryCondition.isEmpty() && !isInterfaceSql) {
  393. for (Map<String, Object> dataMap : data) {
  394. boolean hasExtra = mapCompar(queryCondition, dataMap);
  395. if (hasExtra) {
  396. interfaceData.add(dataMap);
  397. }
  398. }
  399. dataList.put(key, interfaceData);
  400. } else if (ss) {
  401. //处理条件
  402. DataSetForm dataSetForm = JsonUtil.getJsonToBean(item, DataSetForm.class);
  403. data = getFilterResult(dataSetForm, data);
  404. dataList.put(key, data);
  405. } else {
  406. dataList.put(key, data);
  407. }
  408. } catch (Exception e) {
  409. e.printStackTrace();
  410. }
  411. }
  412. dataMapOrList.putAll(dataList);
  413. }
  414. return dataMapOrList;
  415. }
  416. private List<Map<String, Object>> swapData(List<List<JdbcColumnModel>> dbJdbcModelList) {
  417. List<Map<String, Object>> mapList = new ArrayList<>();
  418. for (List<JdbcColumnModel> mods : dbJdbcModelList) {
  419. Map<String, Object> map = new HashMap<>(16);
  420. for (JdbcColumnModel mod : mods) {
  421. Object value = mod.getValue();
  422. if (value != null) {
  423. value = swapColumn(value, mod);
  424. } else {
  425. value = "";
  426. }
  427. map.put(mod.getLabel(), value);
  428. }
  429. mapList.add(map);
  430. }
  431. return mapList;
  432. }
  433. private String replaceSql(String sql, String paramJson, Map<String, Object> params, List<Object> values) {
  434. Map<String, Object> map = new HashMap<>();
  435. for (String key : params.keySet()) {
  436. map.put(key, params.get(key));
  437. }
  438. // 系统内置参数替换
  439. Map<Double, DataInterfaceMarkModel> systemParameter = dataInterfaceService.systemParameterOne(sql, UserProvider.getUser());
  440. if (sql.contains(DataInterfaceVarConst.FORM_ID)) {
  441. DataInterfaceParamUtil.getParamModel(systemParameter, sql, DataInterfaceVarConst.FORM_ID, params.get(DataInterfaceVarConst.FORM_ID));
  442. }
  443. // 自定义参数替换
  444. sql = dataInterfaceService.customizationParameter(paramJson, sql, map, systemParameter);
  445. // 参数替换为占位符
  446. sql = dataInterfaceService.getHandleArraysSql(sql, values, systemParameter);
  447. return sql;
  448. }
  449. private Object swapColumn(Object obj, JdbcColumnModel mod) {
  450. // if (mod.getDataType().equalsIgnoreCase("decimal")) {
  451. // assert obj instanceof BigDecimal;
  452. // return ((BigDecimal) obj).toPlainString();
  453. // }
  454. if (obj instanceof Clob) {
  455. Clob clob = (Clob) obj;
  456. StringBuilder sb = new StringBuilder();
  457. // 获取CLOB字段的内容长度
  458. int length = 0;
  459. // 以流的形式读取CLOB字段的内容
  460. try (Reader reader = clob.getCharacterStream()) {
  461. length = (int) clob.length();
  462. char[] buffer = new char[length];
  463. int bytesRead;
  464. // 逐个字符读取并添加到字符串构建器中
  465. while ((bytesRead = reader.read(buffer)) != -1) {
  466. sb.append(buffer, 0, bytesRead);
  467. }
  468. } catch (Exception e) {
  469. e.printStackTrace();
  470. }
  471. if (StringUtil.isNotEmpty(sb.toString())) {
  472. return sb.toString();
  473. }
  474. } else if (obj instanceof LocalDateTime || obj instanceof Timestamp || obj instanceof TIMESTAMP) {
  475. LocalDateTime dateTime = null;
  476. if (obj instanceof LocalDateTime) {
  477. dateTime = (LocalDateTime) obj;
  478. } else if (obj instanceof Timestamp) {
  479. dateTime = ((Timestamp) obj).toLocalDateTime();
  480. } else {
  481. dateTime = LocalDateTimeUtil.of(cn.hutool.core.date.DateUtil.parse(obj.toString()));
  482. }
  483. return dateTime != null ? new Date(DateUtil.localDateTime2Millis(dateTime)) : obj;
  484. }
  485. return obj;
  486. }
  487. private void keyJson(FieLdsModel fieLdsModel, String key, Object object) {
  488. convertUserSelectData(fieLdsModel);
  489. //封装查询
  490. ConfigModel config = fieLdsModel.getConfig();
  491. Integer searchType = fieLdsModel.getSearchType();
  492. config.setJnpfKey(fieLdsModel.getType());
  493. String jnpfKey = config.getJnpfKey();
  494. //模糊搜索
  495. boolean isMultiple = fieLdsModel.getSearchMultiple() || fieLdsModel.getMultiple();
  496. List<String> type = JnpfKeyConsts.SelectIgnore;
  497. //文本框搜索
  498. List<String> base = JnpfKeyConsts.BaseSelect;
  499. if (isMultiple || type.contains(jnpfKey)) {
  500. if (object instanceof String) {
  501. object = ImmutableList.of(object);
  502. }
  503. searchType = 4;
  504. }
  505. if (base.contains(jnpfKey) && searchType == 3) {
  506. searchType = 2;
  507. }
  508. String symbol = searchType == 1 ? SearchMethodEnum.Equal.getSymbol() : searchType == 3 ? SearchMethodEnum.Between.getSymbol() : searchType == 2 ? SearchMethodEnum.Like.getSymbol() : SearchMethodEnum.Included.getSymbol();
  509. fieLdsModel.setSymbol(symbol);
  510. if (object instanceof List) {
  511. fieLdsModel.setFieldValue(JsonUtil.getObjectToString(object));
  512. } else {
  513. fieLdsModel.setFieldValue(String.valueOf(object));
  514. }
  515. //封装数据
  516. List<String> dateControl = JnpfKeyConsts.DateSelect;
  517. dateControl.add("date");
  518. List<String> numControl = JnpfKeyConsts.NumSelect;
  519. List<String> dataList = new ArrayList<>();
  520. String value = fieLdsModel.getFieldValue();
  521. Object fieldValue = fieLdsModel.getFieldValue();
  522. Object fieldValueTwo = fieLdsModel.getFieldValue();
  523. if (fieLdsModel.getFieldValue() == null) {
  524. fieldValue = "";
  525. }
  526. ArrayList controlList = new ArrayList() {{
  527. addAll(numControl);
  528. addAll(dateControl);
  529. add(JnpfKeyConsts.TIME);
  530. add("time");
  531. }};
  532. //处理数据
  533. if (controlList.contains(jnpfKey) && StringUtil.isNotEmpty(value)
  534. && !SearchMethodEnum.Like.getSymbol().equals(fieLdsModel.getSymbol())) {
  535. int num = 0;
  536. List<String> data = new ArrayList<>();
  537. try {
  538. data.addAll(JsonUtil.getJsonToList(value, String.class));
  539. } catch (Exception e) {
  540. data.add(value);
  541. data.add(value);
  542. }
  543. String valueOne = data.get(0);
  544. String valueTwo = data.get(1);
  545. //数字
  546. if (numControl.contains(jnpfKey)) {
  547. fieldValue = valueOne != null ? new BigDecimal(valueOne) : valueOne;
  548. fieldValueTwo = valueTwo != null ? new BigDecimal(valueTwo) : valueTwo;
  549. num++;
  550. }
  551. //日期
  552. if (dateControl.contains(jnpfKey)) {
  553. fieldValue = new Date();
  554. fieldValueTwo = new Date();
  555. if (ObjectUtil.isNotEmpty(valueOne)) {
  556. fieldValue = new Date(Long.parseLong(valueOne));
  557. }
  558. if (ObjectUtil.isNotEmpty(valueTwo)) {
  559. fieldValueTwo = new Date(Long.parseLong(valueTwo));
  560. }
  561. num++;
  562. }
  563. if (num == 0) {
  564. fieldValue = valueOne;
  565. fieldValueTwo = valueTwo;
  566. }
  567. }
  568. try {
  569. List<List<String>> list = JsonUtil.getJsonToBean(value, List.class);
  570. Set<String> dataAll = new HashSet<>();
  571. for (int i = 0; i < list.size(); i++) {
  572. List<String> list1 = new ArrayList<>();
  573. for (int k = 0; k < list.get(i).size(); k++) {
  574. list1.add(list.get(i).get(k));
  575. }
  576. dataAll.add(JSONArray.toJSONString(list1));
  577. }
  578. dataList = new ArrayList<>(dataAll);
  579. } catch (Exception e) {
  580. try {
  581. Set<String> dataAll = new HashSet<>();
  582. List<String> list = JsonUtil.getJsonToList(value, String.class);
  583. List<String> mast = new ArrayList() {{
  584. add(JnpfKeyConsts.CASCADER);
  585. add(JnpfKeyConsts.ADDRESS);
  586. }};
  587. if (mast.contains(jnpfKey)) {
  588. dataAll.add(JSONArray.toJSONString(list));
  589. } else {
  590. dataAll.addAll(list);
  591. }
  592. dataList.addAll(new ArrayList<>(dataAll));
  593. } catch (Exception e1) {
  594. dataList.add(value);
  595. }
  596. }
  597. switch (jnpfKey) {
  598. case JnpfKeyConsts.POSSELECT:
  599. //包含子岗位
  600. if (Objects.equals(fieLdsModel.getSelectRange(), "2")) {
  601. List<PositionEntity> childList = positionApi.getListByParentIds(dataList);
  602. dataList.addAll(childList.stream().map(PositionEntity::getId).collect(Collectors.toList()));
  603. //包含子孙岗位
  604. } else if (Objects.equals(fieLdsModel.getSelectRange(), "3")) {
  605. List<PositionEntity> childList = positionApi.getProgeny(dataList, 1);
  606. dataList.addAll(childList.stream().map(PositionEntity::getId).collect(Collectors.toList()));
  607. }
  608. break;
  609. case JnpfKeyConsts.COMSELECT:
  610. //包含子组织
  611. if (Objects.equals(fieLdsModel.getSelectRange(), "2")) {
  612. List<OrganizeEntity> childList = organizeApi.getListByParentIds(dataList);
  613. dataList.addAll(childList.stream().map(OrganizeEntity::getId).collect(Collectors.toList()));
  614. //包含子孙组织
  615. } else if (Objects.equals(fieLdsModel.getSelectRange(), "3")) {
  616. List<OrganizeEntity> childList = organizeApi.getProgeny(dataList, 1);
  617. dataList.addAll(childList.stream().map(OrganizeEntity::getId).collect(Collectors.toList()));
  618. }
  619. break;
  620. case JnpfKeyConsts.USERSELECT:
  621. //包含当前用户及下属
  622. if (CollectionUtils.isNotEmpty(dataList)) {
  623. List<String> posIds = userRelationApi.getListByUserIdAll(dataList).stream()
  624. .filter(t -> PermissionConst.POSITION.equals(t.getObjectType()))
  625. .map(UserRelationEntity::getObjectId).collect(Collectors.toList());
  626. if (Objects.equals(fieLdsModel.getSelectRange(), "2")) {
  627. List<UserEntity> childList = userRelationApi.getUserAndSub(posIds, null);
  628. dataList.addAll(childList.stream().map(UserEntity::getId).collect(Collectors.toList()));
  629. //包含子孙用户
  630. } else if (Objects.equals(fieLdsModel.getSelectRange(), "3")) {
  631. List<UserEntity> childList = userRelationApi.getUserProgeny(posIds, null);
  632. dataList.addAll(childList.stream().map(UserEntity::getId).collect(Collectors.toList()));
  633. }
  634. }
  635. break;
  636. }
  637. if (dataList.isEmpty()) {
  638. dataList.add("jnpfNullList");
  639. }
  640. fieLdsModel.setVModel(key);
  641. fieLdsModel.setFieldValueOne(fieldValue);
  642. fieLdsModel.setFieldValueTwo(fieldValueTwo);
  643. fieLdsModel.setDataList(dataList);
  644. }
  645. private void convertUserSelectData(FieLdsModel fieLdsModel) {
  646. List<String> symbolList = ImmutableList.of(SearchMethodEnum.Equal.getSymbol(), SearchMethodEnum.NotEqual.getSymbol());
  647. String jnpfKey = fieLdsModel.getConfig().getJnpfKey();
  648. String fieldValue = fieLdsModel.getFieldValue();
  649. String symbol = fieLdsModel.getSymbol();
  650. if (StringUtil.isNotEmpty(fieldValue) && JnpfKeyConsts.CUSTOMUSERSELECT.equals(jnpfKey)) {
  651. if (!symbolList.contains(symbol)) {
  652. List<String> values = new ArrayList<>();
  653. try {
  654. values = JsonUtil.getJsonToList(fieldValue, String.class);
  655. } catch (Exception ignored) {
  656. }
  657. List<String> dataValues = new ArrayList<>(values);
  658. for (String userVal : values) {
  659. String userValue = userVal.substring(0, userVal.indexOf("--"));
  660. UserEntity userEntity = userApi.getInfo(userValue);
  661. if (userEntity != null) {
  662. dataValues.add(userValue);
  663. //在用户关系表中取出
  664. List<UserRelationEntity> groupRel = Optional.ofNullable(userRelationApi.getListByUserId(userValue, PermissionConst.GROUP)).orElse(new ArrayList<>());
  665. List<UserRelationEntity> orgRel = Optional.ofNullable(userRelationApi.getListByUserId(userValue, PermissionConst.ORGANIZE)).orElse(new ArrayList<>());
  666. List<UserRelationEntity> posRel = Optional.ofNullable(userRelationApi.getListByUserId(userValue, PermissionConst.POSITION)).orElse(new ArrayList<>());
  667. List<UserRelationEntity> roleRel = Optional.ofNullable(userRelationApi.getListByUserId(userValue, PermissionConst.ROLE)).orElse(new ArrayList<>());
  668. if (!groupRel.isEmpty()) {
  669. for (UserRelationEntity split : groupRel) {
  670. dataValues.add(split.getObjectId());
  671. }
  672. }
  673. if (StringUtil.isNotEmpty(userEntity.getOrganizeId())) {
  674. //向上递归 查出所有上级组织
  675. List<String> allUpOrgIDs = new ArrayList<>();
  676. organizeApi.upWardRecursion(allUpOrgIDs, userEntity.getOrganizeId());
  677. dataValues.addAll(allUpOrgIDs);
  678. }
  679. if (!posRel.isEmpty()) {
  680. for (UserRelationEntity split : posRel) {
  681. dataValues.add(split.getObjectId());
  682. }
  683. }
  684. if (!roleRel.isEmpty()) {
  685. for (UserRelationEntity split : roleRel) {
  686. dataValues.add(split.getObjectId());
  687. }
  688. }
  689. }
  690. }
  691. fieLdsModel.setFieldValue(JsonUtil.getObjectToString(dataValues));
  692. }
  693. }
  694. }
  695. private Integer value(FieLdsModel fieLdsModel, DataSetEntity queryEntity, String key, int num, Map<String, Object> map) {
  696. try {
  697. DbLinkEntity linkEntity = dbLinkService.getResource(queryEntity.getDbLinkId());
  698. @Cleanup Connection connection = ConnUtil.getConnOrDefault(linkEntity);
  699. String dbType = connection.getMetaData().getDatabaseProductName().trim();
  700. boolean isSqlServer = "Microsoft SQL Server".equalsIgnoreCase(dbType);
  701. SearchMethodEnum symbol = SearchMethodEnum.getSearchMethod(fieLdsModel.getSymbol());
  702. StringBuilder querySql = new StringBuilder(queryEntity.getDataConfigJson());
  703. String sql = "{" + key + num + "} ";
  704. Object fieldValue = fieLdsModel.getFieldValueOne();
  705. Object fieldValueTwo = fieLdsModel.getFieldValueTwo();
  706. switch (symbol) {
  707. case IsNull:
  708. querySql.append("AND ").append(key).append(" IS NULL ");
  709. break;
  710. case IsNotNull:
  711. querySql.append("AND ").append(key).append(" IS NOT NULL ");
  712. break;
  713. case Equal:
  714. querySql.append("AND ").append(key).append(" = ").append(sql);
  715. map.put(key + num, fieldValue);
  716. num++;
  717. break;
  718. case NotEqual:
  719. querySql.append("AND ").append(key).append(" <> ").append(sql);
  720. map.put(key + num, fieldValue);
  721. num++;
  722. break;
  723. case GreaterThan:
  724. querySql.append("AND ").append(key).append(" > ").append(sql);
  725. map.put(key + num, fieldValue);
  726. num++;
  727. break;
  728. case LessThan:
  729. querySql.append("AND ").append(key).append(" < ").append(sql);
  730. map.put(key + num, fieldValue);
  731. num++;
  732. break;
  733. case GreaterThanOrEqual:
  734. querySql.append("AND ").append(key).append(" >= ").append(sql);
  735. map.put(key + num, fieldValue);
  736. num++;
  737. break;
  738. case LessThanOrEqual:
  739. querySql.append("AND ").append(key).append(" <= ").append(sql);
  740. map.put(key + num, fieldValue);
  741. num++;
  742. break;
  743. case Like:
  744. querySql.append("AND ").append(key).append(" LIKE ").append(sql);
  745. if (isSqlServer) {
  746. fieldValue = String.valueOf(fieldValue).replaceAll("\\[", "[[]");
  747. }
  748. map.put(key + num, "%" + fieldValue + "%");
  749. num++;
  750. break;
  751. case NotLike:
  752. querySql.append("AND ").append(key).append(" NOT LIKE ").append(sql);
  753. if (isSqlServer) {
  754. fieldValue = String.valueOf(fieldValue).replaceAll("\\[", "[[]");
  755. }
  756. map.put(key + num, "%" + fieldValue + "%");
  757. num++;
  758. break;
  759. case Between:
  760. querySql.append("AND ").append(key).append(" BETWEEN ").append(sql);
  761. map.put(key + num, fieldValue);
  762. num++;
  763. String two = "{" + key + num + "} ";
  764. querySql.append(" AND ").append(two);
  765. map.put(key + num, fieldValueTwo);
  766. num++;
  767. break;
  768. case Included:
  769. case NotIncluded:
  770. List<String> dataList = fieLdsModel.getDataList();
  771. querySql.append("AND ( ");
  772. for (int i = 0; i < dataList.size(); i++) {
  773. String value = dataList.get(i);
  774. if (isSqlServer) {
  775. value = String.valueOf(value).replaceAll("\\[", "[[]");
  776. }
  777. boolean isLast = i == dataList.size() - 1;
  778. switch (symbol) {
  779. case Included:
  780. querySql.append(key).append(" LIKE {").append(key).append(num).append("} ");
  781. querySql.append(isLast ? "" : " OR ");
  782. map.put(key + num, "%" + value + "%");
  783. break;
  784. default:
  785. querySql.append(key).append(" NOT LIKE {").append(key).append(num).append("} ");
  786. querySql.append(isLast ? "" : " AND ");
  787. map.put(key + num, "%" + value + "%");
  788. break;
  789. }
  790. num++;
  791. }
  792. querySql.append(" ) ");
  793. break;
  794. }
  795. queryEntity.setDataConfigJson(querySql.toString());
  796. } catch (Exception e) {
  797. e.getMessage();
  798. }
  799. return num;
  800. }
  801. /**
  802. * 获取配置式字段
  803. *
  804. * @param item
  805. * @return
  806. */
  807. private TableTreeModel getConfigureSQL(DataSetEntity item) {
  808. TableTreeModel printTable = new TableTreeModel();
  809. String parentId = item.getId();
  810. String headTable = item.getFullName();
  811. String dbType = null;
  812. try {
  813. DbLinkEntity linkEntity = dbLinkService.getResource(item.getDbLinkId());
  814. @Cleanup Connection connection = ConnUtil.getConnOrDefault(linkEntity);
  815. dbType = DbTypeUtil.getDbEncodeByProductName(connection.getMetaData().getDatabaseProductName().trim());
  816. } catch (Exception e) {
  817. e.printStackTrace();
  818. }
  819. List<DsConfigModel> dsConfigModels = DataSetConfigUtil.analyzeJson(item.getVisualConfigJson(), dbType);
  820. List<DsConfigFields> listDF = new ArrayList<>();
  821. DataSetConfigUtil.getAllFields(dsConfigModels, listDF);
  822. List<SumTree<TableTreeModel>> list = new ArrayList<>();
  823. for (DsConfigFields configFields : listDF) {
  824. TableTreeModel fieldModel = new TableTreeModel();
  825. String fieldAlias = configFields.getFieldAlias();
  826. String filed;
  827. String fieldName;
  828. if (StringUtil.isNotEmpty(fieldAlias)) {
  829. filed = fieldAlias;
  830. fieldName = configFields.getFieldName().replace(configFields.getField(), fieldAlias);
  831. } else {
  832. filed = configFields.getField();
  833. fieldName = configFields.getFieldName();
  834. }
  835. fieldModel.setId(filed);
  836. fieldModel.setFullName(fieldName);
  837. fieldModel.setLabel(fieldName);
  838. list.add(fieldModel);
  839. }
  840. printTable.setId(parentId);
  841. printTable.setChildren(list);
  842. printTable.setFullName(headTable);
  843. printTable.setParentId("struct");
  844. return printTable;
  845. }
  846. @Override
  847. public DataSetViewInfo getPreviewData(DataSetForm dataSetForm) {
  848. DataSetViewInfo dataSetViewInfo = new DataSetViewInfo();
  849. Map<String, String> systemParam = userApi.getSystemFieldValue(new SystemParamModel());
  850. try {
  851. DbLinkEntity linkEntity = dbLinkService.getResource(dataSetForm.getDbLinkId());
  852. DynamicDataSourceUtil.switchToDataSource(linkEntity);
  853. @Cleanup Connection connection = ConnUtil.getConnOrDefault(linkEntity);
  854. String dbType = DbTypeUtil.getDbEncodeByProductName(connection.getMetaData().getDatabaseProductName().trim());
  855. List<Object> values = new ArrayList<>();
  856. List<DsConfigModel> dsConfigModels = DataSetConfigUtil.analyzeJson(dataSetForm.getVisualConfigJson(), dbType);
  857. //字段配置
  858. List<DsConfigFields> listDF = new ArrayList<>();
  859. DataSetConfigUtil.getAllFields(dsConfigModels, listDF);
  860. List<Map<String, String>> previewColumns = new ArrayList<>();
  861. for (DsConfigFields configFields : listDF) {
  862. Map<String, String> map = new HashMap<>();
  863. String fieldAlias = configFields.getFieldAlias();
  864. String filed;
  865. String fieldName;
  866. if (StringUtil.isNotEmpty(fieldAlias)) {
  867. filed = fieldAlias;
  868. fieldName = configFields.getFieldName().replace(configFields.getField(), fieldAlias);
  869. } else {
  870. filed = configFields.getField();
  871. fieldName = configFields.getFieldName();
  872. }
  873. map.put("title", filed);
  874. map.put("label", fieldName);
  875. previewColumns.add(map);
  876. }
  877. String sql = DataSetConfigUtil.assembleSql(dsConfigModels,
  878. DsParamModel.builder().dbType(dbType).values(values).systemParam(systemParam).filterConfigJson(dataSetForm.getFilterConfigJson()).build());
  879. if (DbBase.MYSQL.equals(dbType) && sql.contains(DsJoinTypeEnum.FULL_JOIN.getCode())) {
  880. throw new DataException(MsgCode.SYS129.get());
  881. }
  882. Object[] valueArr = new Object[values.size()];
  883. for (int i = 0; i < values.size(); i++) {
  884. if (values.get(i) instanceof String) {
  885. valueArr[i] = "'" + values.get(i) + "'";
  886. } else {
  887. valueArr[i] = values.get(i);
  888. }
  889. }
  890. String replace = sql.replace("?", "%s");
  891. String sqlValue = String.format(replace, valueArr);
  892. String formatSql = SqlFormatter.format(sqlValue);
  893. // if (!dataSetForm.isNoPage()) {
  894. // PageHelper.startPage(1, 20, false);
  895. // }
  896. String objectToString = JsonUtil.getObjectToStringAsDate(JdbcUtil.queryList(new PrepSqlDTO(sql, values).withConn(linkEntity, null)).setIsAlias(true).get());
  897. List<Map<String, Object>> data = JsonUtil.getJsonToListMap(objectToString);
  898. //结果集筛选
  899. data = getFilterResult(dataSetForm, data);
  900. List<Map<String, Object>> collect = new ArrayList<>();
  901. if (data.size() > 20) {
  902. collect = data.stream().limit(20).collect(Collectors.toList());
  903. } else {
  904. collect = new ArrayList<>(data);
  905. }
  906. dataSetViewInfo.setPreviewSqlText(formatSql);
  907. dataSetViewInfo.setPreviewData(collect);
  908. dataSetViewInfo.setPreviewColumns(previewColumns);
  909. } catch (DataException dataE) {
  910. throw new DataException(dataE.getMessage());
  911. } catch (SQLSyntaxErrorException | PersistenceException sqlE) {
  912. throw new DataException(MsgCode.PRI007.get());
  913. } catch (Exception e) {
  914. log.error(e.getMessage());
  915. } finally {
  916. DynamicDataSourceUtil.clearSwitchDataSource();
  917. }
  918. return dataSetViewInfo;
  919. }
  920. /**
  921. * 结果集筛选
  922. *
  923. * @param dataSetForm 数据配置
  924. * @param data 数据
  925. * @return 返回最终数据
  926. */
  927. private List<Map<String, Object>> getFilterResult(DataSetForm dataSetForm, List<Map<String, Object>> data) {
  928. if (StringUtil.isNotEmpty(dataSetForm.getFilterConfigJson())) {
  929. String filterConfigJson = dataSetForm.getFilterConfigJson();
  930. DataFormModel jsonToBean = JsonUtil.getJsonToBean(filterConfigJson, DataFormModel.class);
  931. if (jsonToBean != null && jsonToBean.getResultFilter() != null) {
  932. data = resultStrategyList.stream()
  933. .filter(it -> it.getChoice().equals(jsonToBean.getResultFilter().toString()))
  934. .collect(Collectors.toList())
  935. .get(0)
  936. .getResults(data, jsonToBean);
  937. }
  938. }
  939. return data;
  940. }
  941. /**
  942. * 获取系统参数
  943. *
  944. * @return
  945. */
  946. public Map<String, Object> getSystemParam(String str, String formId) {
  947. Map<String, Object> map = new HashMap<>();
  948. UserInfo userInfo = UserProvider.getUser();
  949. map.put(DataInterfaceVarConst.FORM_ID, ObjectUtil.isNotEmpty(formId) ? formId : DataInterfaceVarConst.FORM_ID);
  950. //当前用户
  951. String userId = userInfo.getUserId();
  952. map.put(DataInterfaceVarConst.USER, userId);
  953. //当前用户及下属
  954. List<String> subOrganizeIds = new ArrayList<>();
  955. if (null != userInfo.getSubordinateIds() && !userInfo.getSubordinateIds().isEmpty()) {
  956. subOrganizeIds = userInfo.getSubordinateIds();
  957. }
  958. subOrganizeIds.add(userInfo.getUserId());
  959. map.put(DataInterfaceVarConst.USERANDSUB, subOrganizeIds);
  960. //当前组织
  961. String orgId = userInfo.getOrganizeId();
  962. if (StringUtil.isNotEmpty(userInfo.getDepartmentId())) {
  963. orgId = userInfo.getDepartmentId();
  964. }
  965. map.put(DataInterfaceVarConst.ORG, orgId);
  966. //当前组织及子组织
  967. if (str.contains(DataInterfaceVarConst.ORGANDSUB)) {
  968. List<String> underOrganizations = organizeApi.getUnderOrganizations(orgId, false);
  969. underOrganizations.add(orgId);
  970. map.put(DataInterfaceVarConst.ORGANDSUB, underOrganizations);
  971. }
  972. //当前分管组织
  973. if (str.contains(DataInterfaceVarConst.CHARORG)) {
  974. List<String> orgIds = organizeAdminTratorApi.getOrganizeUserList(JnpfConst.CURRENT_ORG_SUB);
  975. map.put(DataInterfaceVarConst.CHARORG, orgIds);
  976. }
  977. return map;
  978. }
  979. /**
  980. * 数据接口获取字段列表
  981. *
  982. * @param item
  983. * @return
  984. */
  985. private TableTreeModel getInterfaceFields(DataSetEntity item) {
  986. TableTreeModel printTable = new TableTreeModel();
  987. String parentId = item.getId();
  988. String headTable = item.getFullName();
  989. DataInterfaceEntity info = dataInterfaceService.getInfo(item.getInterfaceId());
  990. if (info == null) {
  991. throw new DataException(MsgCode.FM001.get());
  992. }
  993. String fieldJson = info.getFieldJson();
  994. if (StringUtil.isEmpty(fieldJson) || "[]".equals(fieldJson)) {
  995. throw new DataException(MsgCode.SYS133.get());
  996. }
  997. List<FieldModel> fieldList = JsonUtil.getJsonToList(fieldJson, FieldModel.class);
  998. List<SumTree<TableTreeModel>> list = new ArrayList<>();
  999. for (FieldModel configFields : fieldList) {
  1000. TableTreeModel fieldModel = new TableTreeModel();
  1001. fieldModel.setId(configFields.getDefaultValue());
  1002. fieldModel.setFullName(configFields.getDefaultValue() + "(" + configFields.getField() + ")");
  1003. fieldModel.setLabel(configFields.getField());
  1004. list.add(fieldModel);
  1005. }
  1006. printTable.setId(parentId);
  1007. printTable.setChildren(list);
  1008. printTable.setFullName(headTable);
  1009. printTable.setParentId("struct");
  1010. return printTable;
  1011. }
  1012. @Override
  1013. public DataSetViewInfo getPreviewDataInterface(DataSetForm dataSetForm) {
  1014. DataSetViewInfo dataSetViewInfo = new DataSetViewInfo();
  1015. DataInterfaceEntity info = dataInterfaceService.getInfo(dataSetForm.getInterfaceId());
  1016. if (info == null) {
  1017. throw new DataException(MsgCode.FM001.get());
  1018. }
  1019. String fieldJson = info.getFieldJson();
  1020. if (StringUtil.isEmpty(fieldJson) || "[]".equals(fieldJson)) {
  1021. throw new DataException(MsgCode.SYS133.get());
  1022. }
  1023. List<FieldModel> fieldList = JsonUtil.getJsonToList(fieldJson, FieldModel.class);
  1024. List<Map<String, String>> previewColumns = new ArrayList<>();
  1025. for (FieldModel configFields : fieldList) {
  1026. Map<String, String> map = new HashMap<>();
  1027. map.put("title", configFields.getDefaultValue());
  1028. map.put("label", configFields.getField());
  1029. previewColumns.add(map);
  1030. }
  1031. List<Map<String, Object>> data = new ArrayList<>();
  1032. try {
  1033. HashMap<String, String> paramMap = new HashMap<>(16);
  1034. if (StringUtil.isNotEmpty(dataSetForm.getParameterJson())) {
  1035. List<DataInterfaceModel> jsonToList = JsonUtil.getJsonToList(dataSetForm.getParameterJson(), DataInterfaceModel.class);
  1036. jsonToList.stream().forEach(t -> {
  1037. if (Objects.equals(t.getSourceType(), 4) && DataInterfaceVarConst.FORM_ID.equals(t.getRelationField())) {
  1038. t.setDefaultValue(dataSetForm.getFormId());
  1039. }
  1040. });
  1041. dataInterfaceService.paramSourceTypeReplaceValue(jsonToList, paramMap);
  1042. }
  1043. ActionResult actionResult = dataInterfaceService.infoToId(dataSetForm.getInterfaceId(), null, paramMap);
  1044. if (ActionResultCode.Success.getCode().equals(actionResult.getCode())) {
  1045. data = (List<Map<String, Object>>) actionResult.getData();
  1046. }
  1047. if (!dataSetForm.isNoPage()) {
  1048. if (data.size() > 20) {
  1049. data = new ArrayList<>(data.subList(0, 20));
  1050. }
  1051. }
  1052. } catch (Exception e) {
  1053. e.printStackTrace();
  1054. throw new DataException(MsgCode.FA037.get());
  1055. }
  1056. dataSetViewInfo.setPreviewData(data);
  1057. dataSetViewInfo.setPreviewColumns(previewColumns);
  1058. return dataSetViewInfo;
  1059. }
  1060. public static boolean mapCompar(List<FieLdsModel> searchList, Map<String, Object> hashMap2) {
  1061. boolean isChange = false;
  1062. for (FieLdsModel item : searchList) {
  1063. String realValue = hashMap2.get(item.getVModel()) == null ? "" : (String) hashMap2.get(item.getVModel());
  1064. switch (item.getSearchType()) {
  1065. case 2:
  1066. if (realValue.indexOf(item.getFieldValue()) >= 0) {
  1067. isChange = true;
  1068. }
  1069. break;
  1070. case 3://between
  1071. List<String> longList = new ArrayList() {{
  1072. add(JnpfKeyConsts.NUM_INPUT);
  1073. add(JnpfKeyConsts.DATE);
  1074. add(JnpfKeyConsts.DATE_CALCULATE);
  1075. }};
  1076. if (longList.contains(item.getConfig().getJnpfKey())) {
  1077. Long valueLong = Long.parseLong(realValue);
  1078. Long valueLongOne = (Long) item.getFieldValueOne();
  1079. Long valueLongTwo = (Long) item.getFieldValueTwo();
  1080. if (valueLong >= valueLongOne && valueLong <= valueLongTwo) {
  1081. isChange = true;
  1082. }
  1083. } else {
  1084. String valueLongOne = (String) item.getFieldValueOne();
  1085. String valueLongTwo = (String) item.getFieldValueTwo();
  1086. if (realValue.compareTo(valueLongOne) >= 0 && realValue.compareTo(valueLongTwo) <= 0) {
  1087. isChange = true;
  1088. }
  1089. }
  1090. break;
  1091. case 4://包含
  1092. List<String> dataList = item.getDataList();
  1093. for (String value : dataList) {
  1094. isChange = value.indexOf(realValue) >= 0;
  1095. }
  1096. if (isChange) {
  1097. return true;
  1098. }
  1099. break;
  1100. default://1,其他条件都按等于查询
  1101. isChange = item.getFieldValue().equals(realValue);
  1102. break;
  1103. }
  1104. }
  1105. return isChange;
  1106. }
  1107. }