FormInfoUtils.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package jnpf.base.util;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import jnpf.database.util.DynamicDataSourceUtil;
  4. import jnpf.model.visualJson.FieLdsModel;
  5. import jnpf.permission.entity.UserEntity;
  6. import jnpf.util.DateUtil;
  7. import jnpf.util.JsonUtil;
  8. import jnpf.util.StringUtil;
  9. import jnpf.util.visiual.JnpfKeyConsts;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Component;
  13. import java.math.BigDecimal;
  14. import java.sql.Clob;
  15. import java.util.*;
  16. import static jnpf.util.Constants.ADMIN_KEY;
  17. /**
  18. * 在线详情编辑工具类
  19. *
  20. * @author JNPF开发平台组
  21. * @version V3.2
  22. * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com)
  23. * @date 2021/10/27
  24. */
  25. @Slf4j
  26. @Component
  27. public class FormInfoUtils {
  28. @Autowired
  29. private ServiceBaseUtil serviceUtil;
  30. /**
  31. * 转换数据格式(编辑页)
  32. *
  33. * @param modelList 控件
  34. * @param dataMap 数据
  35. * @return
  36. */
  37. public Map<String, Object> swapDataInfoType(List<FieLdsModel> modelList, Map<String, Object> dataMap) {
  38. dataMap = Optional.ofNullable(dataMap).orElse(new HashMap<>());
  39. try {
  40. DynamicDataSourceUtil.switchToDataSource(null);
  41. List<String> systemConditions = new ArrayList() {{
  42. add(JnpfKeyConsts.CURRORGANIZE);
  43. add(JnpfKeyConsts.CURRDEPT);
  44. add(JnpfKeyConsts.CURRPOSITION);
  45. }};
  46. List<String> nullIsList = new ArrayList() {{
  47. add(JnpfKeyConsts.UPLOADFZ);
  48. add(JnpfKeyConsts.UPLOADIMG);
  49. }};
  50. for (FieLdsModel swapDataVo : modelList) {
  51. String jnpfKey = swapDataVo.getConfig().getJnpfKey();
  52. String vModel = swapDataVo.getVModel();
  53. //clob字段转换
  54. FormInfoUtils.swapClob(dataMap, vModel);
  55. //获取原字段数据
  56. FormPublicUtils.relationGetJnpfId(dataMap, jnpfKey, dataMap.get(vModel), vModel);
  57. Object value = dataMap.get(vModel);
  58. if (value == null || ObjectUtil.isEmpty(value)) {
  59. if (systemConditions.contains(jnpfKey)) {
  60. dataMap.put(vModel, " ");
  61. }
  62. if (nullIsList.contains(jnpfKey)) {
  63. dataMap.put(vModel, Collections.emptyList());
  64. }
  65. continue;
  66. }
  67. switch (jnpfKey) {
  68. case JnpfKeyConsts.UPLOADFZ:
  69. case JnpfKeyConsts.UPLOADIMG:
  70. //数据传递-乱塞有bug强行置空
  71. List<Map<String, Object>> fileList = new ArrayList<>();
  72. try {
  73. fileList = JsonUtil.getJsonToListMap(dataMap.get(vModel).toString());
  74. } catch (Exception e) {
  75. e.printStackTrace();
  76. }
  77. dataMap.put(vModel, fileList);
  78. break;
  79. case JnpfKeyConsts.DATE:
  80. case JnpfKeyConsts.DATE_CALCULATE:
  81. Long dateTime = DateTimeFormatConstant.getDateObjToLong(dataMap.get(vModel));
  82. dataMap.put(vModel, dateTime != null ? dateTime : dataMap.get(vModel));
  83. break;
  84. case JnpfKeyConsts.CREATETIME:
  85. case JnpfKeyConsts.MODIFYTIME:
  86. String pattern = DateTimeFormatConstant.YEAR_MOnTH_DHMS;
  87. Long time = DateTimeFormatConstant.getDateObjToLong(dataMap.get(vModel));
  88. dataMap.put(vModel, time != null ? DateUtil.dateToString(new Date(time), pattern) : "");
  89. break;
  90. case JnpfKeyConsts.SWITCH:
  91. case JnpfKeyConsts.SLIDER:
  92. case JnpfKeyConsts.RATE:
  93. case JnpfKeyConsts.CALCULATE:
  94. case JnpfKeyConsts.NUM_INPUT:
  95. dataMap.put(vModel, value != null ? new BigDecimal(String.valueOf(value)) : null);
  96. break;
  97. case JnpfKeyConsts.CURRPOSITION:
  98. String posName = serviceUtil.getPositionName(String.valueOf(value));
  99. dataMap.put(vModel, StringUtil.isNotEmpty(posName) ? posName : value);
  100. break;
  101. case JnpfKeyConsts.CREATEUSER:
  102. case JnpfKeyConsts.MODIFYUSER:
  103. UserEntity userEntity = serviceUtil.getUserInfo(String.valueOf(value));
  104. String userValue = Objects.nonNull(userEntity) ? userEntity.getAccount().equalsIgnoreCase(ADMIN_KEY)
  105. ? "管理员/" + ADMIN_KEY : userEntity.getRealName() + "/" + userEntity.getAccount() : String.valueOf(value);
  106. dataMap.put(vModel, userValue);
  107. break;
  108. case JnpfKeyConsts.CURRORGANIZE:
  109. String orgName = serviceUtil.getOrganizeName(String.valueOf(value));
  110. dataMap.put(vModel, StringUtil.isNotEmpty(orgName) ? orgName : value);
  111. break;
  112. case JnpfKeyConsts.COM_INPUT:
  113. if (dataMap.get(vModel) != null) {
  114. dataMap.put(vModel, String.valueOf(dataMap.get(vModel)));
  115. }
  116. break;
  117. default:
  118. dataMap.put(vModel, FormPublicUtils.getDataConversion(value));
  119. break;
  120. }
  121. }
  122. } catch (Exception e) {
  123. throw new RuntimeException(e);
  124. } finally {
  125. DynamicDataSourceUtil.clearSwitchDataSource();
  126. }
  127. return dataMap;
  128. }
  129. public static void swapClob(Map<String, Object> map, String key) {
  130. if (map != null && map.get(key) != null && map.get(key) instanceof Clob) {
  131. Clob clob = (Clob) map.get(key);
  132. StringBuilder sb = new StringBuilder();
  133. // 获取CLOB字段的内容长度
  134. int length = 0;
  135. // 以流的形式读取CLOB字段的内容
  136. try (java.io.Reader reader = clob.getCharacterStream()) {
  137. length = (int) clob.length();
  138. char[] buffer = new char[length];
  139. int bytesRead;
  140. // 逐个字符读取并添加到字符串构建器中
  141. while ((bytesRead = reader.read(buffer)) != -1) {
  142. sb.append(buffer, 0, bytesRead);
  143. }
  144. } catch (Exception e) {
  145. e.printStackTrace();
  146. }
  147. map.put(key, sb.toString());
  148. }
  149. }
  150. }