InterfaceParamCalcUnit.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.sundata.internalevaluation.calc.calcUnit;
  2. import com.sundata.common.util.DBExecutor;
  3. import com.sundata.common.util.JsonUtil;
  4. import com.sundata.internalevaluation.calc.model.CalcException;
  5. import com.sundata.internalevaluation.calc.model.CalcResult;
  6. import com.sundata.internalevaluation.calc.model.CalcUnit;
  7. import com.sundata.internalevaluation.calc.model.finals.CalcType;
  8. import com.sundata.internalevaluation.calc.util.InvokeUtil;
  9. import com.sundata.internalevaluation.configuration.model.SysInterfaceParam;
  10. import com.sundata.internalevaluation.script.TemplateUtil;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * Created by IntelliJ IDEA.
  17. *
  18. * @author JoeLazy
  19. * @date 2025-02-13 16:23:55
  20. * @description: 接口参数计算单元
  21. */
  22. public class InterfaceParamCalcUnit extends CalcUnit {
  23. private static final Logger log = LoggerFactory.getLogger(InterfaceParamCalcUnit.class);
  24. /**
  25. * 接口参数实体
  26. */
  27. private final SysInterfaceParam sysInterfaceParam;
  28. /**
  29. * 创建数据单元的绝对对象,对象必须包含如下参数
  30. *
  31. * @param calcCode 计算对象编号
  32. * @param calcName 计算对象名称
  33. * @param calcType 计算类型
  34. * @param initContext 计算单元初始化参数
  35. */
  36. public InterfaceParamCalcUnit(String calcCode, String calcName, CalcType calcType, Map<String, Object> initContext, SysInterfaceParam sysInterfaceParam) {
  37. super(calcCode, calcName, calcType, initContext);
  38. this.sysInterfaceParam = sysInterfaceParam;
  39. }
  40. /**
  41. * 判断是否已经计算过数据了
  42. *
  43. * @param calculateInstanceNumber 计算流水号
  44. * @return 是否计算过 true 计算过 false 没有计算过
  45. */
  46. @Override
  47. public boolean isCalcFinished(String calculateInstanceNumber) {
  48. return false;
  49. }
  50. /**
  51. * 初始化计算结果的方法,如果已经计算过,在实现过程中,应当在此方法中根据计算流水号重新初始化 resultContext 结果对象,为其他依赖对象做准备
  52. * 若明明计算过本单元但再次计算时没有初始化该对象,则计算依赖出现问题无法定位与处理
  53. *
  54. * @param calculateInstanceNumber 计算流水号
  55. */
  56. @Override
  57. public void initResultContext(String calculateInstanceNumber) {
  58. }
  59. /**
  60. * 根据节点配置获取源节点;
  61. *
  62. * @return 所有源头节点
  63. */
  64. @Override
  65. public List<CalcUnit> getSourceCalcUnits() {
  66. return List.of();
  67. }
  68. /**
  69. * 计算之后的方法,可实现为空
  70. *
  71. * @param context
  72. */
  73. @Override
  74. public void afterCalc(Map<String, Object> context) {
  75. }
  76. /**
  77. * 计算之前,可实现空
  78. *
  79. * @param context
  80. */
  81. @Override
  82. public void beforeCalc(Map<String, Object> context) {
  83. }
  84. /**
  85. * 必须实现的主体计算内容
  86. *
  87. * @param thisResult 本计算单元的结果
  88. * @param calculateInstanceNumber 计算流水号
  89. * @param context 节点计算参数清单
  90. * @param sourceResults 源头计算节点的结果
  91. */
  92. @Override
  93. public void calc(CalcResult<String, Object> thisResult, String calculateInstanceNumber, Map<String, Object> context, Map<CalcUnit, CalcResult<String, Object>> sourceResults) {
  94. log.debug("计算{}:编号:{},名称:{},流水号:{}", getCalcType().getName(),getCalcCode(),getCalcName(),calculateInstanceNumber);
  95. // 参数获取类型
  96. String paramRetrievalTypeCode = sysInterfaceParam.getParamRetrievalTypeCode();
  97. // 参数获取内容
  98. String paramRetrievalTypeCont = sysInterfaceParam.getParamRetrievalTypeCont();
  99. Object result = null;
  100. // 获取参数值
  101. switch (paramRetrievalTypeCode) {
  102. // 固定值
  103. case "fixed":
  104. result = paramRetrievalTypeCont;
  105. break;
  106. // java
  107. // 获取参数内容
  108. case "java":
  109. try {
  110. result = InvokeUtil.invokeMethod(paramRetrievalTypeCont);
  111. } catch (Exception e) {
  112. throw new RuntimeException(e);
  113. }
  114. break;
  115. // SQL-Map
  116. case "sqlmap":
  117. result = DBExecutor.doQuery(TemplateUtil.execute("interfaceParam-temp-sqlmap-"+getCalcCode(),paramRetrievalTypeCont, context));
  118. break;
  119. // SQL-List
  120. case "sqllist":
  121. result = DBExecutor.doQueryMapList(TemplateUtil.execute("interfaceParam-temp-sqllist-"+getCalcCode(),paramRetrievalTypeCont, context));
  122. break;
  123. // SQL-String
  124. case "sqlstring":
  125. result = DBExecutor.doQuery(TemplateUtil.execute("interfaceParam-temp-sqlstring-"+getCalcCode(),paramRetrievalTypeCont, context));
  126. break;
  127. }
  128. String paramTypeCode = this.sysInterfaceParam.getParamTypeCode();
  129. if ("string".equals(paramTypeCode)) {
  130. if (result instanceof String) {
  131. } else {
  132. result = JsonUtil.toJSONString(result);
  133. }
  134. } else if ("number".equals(paramTypeCode)) {
  135. if (result instanceof Number) {
  136. if (result instanceof Integer) {
  137. result = ((Number) result).intValue();
  138. } else if (result instanceof Long) {
  139. result = ((Number) result).longValue();
  140. } else if (result instanceof Float) {
  141. result = ((Number) result).floatValue();
  142. } else if (result instanceof Double) {
  143. result = ((Number) result).doubleValue();
  144. } else if (result instanceof Short) {
  145. result = ((Number) result).shortValue();
  146. } else if (result instanceof Byte) {
  147. result = ((Number) result).byteValue();
  148. } else {
  149. throw new RuntimeException("数据类型不匹配:计算机过不为'数字'");
  150. }
  151. } else {
  152. throw new RuntimeException("数据类型不匹配:计算机过不为'数字'");
  153. }
  154. } else {
  155. throw new CalcException("返回值类型有无,目前仅有 数字和字符串");
  156. }
  157. thisResult.put(getCalcCode(), result);
  158. thisResult.put("entity", sysInterfaceParam);
  159. }
  160. }