Browse Source

update

main
wangshaoping 1 year ago
parent
commit
d86883ab46
  1. 2
      app.platform/build-jetty.gradle
  2. 2
      app.platform/build-undertow.gradle
  3. 2
      app.platform/build.gradle
  4. 2
      com.xxl.job.admin/build-jetty.gradle
  5. 2
      com.xxl.job.admin/build-undertow.gradle
  6. 2
      com.xxl.job.executor/build-jetty.gradle
  7. 2
      com.xxl.job.executor/build-undertow.gradle
  8. 93
      io.sc.engine.mv.frontend/src/i18n/messages.json
  9. 93
      io.sc.engine.mv.frontend/src/i18n/messages_tw_CN.json
  10. 94
      io.sc.engine.mv.frontend/src/i18n/messages_zh_CN.json
  11. 83
      io.sc.engine.mv.frontend/src/views/result/CurveDataDialog.vue
  12. 267
      io.sc.engine.mv.frontend/src/views/result/Result.vue
  13. 271
      io.sc.engine.mv.frontend/src/views/result/ResultDetailDialog.vue
  14. 284
      io.sc.engine.mv.frontend/src/views/sample/Sample.vue
  15. 4
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/ShowSampleWebController.java
  16. 2
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/coe/BinomialWebController.java
  17. 2
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/coe/ChiSquareWebController.java
  18. 21
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sample/DefaultRecordWebController.java
  19. 82
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/CapWebController.java
  20. 89
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/KsWebController.java
  21. 80
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/RocWebController.java
  22. 88
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/st/PsiWebController.java
  23. 79
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Axis.java
  24. 13
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/AxisTick.java
  25. 22
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Grid.java
  26. 25
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Legend.java
  27. 79
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Option.java
  28. 43
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Series.java
  29. 22
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Title.java
  30. 4
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Tooltip.java
  31. 52
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/DefaultRecord.java
  32. 8
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/ScoreRecord.java
  33. 39
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/id/DefaultRecordId.java
  34. 11
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/repository/DefaultRecordRepository.java
  35. 5
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/result/impl/GeneralResultHistoryServiceImpl.java
  36. 9
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/sample/DefaultRecordService.java
  37. 12
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/sample/impl/DefaultRecordServiceImpl.java
  38. 29
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/vo/DefaultRecordVo.java
  39. 4
      io.sc.engine.mv/src/main/java/io/sc/engine/mv/vo/ScoreRecordVo.java
  40. 11
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums.properties
  41. 11
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums_tw_CN.properties
  42. 11
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums_zh_CN.properties
  43. 30
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages.properties
  44. 73
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_tw_CN.properties
  45. 26
      io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_zh_CN.properties
  46. 2
      io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/RestarterInterceptorAutoConfiguration.java
  47. 2
      io.sc.platform.core/src/main/java/io/sc/platform/core/controller/RestarterWebController.java
  48. 10
      io.sc.platform.core/src/main/java/io/sc/platform/core/enums/GoodLevel.java
  49. 2
      io.sc.platform.core/src/main/java/io/sc/platform/core/interceptor/RestarterInterceptor.java
  50. 6
      io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java
  51. 4
      io.sc.platform.core/src/main/java/io/sc/platform/core/support/ProgressInfo.java
  52. 8
      io.sc.platform.core/src/main/java/io/sc/platform/core/util/EnumUtil.java
  53. 6
      io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml
  54. 6
      io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring2.xml
  55. 9
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums.properties
  56. 9
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums_tw_CN.properties
  57. 9
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums_zh_CN.properties
  58. 12
      io.sc.platform.gradle/build.gradle
  59. 4
      io.sc.platform.gradle/src/main/java/io/sc/platform/gradle/plugins/CreateFrontEnd.java
  60. 2
      io.sc.platform.gradle/templates/pgp/app/build-jetty.gradle
  61. 2
      io.sc.platform.gradle/templates/pgp/app/build-undertow.gradle
  62. 2
      io.sc.platform.gradle/templates/pgp/app/build.gradle
  63. 2
      io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/application-properties.json
  64. 8
      io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/json-serializers.json
  65. 2
      io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/security.json
  66. 2
      io.sc.platform.gradle/templates/pgp/setup/build-version.gradle
  67. 2
      io.sc.platform.groovy/build.gradle
  68. 2
      io.sc.platform.installer/build.gradle
  69. 2
      io.sc.platform.jdbc.liquibase/build.gradle
  70. 2
      io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/autoconfigure/DatabaseUpdaterInterceptorAutoConfiguration.java
  71. 2
      io.sc.platform.job.core/build.gradle
  72. 2
      io.sc.platform.job.executor/build.gradle
  73. 2
      io.sc.platform.job.manager/build.gradle
  74. 2
      io.sc.platform.monitor/build.gradle
  75. 2
      io.sc.platform.mvc/build.gradle
  76. 4
      io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java
  77. 6
      io.sc.platform.orm.api/build.gradle
  78. 2
      io.sc.platform.ws.cxf/build.gradle

2
app.platform/build-jetty.gradle

@ -2,7 +2,7 @@ println "[Jetty] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
app.platform/build-undertow.gradle

@ -2,7 +2,7 @@ println "[Undertow] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
app.platform/build.gradle

@ -17,7 +17,7 @@ dependencies {
project(":io.sc.engine.mv.frontend"),
project(":io.sc.engine.mv.sample"),
//project(":io.sc.platform.job.core"),
//project(":io.sc.platform.job.coe"),
//project(":io.sc.platform.job.executor"),
//project(":io.sc.platform.job.manager"),

2
com.xxl.job.admin/build-jetty.gradle

@ -2,7 +2,7 @@ println "[Jetty] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
com.xxl.job.admin/build-undertow.gradle

@ -2,7 +2,7 @@ println "[Undertow] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
com.xxl.job.executor/build-jetty.gradle

@ -2,7 +2,7 @@ println "[Jetty] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
com.xxl.job.executor/build-undertow.gradle

@ -2,7 +2,7 @@ println "[Undertow] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

93
io.sc.engine.mv.frontend/src/i18n/messages.json

@ -62,12 +62,42 @@
"io.sc.engine.mv.config.executor.grid.title" : "Executor List",
"io.sc.engine.mv.sample.tabs.goodSample" : "Good Sample",
"io.sc.engine.mv.sample.tabs.sample" : "Sample",
"io.sc.engine.mv.sample.tabs.scoreRecord" : "Score Records",
"io.sc.engine.mv.sample.tabs.defaultRecord" : "Default Records",
"io.sc.engine.mv.sample.goodSample.grid.title" : "Good Sample List",
"io.sc.engine.mv.sample.sample.grid.title" : "Sample List",
"io.sc.engine.mv.sample.sample.grid.entity.validateDate" : "Validate Date",
"io.sc.engine.mv.sample.sample.grid.entity.customId" : "Customer ID",
"io.sc.engine.mv.sample.sample.grid.entity.customName" : "Customer Name",
"io.sc.engine.mv.sample.sample.grid.entity.modelId" : "Model ID",
"io.sc.engine.mv.sample.sample.grid.entity.modelName" : "Model Name",
"io.sc.engine.mv.sample.sample.grid.entity.pd" : "PD",
"io.sc.engine.mv.sample.sample.grid.entity.score" : "Score",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQuantitative" : "Quantitative Score",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQualitative" : "Qualitative Score",
"io.sc.engine.mv.sample.sample.grid.entity.level" : "Level",
"io.sc.engine.mv.sample.sample.grid.entity.beginDate" : "Begin Date",
"io.sc.engine.mv.sample.sample.grid.entity.endDate" : "End Date",
"io.sc.engine.mv.sample.sample.grid.entity.defaultConfirmDate" : "Default Confirm Date",
"io.sc.engine.mv.sample.scoreRecord.grid.title" : "Score Record List",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customId" : "Customer ID",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customName" : "Customer Name",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelId" : "Model ID",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelName" : "Model Name",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.pd" : "PD",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.score" : "Score",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQuantitative" : "Quantitative Score",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQualitative" : "Qualitative Score",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.level" : "Level",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreBeginDate" : "Begin Date",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreEndDate" : "End Date",
"io.sc.engine.mv.sample.defaultRecord.grid.title" : "Default Record List",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.customId" : "Customer ID",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.defaultConfirmDate" : "Default Confirm Date",
"io.sc.engine.mv.result.grid.title" : "Validate Result List",
"io.sc.engine.mv.result.grid.entity.validateDate" : "Validate Date",
"io.sc.engine.mv.result.grid.entity.runtimeParameters" : "Runtime Parameters",
@ -83,6 +113,15 @@
"io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "Default Sample Count",
"io.sc.engine.mv.result.grid.entity.discrimination" : "Discrimination",
"io.sc.engine.mv.result.grid.entity.total" : "Total",
"io.sc.engine.mv.result.grid.entity.total.auc" : "AUC(Total)",
"io.sc.engine.mv.result.grid.entity.total.ar" : "AR(Total)",
"io.sc.engine.mv.result.grid.entity.total.ks" : "KS(Total)",
"io.sc.engine.mv.result.grid.entity.quantitative.auc" : "AUC(Quantitative)",
"io.sc.engine.mv.result.grid.entity.quantitative.ar" : "AR(Quantitative)",
"io.sc.engine.mv.result.grid.entity.quantitative.ks" : "KS(Quantitative)",
"io.sc.engine.mv.result.grid.entity.qualitative.auc" : "AUC(Qualitative)",
"io.sc.engine.mv.result.grid.entity.qualitative.ar" : "AR(Qualitative)",
"io.sc.engine.mv.result.grid.entity.qualitative.ks" : "KS(Qualitative)",
"io.sc.engine.mv.result.grid.entity.auc" : "AUC",
"io.sc.engine.mv.result.grid.entity.ar" : "AR",
"io.sc.engine.mv.result.grid.entity.ks" : "KS",
@ -91,5 +130,53 @@
"io.sc.engine.mv.result.grid.entity.psi" : "PSI",
"io.sc.engine.mv.result.grid.entity.scaleValidate" : "Scale Validate",
"io.sc.engine.mv.result.grid.entity.chiSquare" : "Chi-Square",
"io.sc.engine.mv.result.grid.entity.binomial" : "Binomial"
"io.sc.engine.mv.result.grid.entity.binomial" : "Binomial",
"io.sc.engine.mv.result.curve.references" : "References",
"io.sc.engine.mv.result.curve.viewData" : "View {type} Data",
"io.sc.engine.mv.result.curve.scoreCutOffPoint" : "Cut Off Point",
"io.sc.engine.mv.result.curve.roc.dd" : "(DD)Predict defaults and Actual defaults",
"io.sc.engine.mv.result.curve.roc.dn" : "(DN)Predict normal and Actual defaults",
"io.sc.engine.mv.result.curve.roc.nd" : "(ND)Predict defaults and Actual normal",
"io.sc.engine.mv.result.curve.roc.nn" : "(NN)Predict normal and Actual normal",
"io.sc.engine.mv.result.curve.roc.td" : "(TD)Actual defaults",
"io.sc.engine.mv.result.curve.roc.tn" : "(TN)Actual normal",
"io.sc.engine.mv.result.curve.roc.x" : "(X=ND/TN)False Alarm Rate of defaults",
"io.sc.engine.mv.result.curve.roc.y" : "(Y=DD/TD)Hit Rate of defaults",
"io.sc.engine.mv.result.curve.cap.ts" : "(TS)Score <= cut off point",
"io.sc.engine.mv.result.curve.cap.tt" : "(TT)Total of defaults",
"io.sc.engine.mv.result.curve.cap.tds" : "(TDS)Score <= cut off point and Actual defaults",
"io.sc.engine.mv.result.curve.cap.tdt" : "(TDT)Actual defaults",
"io.sc.engine.mv.result.curve.cap.x" : "(X)Percent of defaults",
"io.sc.engine.mv.result.curve.cap.y" : "(Y)Percent of total",
"io.sc.engine.mv.result.curve.ks.n" : "(N)Score <= cut off point and Actual normal",
"io.sc.engine.mv.result.curve.ks.tn" : "(TN)Total of normal",
"io.sc.engine.mv.result.curve.ks.d" : "(D)Score <= cut off point and Actual defaults",
"io.sc.engine.mv.result.curve.ks.td" : "(TD)Actual defaults",
"io.sc.engine.mv.result.curve.ks.y1" : "(Y1)Percent of normal",
"io.sc.engine.mv.result.curve.ks.y2" : "(Y2)Percent of defaults",
"io.sc.engine.mv.result.chiSquare.level" : "Level",
"io.sc.engine.mv.result.chiSquare.pd" : "PD",
"io.sc.engine.mv.result.chiSquare.count" : "Total Count",
"io.sc.engine.mv.result.chiSquare.defaultCount" : "Default Count",
"io.sc.engine.mv.result.chiSquare.chiSquare" : "ChiSquare Value",
"io.sc.engine.mv.result.binomial.level" : "Level",
"io.sc.engine.mv.result.binomial.pd" : "PD",
"io.sc.engine.mv.result.binomial.count" : "Total Count",
"io.sc.engine.mv.result.binomial.defaultCount" : "Default Count",
"io.sc.engine.mv.result.binomial.ndAvg" : "Avg of ND",
"io.sc.engine.mv.result.binomial.ndSd" : "SD of ND",
"io.sc.engine.mv.result.binomial.sl" : "Significance Level",
"io.sc.engine.mv.result.binomial.cl" : "Confidence Level",
"io.sc.engine.mv.result.binomial.zUpper" : "Z Upper of ND",
"io.sc.engine.mv.result.binomial.zLower" : "Z Lower of ND",
"io.sc.engine.mv.result.binomial.dUpper" : "Upper of Critical",
"io.sc.engine.mv.result.binomial.dLower" : "Lower of Critical",
"io.sc.engine.mv.result.binomial.leUpper" : "Count of <= Upper",
"io.sc.engine.mv.result.binomial.geLower" : "Count of >= Lower"
}

93
io.sc.engine.mv.frontend/src/i18n/messages_tw_CN.json

@ -61,11 +61,41 @@
"io.sc.engine.mv.config.executor.grid.title" : "執行器列表",
"io.sc.engine.mv.sample.tabs.goodSample" : "合格樣本",
"io.sc.engine.mv.sample.tabs.sample" : "合格樣本",
"io.sc.engine.mv.sample.tabs.scoreRecord" : "評分記錄",
"io.sc.engine.mv.sample.tabs.defaultRecord" : "違約記錄",
"io.sc.engine.mv.sample.goodSample.grid.title" : "合格樣本列表",
"io.sc.engine.mv.sample.sample.grid.title" : "合格樣本列表",
"io.sc.engine.mv.sample.sample.grid.entity.validateDate" : "驗證日期",
"io.sc.engine.mv.sample.sample.grid.entity.customId" : "客戶標識",
"io.sc.engine.mv.sample.sample.grid.entity.customName" : "客戶名稱",
"io.sc.engine.mv.sample.sample.grid.entity.modelId" : "模型標識",
"io.sc.engine.mv.sample.sample.grid.entity.modelName" : "模型名稱",
"io.sc.engine.mv.sample.sample.grid.entity.pd" : "違約概率",
"io.sc.engine.mv.sample.sample.grid.entity.score" : "評分",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQuantitative" : "定量評分",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQualitative" : "定性評分",
"io.sc.engine.mv.sample.sample.grid.entity.level" : "等級",
"io.sc.engine.mv.sample.sample.grid.entity.beginDate" : "評分開始日期",
"io.sc.engine.mv.sample.sample.grid.entity.endDate" : "評分結束日期",
"io.sc.engine.mv.sample.sample.grid.entity.defaultConfirmDate" : "評分結束日期",
"io.sc.engine.mv.sample.scoreRecord.grid.title" : "評分記錄列表",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customId" : "客戶標識",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customName" : "客戶名稱",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelId" : "模型標識",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelName" : "模型名稱",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.pd" : "違約概率",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.score" : "評分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQuantitative" : "定量評分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQualitative" : "定性評分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.level" : "等級",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreBeginDate" : "評分開始日期",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreEndDate" : "評分結束日期",
"io.sc.engine.mv.sample.defaultRecord.grid.title" : "違約記錄列表",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.customId" : "客戶標識",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.defaultConfirmDate" : "違約確定日期",
@ -84,6 +114,15 @@
"io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "違約樣本數",
"io.sc.engine.mv.result.grid.entity.discrimination" : "區分能力",
"io.sc.engine.mv.result.grid.entity.total" : "總體",
"io.sc.engine.mv.result.grid.entity.total.auc" : "AUC(總體)",
"io.sc.engine.mv.result.grid.entity.total.ar" : "AR(總體)",
"io.sc.engine.mv.result.grid.entity.total.ks" : "KS(總體)",
"io.sc.engine.mv.result.grid.entity.quantitative.auc" : "AUC(定量)",
"io.sc.engine.mv.result.grid.entity.quantitative.ar" : "AR(定量)",
"io.sc.engine.mv.result.grid.entity.quantitative.ks" : "KS(定量)",
"io.sc.engine.mv.result.grid.entity.qualitative.auc" : "AUC(定性)",
"io.sc.engine.mv.result.grid.entity.qualitative.ar" : "AR(定性)",
"io.sc.engine.mv.result.grid.entity.qualitative.ks" : "KS(定性)",
"io.sc.engine.mv.result.grid.entity.auc" : "AUC",
"io.sc.engine.mv.result.grid.entity.ar" : "AR",
"io.sc.engine.mv.result.grid.entity.ks" : "KS",
@ -92,5 +131,53 @@
"io.sc.engine.mv.result.grid.entity.psi" : "PSI",
"io.sc.engine.mv.result.grid.entity.scaleValidate" : "標尺檢驗",
"io.sc.engine.mv.result.grid.entity.chiSquare" : "卡方檢驗",
"io.sc.engine.mv.result.grid.entity.binomial" : "二項檢驗"
"io.sc.engine.mv.result.grid.entity.binomial" : "二項檢驗",
"io.sc.engine.mv.result.curve.references" : "參考標準",
"io.sc.engine.mv.result.curve.viewData" : "查看 {type} 數據",
"io.sc.engine.mv.result.curve.scoreCutOffPoint" : "評分截斷點",
"io.sc.engine.mv.result.curve.roc.dd" : "(DD)實際違約且預測違約樣本總數",
"io.sc.engine.mv.result.curve.roc.dn" : "(DN)實際違約且預測正常樣本總數",
"io.sc.engine.mv.result.curve.roc.nd" : "(ND)實際正常且預測違約樣本總數",
"io.sc.engine.mv.result.curve.roc.nn" : "(NN)實際正常且預測正常樣本總數",
"io.sc.engine.mv.result.curve.roc.td" : "(TD)實際違約樣本總數",
"io.sc.engine.mv.result.curve.roc.tn" : "(TN)實際正常樣本總數",
"io.sc.engine.mv.result.curve.roc.x" : "(X=ND/TN)違約預測誤警率",
"io.sc.engine.mv.result.curve.roc.y" : "(Y=DD/TD)違約預測命中率",
"io.sc.engine.mv.result.curve.cap.ts" : "(TS)評分小於等於截斷點的樣本個數",
"io.sc.engine.mv.result.curve.cap.tt" : "(TT)樣本总数",
"io.sc.engine.mv.result.curve.cap.tds" : "(TDS)評分小於等於截斷點的事實違約樣本個數",
"io.sc.engine.mv.result.curve.cap.tdt" : "(TDT)事實違約樣本總數",
"io.sc.engine.mv.result.curve.cap.x" : "(X)違約樣本百分比",
"io.sc.engine.mv.result.curve.cap.y" : "(Y)樣本百分比",
"io.sc.engine.mv.result.curve.ks.n" : "(N)評分小於等於截斷點事實正常的樣本個數",
"io.sc.engine.mv.result.curve.ks.tn" : "(TN)事實正常樣本總數",
"io.sc.engine.mv.result.curve.ks.d" : "(D)評分小於等於截斷點事實違約樣本個數",
"io.sc.engine.mv.result.curve.ks.td" : "(TD)事實违约樣本總數",
"io.sc.engine.mv.result.curve.ks.y1" : "(Y1)正常樣本占比",
"io.sc.engine.mv.result.curve.ks.y2" : "(Y2)違約樣本占比",
"io.sc.engine.mv.result.chiSquare.level" : "評分等級",
"io.sc.engine.mv.result.chiSquare.pd" : "違約概率",
"io.sc.engine.mv.result.chiSquare.count" : "樣本總數",
"io.sc.engine.mv.result.chiSquare.defaultCount" : "事實違約樣本個數",
"io.sc.engine.mv.result.chiSquare.chiSquare" : "卡方检验值",
"io.sc.engine.mv.result.binomial.level" : "評分等級",
"io.sc.engine.mv.result.binomial.pd" : "違約概率",
"io.sc.engine.mv.result.binomial.count" : "樣本總數",
"io.sc.engine.mv.result.binomial.defaultCount" : "事實違約樣本個數",
"io.sc.engine.mv.result.binomial.ndAvg" : "正態分佈平均數",
"io.sc.engine.mv.result.binomial.ndSd" : "正態分佈標準差",
"io.sc.engine.mv.result.binomial.sl" : "顯著水平",
"io.sc.engine.mv.result.binomial.cl" : "置信水平",
"io.sc.engine.mv.result.binomial.zUpper" : "正態分佈Z值上界",
"io.sc.engine.mv.result.binomial.zLower" : "正態分佈Z值下界",
"io.sc.engine.mv.result.binomial.dUpper" : "臨界值上界",
"io.sc.engine.mv.result.binomial.dLower" : "臨界值下界",
"io.sc.engine.mv.result.binomial.leUpper" : "事實違約個數是否小於等於上界",
"io.sc.engine.mv.result.binomial.geLower" : "事實違約個數是否大於等於下界"
}

94
io.sc.engine.mv.frontend/src/i18n/messages_zh_CN.json

@ -69,11 +69,42 @@
"io.sc.engine.mv.config.executor.grid.title" : "执行器列表",
"io.sc.engine.mv.sample.tabs.goodSample" : "合格样本",
"io.sc.engine.mv.sample.tabs.sample" : "合格样本",
"io.sc.engine.mv.sample.tabs.scoreRecord" : "评分记录",
"io.sc.engine.mv.sample.tabs.defaultRecord" : "违约记录",
"io.sc.engine.mv.sample.goodSample.grid.title" : "合格样本列表",
"io.sc.engine.mv.sample.sample.grid.title" : "合格样本列表",
"io.sc.engine.mv.sample.sample.grid.entity.validateDate" : "验证日期",
"io.sc.engine.mv.sample.sample.grid.entity.customId" : "客户标识",
"io.sc.engine.mv.sample.sample.grid.entity.customName" : "客户名称",
"io.sc.engine.mv.sample.sample.grid.entity.modelId" : "模型标识",
"io.sc.engine.mv.sample.sample.grid.entity.modelName" : "模型名称",
"io.sc.engine.mv.sample.sample.grid.entity.pd" : "违约概率",
"io.sc.engine.mv.sample.sample.grid.entity.score" : "评分",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQuantitative" : "定量评分",
"io.sc.engine.mv.sample.sample.grid.entity.scoreQualitative" : "定性评分",
"io.sc.engine.mv.sample.sample.grid.entity.level" : "等级",
"io.sc.engine.mv.sample.sample.grid.entity.beginDate" : "评分开始日期",
"io.sc.engine.mv.sample.sample.grid.entity.endDate" : "评分结束日期",
"io.sc.engine.mv.sample.sample.grid.entity.defaultConfirmDate" : "违约确定日期",
"io.sc.engine.mv.sample.scoreRecord.grid.title" : "评分记录列表",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customId" : "客户标识",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.customName" : "客户名称",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelId" : "模型标识",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.modelName" : "模型名称",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.pd" : "违约概率",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.score" : "评分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQuantitative" : "定量评分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQualitative" : "定性评分",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.level" : "等级",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreBeginDate" : "评分开始日期",
"io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreEndDate" : "评分结束日期",
"io.sc.engine.mv.sample.defaultRecord.grid.title" : "违约记录列表",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.customId" : "客户标识",
"io.sc.engine.mv.sample.defaultRecord.grid.entity.defaultConfirmDate" : "违约确定日期",
"io.sc.engine.mv.result.grid.title" : "验证结果列表",
"io.sc.engine.mv.result.grid.entity.validateDate" : "验证日期",
@ -90,6 +121,15 @@
"io.sc.engine.mv.result.grid.entity.defaultSampleCount" : "违约样本数",
"io.sc.engine.mv.result.grid.entity.discrimination" : "区分能力",
"io.sc.engine.mv.result.grid.entity.total" : "总体",
"io.sc.engine.mv.result.grid.entity.total.auc" : "AUC(总体)",
"io.sc.engine.mv.result.grid.entity.total.ar" : "AR(总体)",
"io.sc.engine.mv.result.grid.entity.total.ks" : "KS(总体)",
"io.sc.engine.mv.result.grid.entity.quantitative.auc" : "AUC(定量)",
"io.sc.engine.mv.result.grid.entity.quantitative.ar" : "AR(定量)",
"io.sc.engine.mv.result.grid.entity.quantitative.ks" : "KS(定量)",
"io.sc.engine.mv.result.grid.entity.qualitative.auc" : "AUC(定性)",
"io.sc.engine.mv.result.grid.entity.qualitative.ar" : "AR(定性)",
"io.sc.engine.mv.result.grid.entity.qualitative.ks" : "KS(定性)",
"io.sc.engine.mv.result.grid.entity.auc" : "AUC",
"io.sc.engine.mv.result.grid.entity.ar" : "AR",
"io.sc.engine.mv.result.grid.entity.ks" : "KS",
@ -98,5 +138,53 @@
"io.sc.engine.mv.result.grid.entity.psi" : "PSI",
"io.sc.engine.mv.result.grid.entity.scaleValidate" : "标尺检验",
"io.sc.engine.mv.result.grid.entity.chiSquare" : "卡方检验",
"io.sc.engine.mv.result.grid.entity.binomial" : "二项检验"
"io.sc.engine.mv.result.grid.entity.binomial" : "二项检验",
"io.sc.engine.mv.result.curve.references" : "参考标准",
"io.sc.engine.mv.result.curve.viewData" : "查看 {type} 数据",
"io.sc.engine.mv.result.curve.scoreCutOffPoint" : "评分截断点",
"io.sc.engine.mv.result.curve.roc.dd" : "(DD)实际违约且预测违约样本总数",
"io.sc.engine.mv.result.curve.roc.dn" : "(DN)实际违约且预测正常样本总数",
"io.sc.engine.mv.result.curve.roc.nd" : "(ND)实际正常且预测违约样本总数",
"io.sc.engine.mv.result.curve.roc.nn" : "(NN)实际正常且预测正常样本总数",
"io.sc.engine.mv.result.curve.roc.td" : "(TD)实际违约样本总数",
"io.sc.engine.mv.result.curve.roc.tn" : "(TN)实际正常样本总数",
"io.sc.engine.mv.result.curve.roc.x" : "(X=ND/TN)违约预测误警率",
"io.sc.engine.mv.result.curve.roc.y" : "(Y=DD/TD)违约预测命中率",
"io.sc.engine.mv.result.curve.cap.ts" : "(TS)评分小于等于截断点的样本个数",
"io.sc.engine.mv.result.curve.cap.tt" : "(TT)样本总数",
"io.sc.engine.mv.result.curve.cap.tds" : "(TDS)评分小于等于截断点的事实违约样本个数",
"io.sc.engine.mv.result.curve.cap.tdt" : "(TDT)事实违约样本总数",
"io.sc.engine.mv.result.curve.cap.x" : "(X)违约样本百分比",
"io.sc.engine.mv.result.curve.cap.y" : "(Y)样本百分比",
"io.sc.engine.mv.result.curve.ks.n" : "(N)评分小于等于截断点事实正常的样本个数",
"io.sc.engine.mv.result.curve.ks.tn" : "(TN)事实正常样本总数",
"io.sc.engine.mv.result.curve.ks.d" : "(D)评分小于等于截断点事实违约样本个数",
"io.sc.engine.mv.result.curve.ks.td" : "(TD)事实违约样本总数",
"io.sc.engine.mv.result.curve.ks.y1" : "(Y1)正常样本占比",
"io.sc.engine.mv.result.curve.ks.y2" : "(Y2)违约样本占比",
"io.sc.engine.mv.result.chiSquare.level" : "评分等级",
"io.sc.engine.mv.result.chiSquare.pd" : "违约概率",
"io.sc.engine.mv.result.chiSquare.count" : "样本总数",
"io.sc.engine.mv.result.chiSquare.defaultCount" : "事实违约样本个数",
"io.sc.engine.mv.result.chiSquare.chiSquare" : "卡方检验值",
"io.sc.engine.mv.result.binomial.level" : "评分等级",
"io.sc.engine.mv.result.binomial.pd" : "违约概率",
"io.sc.engine.mv.result.binomial.count" : "样本总数",
"io.sc.engine.mv.result.binomial.defaultCount" : "事实违约样本个数",
"io.sc.engine.mv.result.binomial.ndAvg" : "正态分布平均数",
"io.sc.engine.mv.result.binomial.ndSd" : "正态分布标准差",
"io.sc.engine.mv.result.binomial.sl" : "显著水平",
"io.sc.engine.mv.result.binomial.cl" : "置信水平",
"io.sc.engine.mv.result.binomial.zUpper" : "正态分布Z值上界",
"io.sc.engine.mv.result.binomial.zLower" : "正态分布Z值下界",
"io.sc.engine.mv.result.binomial.dUpper" : "临界值上界",
"io.sc.engine.mv.result.binomial.dLower" : "临界值下界",
"io.sc.engine.mv.result.binomial.leUpper" : "事实违约个数是否小于等于上界",
"io.sc.engine.mv.result.binomial.geLower" : "事实违约个数是否大于等于下界"
}

83
io.sc.engine.mv.frontend/src/views/result/CurveDataDialog.vue

@ -0,0 +1,83 @@
<template>
<w-dialog ref="dialogRef" width="960px" height="760px" :title="`${curveTypeRef} - ${detailRef?.modelName}(${detailRef?.modelId})`" :can-maximize="false">
<div class="px-2">
<w-grid
v-if="'ROC' === curveTypeRef"
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/mv/sc/roc?modelId=' + detailRef.modelId + '&validateDate=' + detailRef.validateDate)"
:pageable="true"
:toolbar-actions="['refresh', 'separator', 'export']"
:columns="[
{ width: 100, name: 'scoreCutOffPoint', label: $t('io.sc.engine.mv.result.curve.scoreCutOffPoint'), align: 'right' },
{ width: 100, name: 'dd', label: $t('io.sc.engine.mv.result.curve.roc.dd'), align: 'right' },
{ width: 100, name: 'dn', label: $t('io.sc.engine.mv.result.curve.roc.dn'), align: 'right' },
{ width: 100, name: 'nd', label: $t('io.sc.engine.mv.result.curve.roc.nd'), align: 'right' },
{ width: 100, name: 'nn', label: $t('io.sc.engine.mv.result.curve.roc.nn'), align: 'right' },
{ width: 100, name: 'td', label: $t('io.sc.engine.mv.result.curve.roc.td'), align: 'right' },
{ width: 100, name: 'tn', label: $t('io.sc.engine.mv.result.curve.roc.tn'), align: 'right' },
{ width: 100, name: 'x', label: $t('io.sc.engine.mv.result.curve.roc.x'), align: 'right' },
{ width: 100, name: 'y', label: $t('io.sc.engine.mv.result.curve.roc.y'), align: 'right' },
]"
></w-grid>
<w-grid
v-if="'CAP' === curveTypeRef"
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/mv/sc/cap?modelId=' + detailRef.modelId + '&validateDate=' + detailRef.validateDate)"
:pageable="true"
:toolbar-actions="['refresh', 'separator', 'export']"
:columns="[
{ width: 100, name: 'scoreCutOffPoint', label: $t('io.sc.engine.mv.result.curve.scoreCutOffPoint'), align: 'right' },
{ width: 100, name: 'ts', label: $t('io.sc.engine.mv.result.curve.cap.ts'), align: 'right' },
{ width: 100, name: 'tt', label: $t('io.sc.engine.mv.result.curve.cap.tt'), align: 'right' },
{ width: 100, name: 'tds', label: $t('io.sc.engine.mv.result.curve.cap.tds'), align: 'right' },
{ width: 100, name: 'tdt', label: $t('io.sc.engine.mv.result.curve.cap.tdt'), align: 'right' },
{ width: 100, name: 'x', label: $t('io.sc.engine.mv.result.curve.cap.x'), align: 'right' },
{ width: 100, name: 'y', label: $t('io.sc.engine.mv.result.curve.cap.y'), align: 'right' },
]"
></w-grid>
<w-grid
v-if="'KS' === curveTypeRef"
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/mv/sc/ks?modelId=' + detailRef.modelId + '&validateDate=' + detailRef.validateDate)"
:pageable="true"
:toolbar-actions="['refresh', 'separator', 'export']"
:columns="[
{ width: 80, name: 'scoreCutOffPoint', label: $t('io.sc.engine.mv.result.curve.scoreCutOffPoint'), align: 'right' },
{ width: 100, name: 'n', label: $t('io.sc.engine.mv.result.curve.ks.n'), align: 'right' },
{ width: 100, name: 'tn', label: $t('io.sc.engine.mv.result.curve.ks.tn'), align: 'right' },
{ width: 100, name: 'd', label: $t('io.sc.engine.mv.result.curve.ks.d'), align: 'right' },
{ width: 100, name: 'td', label: $t('io.sc.engine.mv.result.curve.ks.td'), align: 'right' },
{ width: 100, name: 'y1', label: $t('io.sc.engine.mv.result.curve.ks.y1'), align: 'right' },
{ width: 100, name: 'y2', label: $t('io.sc.engine.mv.result.curve.ks.y2'), align: 'right' },
]"
></w-grid>
</div>
</w-dialog>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue';
import { Environment } from 'platform-core';
const dialogRef = ref();
const curveTypeRef = ref();
const detailRef = ref();
const open = (curveType: string, detail: any) => {
curveTypeRef.value = curveType;
detailRef.value = detail;
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
const title = computed(() => {
return curveTypeRef.value;
});
defineExpose({
open,
close,
});
</script>

267
io.sc.engine.mv.frontend/src/views/result/Result.vue

@ -1,119 +1,160 @@
<template>
<w-grid
:title="$t('menu.engine.mv.result')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/mv/result')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 150, name: 'validateDate', label: $t('io.sc.engine.mv.result.grid.entity.validateDate') },
{
width: 200,
name: 'runtimeParameters',
label: $t('io.sc.engine.mv.result.grid.entity.runtimeParameters'),
format: (value) => {
let result = '';
for (const item of value) {
result +=
$t('io.sc.engine.mv.result.grid.entity.runtimeParameters.' + item.name) + ':' + (Tools.isUndefinedOrNull(item.value) ? '' : item.value) + '<br/>';
}
return result;
},
},
{ width: 100, name: 'modelId', label: $t('io.sc.engine.mv.result.grid.entity.modelId') },
{ width: 120, name: 'modelName', label: $t('io.sc.engine.mv.result.grid.entity.modelName') },
{ width: 100, name: 'executeMode', label: $t('io.sc.engine.mv.result.grid.entity.executeMode') },
{ width: 100, name: 'totalSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.totalSampleCount'), align: 'right' },
{ width: 100, name: 'defaultSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.defaultSampleCount'), align: 'right' },
{
width: 900,
name: 'discrimination',
label: $t('io.sc.engine.mv.result.grid.entity.discrimination'),
columns: [
{
name: 'total',
label: $t('io.sc.engine.mv.result.grid.entity.total'),
columns: [
{ width: 100, name: 'auc', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'ar', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ks', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
},
{
name: 'quantitative',
label: $t('quantitative'),
columns: [
{ width: 100, name: 'aucQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'arQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ksQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
<div>
<w-grid
:ref="gridRef"
:title="$t('menu.engine.mv.result')"
:config-button="true"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/mv/result')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'refresh',
'separator',
{
name: 'detail',
label: $t('detail'),
icon: 'bi-display',
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
resultDetailDialogRef.open(selected);
}
},
{
name: 'qualitative',
label: $t('qualitative'),
columns: [
{ width: 100, name: 'aucQualitative', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'arQualitative', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ksQualitative', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
},
],
},
{
width: 200,
name: 'stability',
label: $t('io.sc.engine.mv.result.grid.entity.stability'),
columns: [
{ width: 100, name: 'svd', label: $t('io.sc.engine.mv.result.grid.entity.svd') },
{ width: 100, name: 'psi', label: $t('io.sc.engine.mv.result.grid.entity.psi') },
],
},
{
width: 200,
name: 'scaleValidate',
label: $t('io.sc.engine.mv.result.grid.entity.scaleValidate'),
columns: [
{ width: 100, name: 'chiSquare', label: $t('io.sc.engine.mv.result.grid.entity.chiSquare') },
{ width: 100, name: 'binomial', label: $t('io.sc.engine.mv.result.grid.entity.binomial') },
],
},
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'significanceLevel', label: $t('significanceLevel'), type: 'text' },
{ name: 'confidenceLevel', label: $t('confidenceLevel'), type: 'text' },
{ name: 'zUpper', label: $t('zUpper'), type: 'text' },
{ name: 'zLower', label: $t('zLower'), type: 'text' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'significanceLevel', label: $t('significanceLevel') },
{ name: 'confidenceLevel', label: $t('confidenceLevel') },
{ name: 'zUpper', label: $t('zUpper') },
{ name: 'zLower', label: $t('zLower') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate') },
],
},
}"
></w-grid>
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ width: 150, name: 'validateDate', label: $t('io.sc.engine.mv.result.grid.entity.validateDate') },
{ width: 150, name: 'modelId', label: $t('io.sc.engine.mv.result.grid.entity.modelId') },
{ width: 200, name: 'modelName', label: $t('io.sc.engine.mv.result.grid.entity.modelName') },
{ width: 100, name: 'executeMode', label: $t('io.sc.engine.mv.result.grid.entity.executeMode') },
{ width: 100, name: 'totalSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.totalSampleCount'), align: 'right' },
{ width: 100, name: 'defaultSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.defaultSampleCount'), align: 'right' },
{
width: 900,
name: 'discrimination',
label: $t('io.sc.engine.mv.result.grid.entity.discrimination'),
columns: [
{
name: 'total',
label: $t('io.sc.engine.mv.result.grid.entity.total'),
columns: [
{ width: 100, name: 'auc', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'ar', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ks', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
},
{
name: 'quantitative',
label: $t('quantitative'),
columns: [
{ width: 100, name: 'aucQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'arQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ksQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
},
{
name: 'qualitative',
label: $t('qualitative'),
columns: [
{ width: 100, name: 'aucQualitative', label: $t('io.sc.engine.mv.result.grid.entity.auc') },
{ width: 100, name: 'arQualitative', label: $t('io.sc.engine.mv.result.grid.entity.ar') },
{ width: 100, name: 'ksQualitative', label: $t('io.sc.engine.mv.result.grid.entity.ks') },
],
},
],
},
{
width: 200,
name: 'stability',
label: $t('io.sc.engine.mv.result.grid.entity.stability'),
columns: [
{ width: 100, name: 'svd', label: $t('io.sc.engine.mv.result.grid.entity.svd') },
{ width: 100, name: 'psi', label: $t('io.sc.engine.mv.result.grid.entity.psi') },
],
},
{
width: 200,
name: 'scaleValidate',
label: $t('io.sc.engine.mv.result.grid.entity.scaleValidate'),
columns: [
{ width: 100, name: 'chiSquare', label: $t('io.sc.engine.mv.result.grid.entity.chiSquare'), align: 'center', format: passOrNotFormater },
{ width: 100, name: 'binomial', label: $t('io.sc.engine.mv.result.grid.entity.binomial'), align: 'center', format: passOrNotFormater },
],
},
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'validateDate', label: $t('io.sc.engine.mv.result.grid.entity.validateDate') },
{
name: 'runtimeParameters',
label: $t('io.sc.engine.mv.result.grid.entity.runtimeParameters'),
format: (value) => {
let result = '';
for (const item of value) {
result +=
$t('io.sc.engine.mv.result.grid.entity.runtimeParameters.' + item.name) +
':' +
(Tools.isUndefinedOrNull(item.value) ? '' : item.value) +
'<br/>';
}
return result;
},
},
{ name: 'modelId', label: $t('io.sc.engine.mv.result.grid.entity.modelId') },
{ name: 'modelName', label: $t('io.sc.engine.mv.result.grid.entity.modelName') },
{ name: 'executeMode', label: $t('io.sc.engine.mv.result.grid.entity.executeMode') },
{ name: 'totalSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.totalSampleCount') },
{ name: 'defaultSampleCount', label: $t('io.sc.engine.mv.result.grid.entity.defaultSampleCount') },
{ name: 'auc', label: $t('io.sc.engine.mv.result.grid.entity.total.auc') },
{ name: 'ar', label: $t('io.sc.engine.mv.result.grid.entity.total.ar') },
{ name: 'ks', label: $t('io.sc.engine.mv.result.grid.entity.total.ks') },
{ name: 'aucQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.quantitative.auc') },
{ name: 'arQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.quantitative.ar') },
{ name: 'ksQuantitative', label: $t('io.sc.engine.mv.result.grid.entity.quantitative.ks') },
{ name: 'aucQualitative', label: $t('io.sc.engine.mv.result.grid.entity.qualitative.auc') },
{ name: 'arQualitative', label: $t('io.sc.engine.mv.result.grid.entity.qualitative.ar') },
{ name: 'ksQualitative', label: $t('io.sc.engine.mv.result.grid.entity.qualitative.ks') },
{ name: 'svd', label: $t('io.sc.engine.mv.result.grid.entity.svd') },
{ name: 'psi', label: $t('io.sc.engine.mv.result.grid.entity.psi') },
{ name: 'chiSquare', label: $t('io.sc.engine.mv.result.grid.entity.chiSquare'), format: Formater.none() },
{ name: 'binomial', label: $t('io.sc.engine.mv.result.grid.entity.binomial'), format: Formater.none() },
],
},
}"
></w-grid>
<ResultDetailDialog ref="resultDetailDialogRef"></ResultDetailDialog>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, Tools, Formater } from 'platform-core';
import ResultDetailDialog from './ResultDetailDialog.vue';
const gridRef = ref();
const resultDetailDialogRef = ref();
const passOrNotFormater = (value) => {
if (Tools.isUndefinedOrNull(value)) {
return '';
}
if (value === 'PASS') {
return {
componentType: 'QIcon',
attrs: { name: 'bi-check-circle', size: '20px', color: 'green' },
};
} else {
return {
componentType: 'QIcon',
attrs: { name: 'bi-x-circle', size: '20px', color: 'red' },
};
}
};
</script>

271
io.sc.engine.mv.frontend/src/views/result/ResultDetailDialog.vue

@ -0,0 +1,271 @@
<template>
<w-dialog ref="dialogRef" :title="detailRef?.modelName + '(' + detailRef?.modelId + ')'" :can-maximize="false" :maximized="true">
<div class="px-2">
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps @update:model-value="tabChanged">
<q-tab name="discrimination" icon="bi-people" :label="$t('io.sc.engine.mv.result.grid.entity.discrimination')" />
<q-tab name="stability" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.result.grid.entity.stability')" />
<q-tab name="scaleValidate" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.result.grid.entity.scaleValidate')" />
</q-tabs>
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive>
<q-tab-panel name="discrimination" class="px-0">
<div style="height: 50px"></div>
<div class="row">
<div class="col-4">
<div id="rocEchart" style="width: 100%; height: 300px"></div>
<div class="row justify-center">
<q-btn color="primary" no-caps flat :label="$t('io.sc.engine.mv.result.curve.viewData', { type: 'ROC' })" @click="showData('ROC')" />
</div>
</div>
<div class="col-4">
<div id="capEchart" style="width: 100%; height: 300px"></div>
<div class="row justify-center">
<q-btn color="primary" no-caps flat :label="$t('io.sc.engine.mv.result.curve.viewData', { type: 'CAP' })" @click="showData('CAP')" />
</div>
</div>
<div class="col-4">
<div id="ksEchart" style="width: 100%; height: 300px"></div>
<div class="row justify-center">
<q-btn color="primary" no-caps flat :label="$t('io.sc.engine.mv.result.curve.viewData', { type: 'KS' })" @click="showData('KS')" />
</div>
</div>
</div>
<h3>{{ $t('io.sc.engine.mv.result.curve.references') }}:</h3>
<table width="100%" style="border-collapse: collapse">
<tr>
<th class="referenceTh">{{ $t('io.sc.engine.mv.performance') }}</th>
<th class="referenceTh">ROC (AUC = {{ detailRef.auc }})</th>
<th class="referenceTh">CAP (AR = {{ detailRef.ar }})</th>
<th class="referenceTh">KS (KS = {{ detailRef.ks }})</th>
</tr>
<tr v-for="(level, index) in referenceLevels" :key="index">
<td class="referenceTd">{{ level }}</td>
<td :class="valueInRange(detailRef.auc, referenceValues.auc[index]) ? 'referenceTd highlight' : 'referenceTd'">
{{ referenceValues.auc[index].label }}
</td>
<td :class="valueInRange(detailRef.ar, referenceValues.ar[index]) ? 'referenceTd highlight' : 'referenceTd'">
{{ referenceValues.ar[index].label }}
</td>
<td :class="valueInRange(detailRef.ks, referenceValues.ks[index]) ? 'referenceTd highlight' : 'referenceTd'">
{{ referenceValues.ks[index].label }}
</td>
</tr>
</table>
</q-tab-panel>
<q-tab-panel name="stability" class="px-0">
<div style="height: 50px"></div>
<div class="row">
<div class="col-4">
<div id="psiEchart" style="width: 100%; height: 300px"></div>
<div class="row justify-center">
<q-btn color="primary" no-caps flat :label="$t('io.sc.engine.mv.result.curve.viewData', { type: 'ROC' })" @click="showData('ROC')" />
</div>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="scaleValidate" class="px-0">
<div class="row">
<div class="col-5 pr-2">
<w-grid
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/mv/sc/roc?modelId=' + detailRef.modelId + '&validateDate=' + detailRef.validateDate)"
:pageable="true"
:toolbar-actions="['refresh', 'separator', 'export']"
:columns="[
{ width: 100, name: 'level', label: $t('io.sc.engine.mv.result.chiSquare.level'), align: 'right' },
{ width: 100, name: 'pd', label: $t('io.sc.engine.mv.result.chiSquare.pd'), align: 'right' },
{ width: 100, name: 'count', label: $t('io.sc.engine.mv.result.chiSquare.count'), align: 'right' },
{ width: 100, name: 'defaultCount', label: $t('io.sc.engine.mv.result.chiSquare.defaultCount'), align: 'right' },
{ width: 100, name: 'chiSquare', label: $t('io.sc.engine.mv.result.chiSquare.chiSquare'), align: 'right' },
]"
></w-grid>
</div>
<div class="col-7 pl-2">
<w-grid
:checkbox-selection="false"
:fetch-data-url="Environment.apiContextPath('/api/mv/sc/roc?modelId=' + detailRef.modelId + '&validateDate=' + detailRef.validateDate)"
:pageable="true"
:toolbar-actions="['refresh', 'separator', 'export']"
:columns="[
{ width: 100, name: 'level', label: $t('io.sc.engine.mv.result.binomial.level'), align: 'right' },
{ width: 100, name: 'pd', label: $t('io.sc.engine.mv.result.binomial.pd'), align: 'right' },
{ width: 100, name: 'count', label: $t('io.sc.engine.mv.result.binomial.count'), align: 'right' },
{ width: 100, name: 'defaultCount', label: $t('io.sc.engine.mv.result.binomial.defaultCount'), align: 'right' },
{ width: 100, name: 'ndAvg', label: $t('io.sc.engine.mv.result.binomial.ndAvg'), align: 'right' },
{ width: 100, name: 'ndSd', label: $t('io.sc.engine.mv.result.binomial.ndSd'), align: 'right' },
{ width: 100, name: 'sl', label: $t('io.sc.engine.mv.result.binomial.sl'), align: 'right' },
{ width: 100, name: 'cl', label: $t('io.sc.engine.mv.result.binomial.cl'), align: 'right' },
{ width: 100, name: 'zUpper', label: $t('io.sc.engine.mv.result.binomial.zUpper'), align: 'right' },
{ width: 100, name: 'zLower', label: $t('io.sc.engine.mv.result.binomial.zLower'), align: 'right' },
{ width: 100, name: 'dUpper', label: $t('io.sc.engine.mv.result.binomial.dUpper'), align: 'right' },
{ width: 100, name: 'dLower', label: $t('io.sc.engine.mv.result.binomial.dLower'), align: 'right' },
{ width: 100, name: 'leUpper', label: $t('io.sc.engine.mv.result.binomial.leUpper'), align: 'right' },
{ width: 100, name: 'geLower', label: $t('io.sc.engine.mv.result.binomial.geLower'), align: 'right' },
]"
></w-grid>
</div>
</div>
</q-tab-panel>
</q-tab-panels>
</div>
<CurveDataDialog ref="curveDataDialogRef"></CurveDataDialog>
</w-dialog>
</template>
<script setup lang="ts">
import { ref, nextTick, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import * as echarts from 'echarts';
import { axios, Environment } from 'platform-core';
import CurveDataDialog from './CurveDataDialog.vue';
const { t } = useI18n();
const referenceValues = {
auc: [
{ label: '[0.00 - 0.65)', from: 0, to: 0.65 },
{ label: '[0.65 - 0.75)', from: 0.65, to: 0.75 },
{ label: '[0.75 - 0.80)', from: 0.75, to: 0.8 },
{ label: '[0.80 - 0.85)', from: 0.8, to: 0.85 },
{ label: '[0.85 - 0.90)', from: 0.85, to: 0.9 },
{ label: '[0.90 - 1.00)', from: 0.9, to: 1 },
],
ar: [
{ label: '[0.0 - 0.3)', from: 0, to: 0.3 },
{ label: '[0.3 - 0.5)', from: 0.3, to: 0.5 },
{ label: '[0.5 - 0.6)', from: 0.5, to: 0.6 },
{ label: '[0.6 - 0.7)', from: 0.6, to: 0.7 },
{ label: '[0.7 - 0.8)', from: 0.7, to: 0.8 },
{ label: '[0.8 - 1.0)', from: 0.8, to: 1 },
],
ks: [
{ label: '[0.00 - 0.20)', from: 0, to: 0.2 },
{ label: '[0.20 - 0.40)', from: 0.2, to: 0.4 },
{ label: '[0.40 - 0.50)', from: 0.4, to: 0.5 },
{ label: '[0.50 - 0.60)', from: 0.5, to: 0.6 },
{ label: '[0.60 - 0.75)', from: 0.6, to: 0.75 },
{ label: '[0.75 - 1.00)', from: 0.75, to: 1 },
],
};
const referenceLevels = computed(() => {
return [
t('io.sc.platform.core.enums.GoodLevel.POOR'),
t('io.sc.platform.core.enums.GoodLevel.MEDIUM'),
t('io.sc.platform.core.enums.GoodLevel.GOOD'),
t('io.sc.platform.core.enums.GoodLevel.VERY_GOOD'),
t('io.sc.platform.core.enums.GoodLevel.EXCELLENT'),
t('io.sc.platform.core.enums.GoodLevel.PERFECT'),
];
});
const dialogRef = ref();
const detailRef = ref();
const selectedTabRef = ref('discrimination');
const curveDataDialogRef = ref();
let rocEchart;
let capEchart;
let ksEchart;
let psiEchart;
const open = (detail: any) => {
detailRef.value = detail;
dialogRef.value.show();
tabChanged();
};
const tabChanged = () => {
nextTick(() => {
if ('discrimination' === selectedTabRef.value) {
if (!rocEchart) {
rocEchart = echarts.init(document.getElementById('rocEchart'));
}
axios
.get(Environment.apiContextPath('/api/mv/sc/cap/option?modelId=' + detailRef.value.modelId + '&validateDate=' + detailRef.value.validateDate))
.then((response) => {
rocEchart?.setOption(response.data);
rocEchart?.resize();
});
if (!capEchart) {
capEchart = echarts.init(document.getElementById('capEchart'));
}
axios
.get(Environment.apiContextPath('/api/mv/sc/cap/option?modelId=' + detailRef.value.modelId + '&validateDate=' + detailRef.value.validateDate))
.then((response) => {
capEchart?.setOption(response.data);
capEchart?.resize();
});
if (!ksEchart) {
ksEchart = echarts.init(document.getElementById('ksEchart'));
}
axios
.get(Environment.apiContextPath('/api/mv/sc/ks/option?modelId=' + detailRef.value.modelId + '&validateDate=' + detailRef.value.validateDate))
.then((response) => {
ksEchart?.setOption(response.data);
ksEchart?.resize();
});
} else if ('stability' === selectedTabRef.value) {
if (!psiEchart) {
psiEchart = echarts.init(document.getElementById('psiEchart'));
}
axios
.get(Environment.apiContextPath('/api/mv/st/psi/option?modelId=' + detailRef.value.modelId + '&validateDate=' + detailRef.value.validateDate))
.then((response) => {
psiEchart?.setOption(response.data);
psiEchart?.resize();
});
}
});
};
const close = () => {
dialogRef.value.hide();
if (rocEchart) {
rocEchart.dispose();
}
if (capEchart) {
capEchart.dispose();
}
if (ksEchart) {
ksEchart.dispose();
}
};
const valueInRange = (value, config) => {
if (value >= config.from && value < config.to) {
return true;
}
return false;
};
const showData = (type: string) => {
curveDataDialogRef.value.open(type, detailRef.value);
};
defineExpose({
open,
close,
});
</script>
<style>
.referenceTh {
border: 1px solid gray;
padding-top: 0px;
padding-right: 10px;
padding-bottom: 0px;
padding-left: 10px;
}
.referenceTd {
border: 1px solid gray;
padding-top: 0px;
padding-right: 10px;
padding-bottom: 0px;
padding-left: 10px;
}
.highlight {
background-color: bisque;
}
</style>

284
io.sc.engine.mv.frontend/src/views/sample/Sample.vue

@ -1,169 +1,131 @@
<template>
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps>
<q-tab name="goodSample" icon="bi-people" :label="$t('io.sc.engine.mv.sample.tabs.goodSample')" />
<q-tab name="scoreRecord" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.sample.tabs.scoreRecord')" />
<q-tab name="defaultRecord" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.sample.tabs.defaultRecord')" />
</q-tabs>
<div>
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps>
<q-tab name="sample" icon="bi-people" :label="$t('io.sc.engine.mv.sample.tabs.sample')" />
<q-tab name="scoreRecord" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.sample.tabs.scoreRecord')" />
<q-tab name="defaultRecord" icon="bi-diagram-3" :label="$t('io.sc.engine.mv.sample.tabs.defaultRecord')" />
</q-tabs>
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive>
<q-tab-panel name="goodSample" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.config.binomial.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/mv/sample/goodSample')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ width: 100, name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ width: 120, name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ width: 120, name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 150, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel'), type: 'text' },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel'), type: 'text' },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper'), type: 'text' },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower'), type: 'text' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate') },
],
},
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="scoreRecord" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.config.binomial.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/mv/sample/scoreRecord')"
:pageable="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ width: 100, name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ width: 120, name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ width: 120, name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 150, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel'), type: 'text' },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel'), type: 'text' },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper'), type: 'text' },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower'), type: 'text' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate') },
],
},
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="defaultRecord" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.config.binomial.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/mv/config/binomial')"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'add', 'edit', 'remove', 'separator', 'resetDefaultValues', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ width: 100, name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ width: 120, name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ width: 120, name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 150, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel'), type: 'text' },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel'), type: 'text' },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper'), type: 'text' },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower'), type: 'text' },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'significanceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.significanceLevel') },
{ name: 'confidenceLevel', label: $t('io.sc.engine.mv.config.binomial.grid.entity.confidenceLevel') },
{ name: 'zUpper', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zUpper') },
{ name: 'zLower', label: $t('io.sc.engine.mv.config.binomial.grid.entity.zLower') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate') },
],
},
}"
></w-grid>
</q-tab-panel>
</q-tab-panels>
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive>
<q-tab-panel name="sample" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.sample.sample.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/mv/sample')"
:pageable="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'customId', label: $t('io.sc.engine.mv.sample.sample.grid.entity.customId') },
{ width: 100, name: 'customName', label: $t('io.sc.engine.mv.sample.sample.grid.entity.customName') },
{ width: 120, name: 'modelId', label: $t('io.sc.engine.mv.sample.sample.grid.entity.modelId') },
{ width: 120, name: 'modelName', label: $t('io.sc.engine.mv.sample.sample.grid.entity.modelName') },
{ width: 110, name: 'defaultConfirmDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.defaultConfirmDate'), format: Formater.dateOnly() },
{ width: 90, name: 'pd', label: $t('io.sc.engine.mv.sample.sample.grid.entity.pd'), align: 'right' },
{ width: 90, name: 'score', label: $t('io.sc.engine.mv.sample.sample.grid.entity.score'), align: 'right' },
{ width: 90, name: 'scoreQuantitative', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreQuantitative'), align: 'right' },
{ width: 90, name: 'scoreQualitative', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreQualitative'), align: 'right' },
{ width: 60, name: 'level', label: $t('io.sc.engine.mv.sample.sample.grid.entity.level'), align: 'right' },
{ width: 110, name: 'scoreBeginDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.beginDate'), format: Formater.dateOnly() },
{ width: 110, name: 'scoreEndDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.endDate'), format: Formater.dateOnly() },
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'customId', label: $t('io.sc.engine.mv.sample.sample.grid.entity.customId') },
{ name: 'customName', label: $t('io.sc.engine.mv.sample.sample.grid.entity.customName') },
{ name: 'modelId', label: $t('io.sc.engine.mv.sample.sample.grid.entity.modelId') },
{ name: 'modelName', label: $t('io.sc.engine.mv.sample.sample.grid.entity.modelName') },
{ name: 'pd', label: $t('io.sc.engine.mv.sample.sample.grid.entity.pd') },
{ name: 'score', label: $t('io.sc.engine.mv.sample.sample.grid.entity.score') },
{ name: 'scoreQuantitative', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreQuantitative') },
{ name: 'scoreQualitative', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreQualitative') },
{ name: 'level', label: $t('io.sc.engine.mv.sample.sample.grid.entity.level') },
{ name: 'scoreBeginDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreBeginDate'), format: Formater.none() },
{ name: 'scoreEndDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.scoreEndDate'), format: Formater.none() },
{ name: 'defaultConfirmDate', label: $t('io.sc.engine.mv.sample.sample.grid.entity.defaultConfirmDate'), format: Formater.none() },
],
},
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="scoreRecord" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.sample.scoreRecord.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/mv/sample/scoreRecord')"
:pageable="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'customId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customId') },
{ width: 100, name: 'customName', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customName') },
{ width: 120, name: 'modelId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.modelId') },
{ width: 150, name: 'modelName', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.modelName') },
{ width: 90, name: 'pd', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.pd'), align: 'right' },
{ width: 90, name: 'score', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.score'), align: 'right' },
{ width: 90, name: 'scoreQuantitative', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQuantitative'), align: 'right' },
{ width: 90, name: 'scoreQualitative', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQualitative'), align: 'right' },
{ width: 60, name: 'level', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.level'), align: 'right' },
{ width: 110, name: 'scoreBeginDate', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreBeginDate'), format: Formater.dateOnly() },
{ width: 110, name: 'scoreEndDate', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreEndDate'), format: Formater.dateOnly() },
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'customId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customId') },
{ name: 'customName', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.customName') },
{ name: 'modelId', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.modelId') },
{ name: 'modelName', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.modelName') },
{ name: 'pd', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.pd') },
{ name: 'score', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.score') },
{ name: 'scoreQuantitative', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQuantitative') },
{ name: 'scoreQualitative', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreQualitative') },
{ name: 'level', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.level') },
{ name: 'scoreBeginDate', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreBeginDate'), format: Formater.none() },
{ name: 'scoreEndDate', label: $t('io.sc.engine.mv.sample.scoreRecord.grid.entity.scoreEndDate'), format: Formater.none() },
],
},
}"
></w-grid>
</q-tab-panel>
<q-tab-panel name="defaultRecord" class="px-0">
<w-grid
:title="$t('io.sc.engine.mv.sample.defaultRecord.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="false"
:data-url="Environment.apiContextPath('/api/mv/sample/defaultRecord')"
:pageable="true"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['refresh', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 100, name: 'customId', label: $t('io.sc.engine.mv.sample.defaultRecord.grid.entity.customId') },
{ width: 100, name: 'defaultConfirmDate', label: $t('io.sc.engine.mv.sample.defaultRecord.grid.entity.defaultConfirmDate') },
]"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'customId', label: $t('io.sc.engine.mv.sample.defaultRecord.grid.entity.customId') },
{ name: 'defaultConfirmDate', label: $t('io.sc.engine.mv.sample.defaultRecord.grid.entity.defaultConfirmDate') },
],
},
}"
></w-grid>
</q-tab-panel>
</q-tab-panels>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, Formater } from 'platform-core';
const selectedTabRef = ref('goodSample');
const selectedTabRef = ref('sample');
</script>

4
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/ShowSampleWebController.java

@ -6,7 +6,6 @@ import io.sc.engine.mv.jpa.repository.GeneralSampleHistoryRepository;
import io.sc.engine.mv.service.result.GeneralSampleHistoryService;
import io.sc.engine.mv.vo.GeneralSampleHistoryVo;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@ -16,8 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
*
*/
@Controller
@RequestMapping("/api/mv/sample/goodSample")
@RequestMapping("/api/mv/sample")
public class ShowSampleWebController extends RestCrudController<GeneralSampleHistoryVo,GeneralSampleHistory, GeneralSampleHistoryId, GeneralSampleHistoryRepository, GeneralSampleHistoryService> {
@Autowired private GeneralSampleHistoryRepository generalSampleHistoryRepository;
}

2
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/core/BinomialWebController.java → io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/coe/BinomialWebController.java

@ -1,4 +1,4 @@
package io.sc.engine.mv.controller.core;
package io.sc.engine.mv.controller.coe;
import io.sc.engine.mv.jpa.entity.CoeBinomialHistory;
import io.sc.engine.mv.jpa.repository.CoeBinomialHistoryRepository;

2
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/core/ChiSquareWebController.java → io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/coe/ChiSquareWebController.java

@ -1,4 +1,4 @@
package io.sc.engine.mv.controller.core;
package io.sc.engine.mv.controller.coe;
import io.sc.engine.mv.jpa.entity.CoeChiSquareHistory;
import io.sc.engine.mv.jpa.repository.CoeChiSquareHistoryRepository;

21
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sample/DefaultRecordWebController.java

@ -0,0 +1,21 @@
package io.sc.engine.mv.controller.sample;
import io.sc.engine.mv.jpa.entity.DefaultRecord;
import io.sc.engine.mv.jpa.entity.id.DefaultRecordId;
import io.sc.engine.mv.jpa.repository.DefaultRecordRepository;
import io.sc.engine.mv.service.sample.DefaultRecordService;
import io.sc.engine.mv.vo.DefaultRecordVo;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 评分记录控制器
* @author wangshaoping
*
*/
@RestController
@RequestMapping("/api/mv/sample/defaultRecord")
public class DefaultRecordWebController extends RestCrudController<DefaultRecordVo, DefaultRecord, DefaultRecordId, DefaultRecordRepository, DefaultRecordService> {
}

82
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/CapWebController.java

@ -4,8 +4,10 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;
import io.sc.engine.mv.jpa.entity.GeneralResultHistory;
import io.sc.engine.mv.echart.Option;
import io.sc.engine.mv.echart.Series;
import io.sc.engine.mv.jpa.entity.ScCapHistory;
import io.sc.engine.mv.jpa.entity.id.ScCapHistoryId;
import io.sc.engine.mv.jpa.repository.GeneralResultHistoryRepository;
@ -13,20 +15,20 @@ import io.sc.engine.mv.jpa.repository.ScCapHistoryRepository;
import io.sc.engine.mv.sc.echarts.Coordinates;
import io.sc.engine.mv.service.sc.ScCapHistoryService;
import io.sc.engine.mv.vo.ScCapHistoryVo;
import io.sc.platform.core.util.CollectionUtil;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RestController;
@Controller
@RequestMapping("/mv/sc/cap")
@RestController
@RequestMapping("/api/mv/sc/cap")
public class CapWebController extends RestCrudController<ScCapHistoryVo, ScCapHistory, ScCapHistoryId, ScCapHistoryRepository, ScCapHistoryService> {
//模型验证结果DAO
@Autowired private GeneralResultHistoryRepository generalResultHistoryRepository;
@ -34,43 +36,41 @@ public class CapWebController extends RestCrudController<ScCapHistoryVo, ScCapHi
@Autowired private ScCapHistoryRepository scCapHistoryRepository;
//jdbc 模板
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private MessageSource messageSource;
/**
* 查看模型区分能力验证 CAP 指标数据UI
* @param modelId 模型标识
* @param validateDate 验证日期
* @return UI视图
*/
@RequestMapping("capDataView")
public ModelAndView rocKpiDataView(
@RequestParam(name="modelId",required=false) String modelId,
@RequestParam(name="validateDate",required=false) String validateDate
@GetMapping("option")
public Option cap(@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate,
Locale locale
){
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/capDataView.html");
mv.addObject("removeNavbar", true);
mv.addObject("modelId", modelId);
mv.addObject("validateDate", validateDate);
mv.addObject("distinctModelIdAndNames", CollectionUtil.arrayList2Map(scCapHistoryRepository.findDistinctModelIdAndNames()));
return mv;
}
/**
* 获取模型区分能力 CAP 曲线的 echarts Options
* @param modelId 模型标识
* @param validateDate 验证日期
* @return 模型区分能力 CAP 曲线的 echarts Options javascript
* @throws Exception 违例
*/
@RequestMapping("cap.js")
public ModelAndView cap(
@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate
) throws Exception{
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/echarts/cap.js");
GeneralResultHistory resultSummary =generalResultHistoryRepository.findByModelIdAndValidateDate(modelId, validateDate);
mv.addObject("resultSummary", resultSummary);
mv.addObject("coordinates",getCoordinates(modelId,validateDate));
return mv;
Coordinates coordinates =getCoordinates(modelId,validateDate);
Option option =new Option();
option.setAnimation(false);
option.getTitle().setText(messageSource.getMessage("io.sc.engine.mv.curve.cap.title",null,locale));
option.getTitle().setLeft("center");
option.getGrid().setShow(true);
option.getGrid().setContainLabel(true);
option.getLegend().setTop(30);
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance",null,locale));
//option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance.perfect",null,locale));
//option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance.random",null,locale));
option.getxAxis().setGridIndex(0);
option.getxAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.cap.xAxis.title",null,locale));
option.getxAxis().setNameLocation("middle");
option.getxAxis().setNameGap(30);
option.getxAxis().setSmooth(true);
option.getxAxis().setBoundaryGap(false);
option.getxAxis().getData().addAll(coordinates.getXs());
option.getyAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.cap.yAxis.title",null,locale));
option.getyAxis().setNameLocation("middle");
option.getyAxis().setNameGap(10);
option.getyAxis().setBoundaryGap(false);
Series series =new Series();
series.setName(messageSource.getMessage("io.sc.engine.mv.performance",null,locale));
series.setType("line");
series.getData().addAll(coordinates.getY1s());
option.getSeries().add(series);
return option;
}
/**

89
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/KsWebController.java

@ -4,8 +4,10 @@ import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;
import io.sc.engine.mv.jpa.entity.GeneralResultHistory;
import io.sc.engine.mv.echart.Option;
import io.sc.engine.mv.echart.Series;
import io.sc.engine.mv.jpa.entity.ScKsHistory;
import io.sc.engine.mv.jpa.entity.id.ScKsHistoryId;
import io.sc.engine.mv.jpa.repository.GeneralResultHistoryRepository;
@ -13,62 +15,69 @@ import io.sc.engine.mv.jpa.repository.ScKsHistoryRepository;
import io.sc.engine.mv.sc.echarts.Coordinates;
import io.sc.engine.mv.service.sc.ScKsHistoryService;
import io.sc.engine.mv.vo.ScKsHistoryVo;
import io.sc.platform.core.util.CollectionUtil;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RestController;
@Controller
@RequestMapping("/mv/sc/ks")
@RestController
@RequestMapping("/api/mv/sc/ks")
public class KsWebController extends RestCrudController<ScKsHistoryVo, ScKsHistory, ScKsHistoryId, ScKsHistoryRepository, ScKsHistoryService> {
//模型验证结果DAO
@Autowired private GeneralResultHistoryRepository generalResultHistoryRepository;
//jdbc 模板
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private MessageSource messageSource;
/**
* 查看模型区分能力验证 KS 指标数据UI
* @param modelId 模型标识
* @param validateDate 验证日期
* @return UI视图
*/
@RequestMapping("ksDataView")
public ModelAndView rocDataView(
@RequestParam(name="modelId",required=false) String modelId,
@RequestParam(name="validateDate",required=false) String validateDate
@GetMapping("option")
public Option ks(@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate,
Locale locale
){
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/ksDataView.html");
mv.addObject("removeNavbar", true);
mv.addObject("modelId", modelId);
mv.addObject("validateDate", validateDate);
mv.addObject("distinctModelIdAndNames", CollectionUtil.arrayList2Map(service.getRepository().findDistinctModelIdAndNames()));
return mv;
}
Coordinates coordinates =getCoordinates(modelId,validateDate);
Option option =new Option();
option.setAnimation(false);
option.getTitle().setText(messageSource.getMessage("io.sc.engine.mv.curve.ks.title",null,locale));
option.getTitle().setLeft("center");
option.getGrid().setShow(true);
option.getGrid().setContainLabel(true);
option.getLegend().setTop(30);
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.curve.ks.series1.title",null,locale));
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.curve.ks.series2.title",null,locale));
option.getxAxis().setGridIndex(0);
option.getxAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.ks.xAxis.title",null,locale));
option.getxAxis().setNameLocation("middle");
option.getxAxis().setNameGap(30);
option.getxAxis().setSmooth(true);
option.getxAxis().setBoundaryGap(false);
option.getxAxis().getData().addAll(coordinates.getXs());
option.getyAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.ks.yAxis.title",null,locale));
option.getyAxis().setNameLocation("middle");
option.getyAxis().setNameGap(10);
option.getyAxis().setBoundaryGap(false);
/**
* 获取模型区分能力 KS 曲线的 echarts Options
* @param modelId 模型标识
* @param validateDate 验证日期
* @return 模型区分能力 KS 曲线的 echarts Options javascript
* @throws Exception 违例
*/
@RequestMapping("ks.js")
public ModelAndView ks(
@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate
) throws Exception{
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/echarts/ks.js");
GeneralResultHistory resultSummary =generalResultHistoryRepository.findByModelIdAndValidateDate(modelId, validateDate);
mv.addObject("resultSummary", resultSummary);
mv.addObject("coordinates",getCoordinates(modelId,validateDate));
return mv;
Series series1 =new Series();
series1.setName(messageSource.getMessage("io.sc.engine.mv.curve.ks.series1.title",null,locale));
series1.setType("line");
series1.getData().addAll(coordinates.getY1s());
Series series2 =new Series();
series2.setName(messageSource.getMessage("io.sc.engine.mv.curve.ks.series2.title",null,locale));
series2.setType("line");
series2.getData().addAll(coordinates.getY2s());
option.getSeries().add(series1);
option.getSeries().add(series2);
return option;
}
/**

80
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/sc/RocWebController.java

@ -1,6 +1,7 @@
package io.sc.engine.mv.controller.sc;
import io.sc.engine.mv.jpa.entity.GeneralResultHistory;
import io.sc.engine.mv.echart.Option;
import io.sc.engine.mv.echart.Series;
import io.sc.engine.mv.jpa.entity.ScRocHistory;
import io.sc.engine.mv.jpa.entity.id.ScRocHistoryId;
import io.sc.engine.mv.jpa.repository.GeneralResultHistoryRepository;
@ -8,67 +9,64 @@ import io.sc.engine.mv.jpa.repository.ScRocHistoryRepository;
import io.sc.engine.mv.sc.echarts.Coordinates;
import io.sc.engine.mv.service.sc.ScRocHistoryService;
import io.sc.engine.mv.vo.ScRocHistoryVo;
import io.sc.platform.core.util.CollectionUtil;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Locale;
@Controller
@RequestMapping("/mv/sc/roc")
@RestController
@RequestMapping("/api/mv/sc/roc")
public class RocWebController extends RestCrudController<ScRocHistoryVo, ScRocHistory, ScRocHistoryId, ScRocHistoryRepository, ScRocHistoryService> {
//模型验证结果DAO
@Autowired private GeneralResultHistoryRepository generalResultHistoryRepository;
//jdbc 模板
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private MessageSource messageSource;
/**
* 查看模型区分能力验证 ROC 指标数据UI
* @param modelId 模型标识
* @param validateDate 验证日期
* @return UI视图
*/
@RequestMapping("rocDataView")
public ModelAndView rocDataView(
@RequestParam(name="modelId",required=false) String modelId,
@RequestParam(name="validateDate",required=false) String validateDate
@GetMapping("option")
public Option roc(@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate,
Locale locale
){
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/rocDataView.html");
mv.addObject("removeNavbar", true);
mv.addObject("modelId", modelId);
mv.addObject("validateDate", validateDate);
mv.addObject("distinctModelIdAndNames", CollectionUtil.arrayList2Map(service.getRepository().findDistinctModelIdAndNames()));
return mv;
}
/**
* 获取模型区分能力 ROC 曲线的 echarts Options
* @param modelId 模型标识
* @param validateDate 验证日期
* @return 模型区分能力 ROC 曲线的 echarts Options javascript
* @throws Exception 违例
*/
@RequestMapping("roc.js")
public ModelAndView roc(
@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate
) throws Exception{
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/sc/echarts/roc.js");
GeneralResultHistory resultSummary =generalResultHistoryRepository.findByModelIdAndValidateDate(modelId, validateDate);
mv.addObject("resultSummary", resultSummary);
mv.addObject("coordinates",getCoordinates(modelId,validateDate));
return mv;
Coordinates coordinates =getCoordinates(modelId,validateDate);
Option option =new Option();
option.setAnimation(false);
option.getTitle().setText(messageSource.getMessage("io.sc.engine.mv.curve.roc.title",null,locale));
option.getTitle().setLeft("center");
option.getLegend().setTop(30);
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance",null,locale));
//option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance.perfect",null,locale));
//option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.performance.random",null,locale));
option.getxAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.roc.xAxis.title",null,locale));
option.getxAxis().setNameLocation("middle");
option.getxAxis().setNameGap(30);
option.getxAxis().setSmooth(true);
option.getxAxis().setBoundaryGap(false);
option.getxAxis().getAxisTick().setInterval(0);
option.getxAxis().getData().addAll(coordinates.getXs());
option.getyAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.roc.yAxis.title",null,locale));
option.getyAxis().setNameLocation("middle");
option.getyAxis().setNameGap(10);
option.getyAxis().setBoundaryGap(false);
Series series =new Series();
series.setName(messageSource.getMessage("io.sc.engine.mv.performance",null,locale));
series.setType("line");
series.getData().addAll(coordinates.getY1s());
option.getSeries().add(series);
return option;
}
/**

88
io.sc.engine.mv/src/main/java/io/sc/engine/mv/controller/st/PsiWebController.java

@ -1,12 +1,7 @@
package io.sc.engine.mv.controller.st;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import io.sc.engine.mv.jpa.entity.GeneralResultHistory;
import io.sc.engine.mv.echart.Option;
import io.sc.engine.mv.echart.Series;
import io.sc.engine.mv.jpa.entity.StPsiHistory;
import io.sc.engine.mv.jpa.entity.id.StPsiHistoryId;
import io.sc.engine.mv.jpa.repository.GeneralResultHistoryRepository;
@ -14,47 +9,74 @@ import io.sc.engine.mv.jpa.repository.StPsiHistoryRepository;
import io.sc.engine.mv.sc.echarts.XyCoordinates;
import io.sc.engine.mv.service.st.StPsiHistoryService;
import io.sc.engine.mv.vo.StPsiHistoryVo;
import io.sc.platform.core.util.CollectionUtil;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RestController;
@Controller
@RequestMapping("/mv/st/psi")
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.Locale;
@RestController
@RequestMapping("/api/mv/st/psi")
public class PsiWebController extends RestCrudController<StPsiHistoryVo, StPsiHistory, StPsiHistoryId, StPsiHistoryRepository, StPsiHistoryService> {
@Autowired private GeneralResultHistoryRepository generalResultHistoryRepository;
@Autowired private JdbcTemplate jdbcTemplate;
@Autowired private MessageSource messageSource;
@RequestMapping("psiDataView")
public ModelAndView rocKpiDataView(
@RequestParam(name="modelId",required=false) String modelId,
@RequestParam(name="validateDate",required=false) String validateDate
@GetMapping("option")
public Option cap(@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate,
Locale locale
){
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/st/psiDataView.html");
mv.addObject("removeNavbar", true);
mv.addObject("modelId", modelId);
mv.addObject("validateDate", validateDate);
mv.addObject("distinctModelIdAndNames", CollectionUtil.arrayList2Map(service.getRepository().findDistinctModelIdAndNames()));
return mv;
}
XyCoordinates<Integer> coordinates =getCoordinates(modelId,validateDate);
Option option =new Option();
option.setAnimation(false);
option.getTitle().setText(messageSource.getMessage("io.sc.engine.mv.curve.psi.title",null,locale));
option.getTitle().setLeft("center");
option.getGrid().setShow(true);
option.getGrid().setContainLabel(true);
option.getLegend().setTop(30);
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.curve.psi.series1.title",null,locale));
option.getLegend().getData().add(messageSource.getMessage("io.sc.engine.mv.curve.psi.series2.title",null,locale));
option.getxAxis().setGridIndex(0);
option.getxAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.psi.xAxis.title",null,locale));
option.getxAxis().setNameLocation("middle");
option.getxAxis().setNameGap(30);
option.getxAxis().setSmooth(true);
option.getxAxis().setBoundaryGap(false);
option.getxAxis().getData().addAll(coordinates.getXs());
option.getyAxis().setName(messageSource.getMessage("io.sc.engine.mv.curve.psi.yAxis.title",null,locale));
option.getyAxis().setNameLocation("middle");
option.getyAxis().setNameGap(10);
option.getyAxis().setBoundaryGap(false);
Series series1 =new Series();
series1.setName(messageSource.getMessage("io.sc.engine.mv.curve.psi.series1.title",null,locale));
series1.setType("bar");
series1.getData().addAll(coordinates.getY1s());
Series series2 =new Series();
series2.setName(messageSource.getMessage("io.sc.engine.mv.curve.psi.series2.title",null,locale));
series2.setType("bar");
series2.getData().addAll(coordinates.getY2s());
@RequestMapping("psi.js")
public ModelAndView cap(
@RequestParam("modelId") String modelId,
@RequestParam("validateDate") String validateDate
) throws Exception{
ModelAndView mv =new ModelAndView("org/wsp/model/validator/view/st/echarts/psi.js");
GeneralResultHistory resultSummary =generalResultHistoryRepository.findByModelIdAndValidateDate(modelId, validateDate);
mv.addObject("resultSummary", resultSummary);
mv.addObject("coordinates",getCoordinates(modelId,validateDate));
return mv;
option.getSeries().add(series1);
option.getSeries().add(series2);
return option;
}
private XyCoordinates<Integer> getCoordinates(final String modelId, final String validateDate){

79
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Axis.java

@ -0,0 +1,79 @@
package io.sc.engine.mv.echart;
import java.util.ArrayList;
import java.util.List;
public class Axis {
private int gridIndex;
private String name;
private String nameLocation;
private int nameGap;
private boolean smooth;
private boolean boundaryGap;
private AxisTick axisTick =new AxisTick();
private List<Object> data =new ArrayList<>();
public int getGridIndex() {
return gridIndex;
}
public void setGridIndex(int gridIndex) {
this.gridIndex = gridIndex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNameLocation() {
return nameLocation;
}
public void setNameLocation(String nameLocation) {
this.nameLocation = nameLocation;
}
public int getNameGap() {
return nameGap;
}
public void setNameGap(int nameGap) {
this.nameGap = nameGap;
}
public boolean isSmooth() {
return smooth;
}
public void setSmooth(boolean smooth) {
this.smooth = smooth;
}
public boolean isBoundaryGap() {
return boundaryGap;
}
public void setBoundaryGap(boolean boundaryGap) {
this.boundaryGap = boundaryGap;
}
public AxisTick getAxisTick() {
return axisTick;
}
public void setAxisTick(AxisTick axisTick) {
this.axisTick = axisTick;
}
public List<Object> getData() {
return data;
}
public void setData(List<Object> data) {
this.data = data;
}
}

13
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/AxisTick.java

@ -0,0 +1,13 @@
package io.sc.engine.mv.echart;
public class AxisTick {
private int interval;
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
}

22
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Grid.java

@ -0,0 +1,22 @@
package io.sc.engine.mv.echart;
public class Grid {
private boolean show =true;
private boolean containLabel =true;
public boolean isShow() {
return show;
}
public void setShow(boolean show) {
this.show = show;
}
public boolean getContainLabel() {
return containLabel;
}
public void setContainLabel(boolean containLabel) {
this.containLabel = containLabel;
}
}

25
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Legend.java

@ -0,0 +1,25 @@
package io.sc.engine.mv.echart;
import java.util.ArrayList;
import java.util.List;
public class Legend {
private int top;
private List<Object> data =new ArrayList<>();
public int getTop() {
return top;
}
public void setTop(int top) {
this.top = top;
}
public List<Object> getData() {
return data;
}
public void setData(List<Object> data) {
this.data = data;
}
}

79
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Option.java

@ -0,0 +1,79 @@
package io.sc.engine.mv.echart;
import java.util.ArrayList;
import java.util.List;
public class Option {
private boolean animation;
private Title title =new Title();
private Grid grid =new Grid();
private Legend legend =new Legend();
private Tooltip tooltip =new Tooltip();
private Axis xAxis =new Axis();
private Axis yAxis=new Axis();
private List<Series> series =new ArrayList<>();
public boolean isAnimation() {
return animation;
}
public void setAnimation(boolean animation) {
this.animation = animation;
}
public Title getTitle() {
return title;
}
public void setTitle(Title title) {
this.title = title;
}
public Grid getGrid() {
return grid;
}
public void setGrid(Grid grid) {
this.grid = grid;
}
public Legend getLegend() {
return legend;
}
public void setLegend(Legend legend) {
this.legend = legend;
}
public Tooltip getTooltip() {
return tooltip;
}
public void setTooltip(Tooltip tooltip) {
this.tooltip = tooltip;
}
public Axis getxAxis() {
return xAxis;
}
public void setxAxis(Axis xAxis) {
this.xAxis = xAxis;
}
public Axis getyAxis() {
return yAxis;
}
public void setyAxis(Axis yAxis) {
this.yAxis = yAxis;
}
public List<Series> getSeries() {
return series;
}
public void setSeries(List<Series> series) {
this.series = series;
}
}

43
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Series.java

@ -0,0 +1,43 @@
package io.sc.engine.mv.echart;
import java.util.ArrayList;
import java.util.List;
public class Series {
private String name;
private String type;
private int barWidth;
private List<Object> data=new ArrayList<>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getBarWidth() {
return barWidth;
}
public void setBarWidth(int barWidth) {
this.barWidth = barWidth;
}
public List<Object> getData() {
return data;
}
public void setData(List<Object> data) {
this.data = data;
}
}

22
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Title.java

@ -0,0 +1,22 @@
package io.sc.engine.mv.echart;
public class Title {
private String text;
private String left;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getLeft() {
return left;
}
public void setLeft(String left) {
this.left = left;
}
}

4
io.sc.engine.mv/src/main/java/io/sc/engine/mv/echart/Tooltip.java

@ -0,0 +1,4 @@
package io.sc.engine.mv.echart;
public class Tooltip {
}

52
io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/DefaultRecord.java

@ -0,0 +1,52 @@
package io.sc.engine.mv.jpa.entity;
import io.sc.engine.mv.jpa.entity.id.DefaultRecordId;
import io.sc.engine.mv.jpa.entity.id.ScoreRecordId;
import io.sc.engine.mv.vo.DefaultRecordVo;
import io.sc.engine.mv.vo.ScoreRecordVo;
import io.sc.platform.orm.entity.BaseEntity;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* 评分记录实体类
*
*/
@Entity
@Table(name="MV_DEFAULT_RECORD")
@IdClass(DefaultRecordId.class)
public class DefaultRecord extends BaseEntity<DefaultRecordVo> {
@Id
@Column(name="FD_CUSTOM_ID")
private String customId;
@Id
@Column(name="FD_DEFAULT_CONFIRM_DATE")
private Date defaultConfirmDate;
@Override
public DefaultRecordVo toVo() {
DefaultRecordVo vo =new DefaultRecordVo();
vo.setCustomId(this.getCustomId());
vo.setDefaultConfirmDate(this.getDefaultConfirmDate());
return vo;
}
public String getCustomId() {
return customId;
}
public void setCustomId(String customId) {
this.customId = customId;
}
public Date getDefaultConfirmDate() {
return defaultConfirmDate;
}
public void setDefaultConfirmDate(Date defaultConfirmDate) {
this.defaultConfirmDate = defaultConfirmDate;
}
}

8
io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/ScoreRecord.java

@ -4,10 +4,7 @@ import io.sc.engine.mv.jpa.entity.id.ScoreRecordId;
import io.sc.engine.mv.vo.ScoreRecordVo;
import io.sc.platform.orm.entity.BaseEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.IdClass;
import javax.persistence.Table;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@ -19,12 +16,14 @@ import java.util.Date;
@Table(name="MV_SCORE_RECORD")
@IdClass(ScoreRecordId.class)
public class ScoreRecord extends BaseEntity<ScoreRecordVo> {
@Id
@Column(name="FD_CUSTOM_ID")
private String customId;
@Column(name="FD_CUSTOM_NAME")
private String customName;
@Id
@Column(name="FD_MODEL_ID")
private String modelId;
@ -46,6 +45,7 @@ public class ScoreRecord extends BaseEntity<ScoreRecordVo> {
@Column(name="FD_LEVEL")
private String level;
@Id
@Column(name="FD_SCORE_BEGIN_DATE")
private Date scoreBeginDate;

39
io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/entity/id/DefaultRecordId.java

@ -0,0 +1,39 @@
package io.sc.engine.mv.jpa.entity.id;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
public class DefaultRecordId implements Serializable{
private String customId;
private Date defaultConfirmDate;
public String getCustomId() {
return customId;
}
public void setCustomId(String customId) {
this.customId = customId;
}
public Date getDefaultConfirmDate() {
return defaultConfirmDate;
}
public void setDefaultConfirmDate(Date defaultConfirmDate) {
this.defaultConfirmDate = defaultConfirmDate;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
DefaultRecordId that = (DefaultRecordId) o;
return Objects.equals(customId, that.customId) && Objects.equals(defaultConfirmDate, that.defaultConfirmDate);
}
@Override
public int hashCode() {
return Objects.hash(customId, defaultConfirmDate);
}
}

11
io.sc.engine.mv/src/main/java/io/sc/engine/mv/jpa/repository/DefaultRecordRepository.java

@ -0,0 +1,11 @@
package io.sc.engine.mv.jpa.repository;
import io.sc.engine.mv.jpa.entity.DefaultRecord;
import io.sc.engine.mv.jpa.entity.ScoreRecord;
import io.sc.engine.mv.jpa.entity.id.DefaultRecordId;
import io.sc.engine.mv.jpa.entity.id.ScoreRecordId;
import io.sc.platform.orm.repository.DaoRepository;
public interface DefaultRecordRepository extends DaoRepository<DefaultRecord, DefaultRecordId> {
}

5
io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/result/impl/GeneralResultHistoryServiceImpl.java

@ -9,5 +9,8 @@ import org.springframework.stereotype.Service;
@Service
public class GeneralResultHistoryServiceImpl extends DaoServiceImpl<GeneralResultHistory, GeneralResultHistoryId, GeneralResultHistoryRepository> implements GeneralResultHistoryService {
@Override
public String[] getDefaultSortBy() {
return new String[]{"-validateDate"};
}
}

9
io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/sample/DefaultRecordService.java

@ -0,0 +1,9 @@
package io.sc.engine.mv.service.sample;
import io.sc.engine.mv.jpa.entity.DefaultRecord;
import io.sc.engine.mv.jpa.entity.id.DefaultRecordId;
import io.sc.engine.mv.jpa.repository.DefaultRecordRepository;
import io.sc.platform.orm.service.DaoService;
public interface DefaultRecordService extends DaoService<DefaultRecord, DefaultRecordId, DefaultRecordRepository> {
}

12
io.sc.engine.mv/src/main/java/io/sc/engine/mv/service/sample/impl/DefaultRecordServiceImpl.java

@ -0,0 +1,12 @@
package io.sc.engine.mv.service.sample.impl;
import io.sc.engine.mv.jpa.entity.DefaultRecord;
import io.sc.engine.mv.jpa.entity.id.DefaultRecordId;
import io.sc.engine.mv.jpa.repository.DefaultRecordRepository;
import io.sc.engine.mv.service.sample.DefaultRecordService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class DefaultRecordServiceImpl extends DaoServiceImpl<DefaultRecord, DefaultRecordId, DefaultRecordRepository> implements DefaultRecordService {
}

29
io.sc.engine.mv/src/main/java/io/sc/engine/mv/vo/DefaultRecordVo.java

@ -0,0 +1,29 @@
package io.sc.engine.mv.vo;
import io.sc.platform.orm.api.vo.AuditorVo;
import io.sc.platform.orm.api.vo.BaseVo;
import java.math.BigDecimal;
import java.util.Date;
public class DefaultRecordVo extends BaseVo {
private String customId;
private Date defaultConfirmDate;
public String getCustomId() {
return customId;
}
public void setCustomId(String customId) {
this.customId = customId;
}
public Date getDefaultConfirmDate() {
return defaultConfirmDate;
}
public void setDefaultConfirmDate(Date defaultConfirmDate) {
this.defaultConfirmDate = defaultConfirmDate;
}
}

4
io.sc.engine.mv/src/main/java/io/sc/engine/mv/vo/ScoreRecordVo.java

@ -1,12 +1,12 @@
package io.sc.engine.mv.vo;
import io.sc.platform.orm.api.vo.AuditorVo;
import io.sc.platform.orm.api.vo.BaseVo;
import java.math.BigDecimal;
import java.util.Date;
public class ScoreRecordVo extends AuditorVo {
public class ScoreRecordVo extends BaseVo {
private String customId;
private String customName;
private String modelId;

11
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums.properties

@ -1,2 +1,11 @@
io.sc.engine.mv.ModelType.IMPORT_FROM_SCORE_RECORD=Import From Score Record
io.sc.engine.mv.ModelType.MANUAL=Manual
io.sc.engine.mv.ModelType.MANUAL=Manual
io.sc.engine.mv.ExecuteMode.MANUAL=Manual
io.sc.engine.mv.ExecuteMode.BATCH=Batch
io.sc.engine.mv.ScaleType.SINGLE=Single
io.sc.engine.mv.ScaleType.MULTIPLE=Multiple
io.sc.engine.mv.CoeResult.PASS=Pass
io.sc.engine.mv.CoeResult.NOT_PASS=Not Pass

11
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums_tw_CN.properties

@ -1,2 +1,11 @@
io.sc.engine.mv.ModelType.IMPORT_FROM_SCORE_RECORD=\u5F9E\u8A55\u5206\u8A18\u9304\u8868\u4E2D\u5C0E\u5165
io.sc.engine.mv.ModelType.MANUAL=\u624B\u5DE5\u5275\u5EFA
io.sc.engine.mv.ModelType.MANUAL=\u624B\u5DE5\u5275\u5EFA
io.sc.engine.mv.ExecuteMode.MANUAL=\u624B\u5DE5
io.sc.engine.mv.ExecuteMode.BATCH=\u8DD1\u6279
io.sc.engine.mv.ScaleType.SINGLE=\u55AE\u500B
io.sc.engine.mv.ScaleType.MULTIPLE=\u591A\u500B
io.sc.engine.mv.CoeResult.PASS=\u901A\u904E
io.sc.engine.mv.CoeResult.NOT_PASS=\u672A\u901A\u904E

11
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/enums_zh_CN.properties

@ -1,2 +1,11 @@
io.sc.engine.mv.ModelType.IMPORT_FROM_SCORE_RECORD=\u4ECE\u8BC4\u5206\u8BB0\u5F55\u8868\u4E2D\u5BFC\u5165
io.sc.engine.mv.ModelType.MANUAL=\u624B\u5DE5\u521B\u5EFA
io.sc.engine.mv.ModelType.MANUAL=\u624B\u5DE5\u521B\u5EFA
io.sc.engine.mv.ExecuteMode.MANUAL=\u624B\u5DE5
io.sc.engine.mv.ExecuteMode.BATCH=\u8DD1\u6279
io.sc.engine.mv.ScaleType.SINGLE=\u5355\u4E2A
io.sc.engine.mv.ScaleType.MULTIPLE=\u591A\u4E2A
io.sc.engine.mv.CoeResult.PASS=\u901A\u8FC7
io.sc.engine.mv.CoeResult.NOT_PASS=\u672A\u901A\u8FC7

30
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages.properties

@ -8,8 +8,8 @@ io.sc.engine.mv.executor.ResultExecutor.description=save the result and runtime
io.sc.engine.mv.executor.ResultInitExecutor.name=Result Initializer
io.sc.engine.mv.executor.ResultInitExecutor.description=clear previous result
io.sc.engine.mv.executor.SampleCountExecutor.name=Good Sample Counter
io.sc.engine.mv.executor.SampleCountExecutor.description=count the score records and default records
io.sc.engine.mv.executor.SampleCountExecutor.name=Sample Counter
io.sc.engine.mv.executor.SampleCountExecutor.description=count the good and default samples
io.sc.engine.mv.executor.SampleExecutor.name=Good Sample Handler
io.sc.engine.mv.executor.SampleExecutor.description=generate good sample
@ -49,3 +49,29 @@ io.sc.engine.mv.executor.CoeChiSquareExecutor.description=chi-square validater
io.sc.engine.mv.executor.CoeBinomialExecutor.name=Binomial
io.sc.engine.mv.executor.CoeBinomialExecutor.description=binomial validater
io.sc.engine.mv.performance=Model Performance
io.sc.engine.mv.performance.random=Random Model Performance
io.sc.engine.mv.performance.perfect=Perfect Model Performance
io.sc.engine.mv.curve.roc.title=ROC Curve
io.sc.engine.mv.curve.roc.xAxis.title=False Alarm Rate
io.sc.engine.mv.curve.roc.yAxis.title=Hit Rate
io.sc.engine.mv.curve.roc.series.title=Current Model
io.sc.engine.mv.curve.cap.title=CAP Curve
io.sc.engine.mv.curve.cap.xAxis.title=Percent of Sample
io.sc.engine.mv.curve.cap.yAxis.title=Percent of Default
io.sc.engine.mv.curve.cap.series.title=Current Model
io.sc.engine.mv.curve.ks.title=KS Curve
io.sc.engine.mv.curve.ks.xAxis.title=Score
io.sc.engine.mv.curve.ks.yAxis.title=Rate
io.sc.engine.mv.curve.ks.series1.title=Normal Sample Rate
io.sc.engine.mv.curve.ks.series2.title=Default Sample Rate
io.sc.engine.mv.curve.psi.title=PSI Bar
io.sc.engine.mv.curve.psi.xAxis.title=Score Segment
io.sc.engine.mv.curve.psi.yAxis.title=Sample Count
io.sc.engine.mv.curve.psi.series1.title=Consult
io.sc.engine.mv.curve.psi.series2.title=Application

73
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_tw_CN.properties

@ -0,0 +1,73 @@
# executor
io.sc.engine.mv.executor.DatabaseInitExecutor.name=\u6578\u64DA\u5EAB\u521D\u59CB\u5316\u57F7\u884C\u5668
io.sc.engine.mv.executor.DatabaseInitExecutor.description=\u5728\u6A21\u578B\u9A57\u8B49\u57F7\u884C\u524D\u5C0D\u6578\u64DA\u5EAB\u9032\u884C\u5FC5\u8981\u7684\u521D\u59CB\u5316\u64CD\u4F5C
io.sc.engine.mv.executor.ResultExecutor.name=\u6A21\u578B\u9A57\u8B49\u7D50\u679C\u57F7\u884C\u5668
io.sc.engine.mv.executor.ResultExecutor.description=\u5C07\u6A21\u578B\u9A57\u8B49\u7D50\u679C\u5B58\u5165\u9A57\u8B49\u7D50\u679C\u6B77\u53F2\u8868\u4E2D,\u4E26\u5C07\u57F7\u884C\u74B0\u5883\u548C\u53C3\u6578\u4FDD\u5B58
io.sc.engine.mv.executor.ResultInitExecutor.name=\u6A21\u578B\u9A57\u8B49\u7D50\u679C\u521D\u59CB\u5316\u57F7\u884C\u5668
io.sc.engine.mv.executor.ResultInitExecutor.description=\u6E05\u7A7A\u4E0A\u4E00\u6B21\u904B\u884C\u7684\u6A21\u578B\u9A57\u8B49\u7D50\u679C,\u70BA\u672C\u6B21\u6A21\u578B\u9A57\u8B49\u7D50\u679C\u6E96\u5099\u521D\u59CB\u5316\u74B0\u5883
io.sc.engine.mv.executor.SampleCountExecutor.name=\u6A23\u672C\u6578\u64DA\u7D71\u8A08\u57F7\u884C\u5668
io.sc.engine.mv.executor.SampleCountExecutor.description=\u7D71\u8A08\u5408\u683C\u6A23\u672C\u7684\u500B\u6578\u548C\u9055\u7D04\u6A23\u672C\u500B\u6578
io.sc.engine.mv.executor.SampleExecutor.name=\u5408\u683C\u6A23\u672C\u8655\u7406\u57F7\u884C\u5668
io.sc.engine.mv.executor.SampleExecutor.description=\u751F\u6210\u5408\u683C\u6A23\u672C\u96C6
io.sc.engine.mv.executor.ScCapExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,CAP \u66F2\u7DDA\u57F7\u884C\u5668(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScCapExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7DDA(\u7E3D\u9AD4),\u540C\u6642\u8A08\u7B97 AR \u503C(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScCapQualitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,CAP \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u6027)
io.sc.engine.mv.executor.ScCapQualitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7DDA(\u5B9A\u6027),\u540C\u6642\u8A08\u7B97 AR \u503C(\u5B9A\u6027)
io.sc.engine.mv.executor.ScCapQuantitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,CAP \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u91CF)
io.sc.engine.mv.executor.ScCapQuantitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 CAP \u66F2\u7DDA(\u5B9A\u91CF),\u540C\u6642\u8A08\u7B97 AR \u503C(\u5B9A\u91CF)
io.sc.engine.mv.executor.ScKsExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,KS \u66F2\u7DDA\u57F7\u884C\u5668(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScKsExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7DDA(\u7E3D\u9AD4),\u540C\u6642\u8A08\u7B97 KS \u503C(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScKsQualitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,KS \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u6027)
io.sc.engine.mv.executor.ScKsQualitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7DDA(\u5B9A\u6027),\u540C\u6642\u8A08\u7B97 KS \u503C(\u5B9A\u6027)
io.sc.engine.mv.executor.ScKsQuantitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,KS \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u91CF)
io.sc.engine.mv.executor.ScKsQuantitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 KS \u66F2\u7DDA(\u5B9A\u91CF),\u540C\u6642\u8A08\u7B97 KS \u503C(\u5B9A\u91CF)
io.sc.engine.mv.executor.ScRocExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,ROC \u66F2\u7DDA\u57F7\u884C\u5668(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScRocExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7DDA(\u7E3D\u9AD4),\u540C\u6642\u8A08\u7B97 AUC \u503C(\u7E3D\u9AD4)
io.sc.engine.mv.executor.ScRocQualitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,ROC \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u6027)
io.sc.engine.mv.executor.ScRocQualitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7DDA(\u5B9A\u6027),\u540C\u6642\u8A08\u7B97 AUC \u503C(\u5B9A\u6027)
io.sc.engine.mv.executor.ScRocQuantitativeExecutor.name=\u6A21\u578B\u5340\u5206\u80FD\u529B\u9A57\u8B49,ROC \u66F2\u7DDA\u57F7\u884C\u5668(\u5B9A\u91CF)
io.sc.engine.mv.executor.ScRocQuantitativeExecutor.description=\u9A57\u8B49\u6A21\u578B\u5340\u5206\u80FD\u529B,\u751F\u6210 ROC \u66F2\u7DDA(\u5B9A\u91CF),\u540C\u6642\u8A08\u7B97 AUC \u503C(\u5B9A\u91CF)
io.sc.engine.mv.executor.StPsiExecutor.name=\u6A21\u578B\u7A69\u5B9A\u6027\u9A57\u8B49,\u6A23\u672C\u7FA4\u9AD4\u7A69\u5B9A\u6027\u5831\u544A\u57F7\u884C\u5668
io.sc.engine.mv.executor.StPsiExecutor.description=\u751F\u6210\u6A23\u672C\u7FA4\u9AD4\u7A69\u5B9A\u6027\u5831\u544A,\u540C\u6642\u8A08\u7B97 PSI \u503C
io.sc.engine.mv.executor.CoeChiSquareExecutor.name=\u6A21\u578B\u4F30\u503C\u6E96\u78BA\u6027\u9A57\u8B49(\u5361\u65B9\u6AA2\u9A57)
io.sc.engine.mv.executor.CoeChiSquareExecutor.description=\u8A08\u7B97\u5361\u65B9\u6AA2\u9A57\u503C
io.sc.engine.mv.executor.CoeBinomialExecutor.name=\u6A21\u578B\u4F30\u503C\u6E96\u78BA\u6027\u9A57\u8B49(\u4E8C\u9805\u6AA2\u9A57)
io.sc.engine.mv.executor.CoeBinomialExecutor.description=\u4E8C\u9805\u6AA2\u9A57\u503C
io.sc.engine.mv.performance=\u6A21\u578B\u8868\u73FE
io.sc.engine.mv.performance.random=\u96A8\u6A5F\u6A21\u578B\u8868\u73FE
io.sc.engine.mv.performance.perfect=\u5B8C\u7F8E\u6A21\u578B\u8868\u73FE
io.sc.engine.mv.curve.roc.title=ROC \u66F2\u7DDA
io.sc.engine.mv.curve.roc.xAxis.title=\u8AA4\u8B66\u7387
io.sc.engine.mv.curve.roc.yAxis.title=\u547D\u4E2D\u7387
io.sc.engine.mv.curve.roc.series.title=\u6A21\u578B\u8868\u73FE
io.sc.engine.mv.curve.cap.title=CAP \u66F2\u7DDA
io.sc.engine.mv.curve.cap.xAxis.title=\u6A23\u672C\u500B\u6578\u767E\u5206\u6BD4
io.sc.engine.mv.curve.cap.yAxis.title=\u9055\u7D04\u6A23\u672C\u500B\u6578\u767E\u5206\u6BD4
io.sc.engine.mv.curve.cap.series.title=\u6A21\u578B\u8868\u73FE
io.sc.engine.mv.curve.ks.title=KS \u66F2\u7DDA
io.sc.engine.mv.curve.ks.xAxis.title=\u8A55\u5206
io.sc.engine.mv.curve.ks.yAxis.title=\u6A23\u672C\u5360\u6BD4
io.sc.engine.mv.curve.ks.series1.title=\u6B63\u5E38\u6A23\u672C\u5360\u6BD4
io.sc.engine.mv.curve.ks.series2.title=\u9055\u7D04\u6A23\u672C\u5360\u6BD4
io.sc.engine.mv.curve.psi.title=PSI \u67F1\u72C0\u5716
io.sc.engine.mv.curve.psi.xAxis.title=\u5206\u6578\u6BB5
io.sc.engine.mv.curve.psi.yAxis.title=\u6A23\u672C\u6578
io.sc.engine.mv.curve.psi.series1.title=\u54A8\u8A62\u5EFA\u6A21\u6642
io.sc.engine.mv.curve.psi.series2.title=\u6A21\u578B\u61C9\u7528\u6642

26
io.sc.engine.mv/src/main/resources/io/sc/engine/mv/i18n/messages_zh_CN.properties

@ -8,8 +8,8 @@ io.sc.engine.mv.executor.ResultExecutor.description=\u5C06\u6A21\u578B\u9A8C\u8B
io.sc.engine.mv.executor.ResultInitExecutor.name=\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u521D\u59CB\u5316\u6267\u884C\u5668
io.sc.engine.mv.executor.ResultInitExecutor.description=\u6E05\u7A7A\u4E0A\u4E00\u6B21\u8FD0\u884C\u7684\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C,\u4E3A\u672C\u6B21\u6A21\u578B\u9A8C\u8BC1\u7ED3\u679C\u51C6\u5907\u521D\u59CB\u5316\u73AF\u5883
io.sc.engine.mv.executor.SampleCountExecutor.name=\u5408\u683C\u6837\u672C\u6570\u91CF\u7EDF\u8BA1\u6267\u884C\u5668
io.sc.engine.mv.executor.SampleCountExecutor.description=\u7EDF\u8BA1\u5408\u683C\u6837\u672C\u7684\u603B\u4E2A\u6570\u548C\u4E8B\u5B9E\u8FDD\u7EA6\u4E2A\u6570
io.sc.engine.mv.executor.SampleCountExecutor.name=\u6837\u672C\u6570\u91CF\u7EDF\u8BA1\u6267\u884C\u5668
io.sc.engine.mv.executor.SampleCountExecutor.description=\u7EDF\u8BA1\u5408\u683C\u6837\u672C\u7684\u4E2A\u6570\u548C\u8FDD\u7EA6\u6A23\u672C\u4E2A\u6570
io.sc.engine.mv.executor.SampleExecutor.name=\u5408\u683C\u6837\u672C\u5904\u7406\u6267\u884C\u5668
io.sc.engine.mv.executor.SampleExecutor.description=\u751F\u6210\u5408\u683C\u6837\u672C\u96C6
@ -49,3 +49,25 @@ io.sc.engine.mv.executor.CoeChiSquareExecutor.description=\u8BA1\u7B97\u5361\u65
io.sc.engine.mv.executor.CoeBinomialExecutor.name=\u6A21\u578B\u4F30\u503C\u51C6\u786E\u6027\u9A8C\u8BC1(\u4E8C\u9879\u68C0\u9A8C)
io.sc.engine.mv.executor.CoeBinomialExecutor.description=\u4E8C\u9879\u68C0\u9A8C\u503C
io.sc.engine.mv.performance=\u6A21\u578B\u8868\u73B0
io.sc.engine.mv.performance.random=\u968F\u673A\u6A21\u578B\u8868\u73B0
io.sc.engine.mv.performance.perfect=\u5B8C\u7F8E\u6A21\u578B\u8868\u73B0
io.sc.engine.mv.curve.roc.title=ROC \u66F2\u7EBF
io.sc.engine.mv.curve.roc.xAxis.title=\u8BEF\u8B66\u7387
io.sc.engine.mv.curve.roc.yAxis.title=\u547D\u4E2D\u7387
io.sc.engine.mv.curve.roc.series.title=\u6A21\u578B\u8868\u73B0
io.sc.engine.mv.curve.cap.title=CAP \u66F2\u7EBF
io.sc.engine.mv.curve.cap.xAxis.title=\u6837\u672C\u4E2A\u6570\u767E\u5206\u6BD4
io.sc.engine.mv.curve.cap.yAxis.title=\u8FDD\u7EA6\u6837\u672C\u4E2A\u6570\u767E\u5206\u6BD4
io.sc.engine.mv.curve.cap.series.title=\u6A21\u578B\u8868\u73B0
io.sc.engine.mv.curve.ks.title=KS \u66F2\u7EBF
io.sc.engine.mv.curve.ks.xAxis.title=\u8BC4\u5206
io.sc.engine.mv.curve.ks.yAxis.title=\u6837\u672C\u5360\u6BD4
io.sc.engine.mv.curve.ks.series1.title=\u6B63\u5E38\u6837\u672C\u5360\u6BD4
io.sc.engine.mv.curve.ks.series2.title=\u8FDD\u7EA6\u6837\u672C\u5360\u6BD4
io.sc.engine.mv.curve.psi.title=PSI \u67F1\u72B6\u56FE
io.sc.engine.mv.curve.psi.xAxis.title=\u5206\u6570\u6BB5
io.sc.engine.mv.curve.psi.yAxis.title=\u6837\u672C\u6570
io.sc.engine.mv.curve.psi.series1.title=\u54A8\u8BE2\u5EFA\u6A21\u65F6
io.sc.engine.mv.curve.psi.series2.title=\u6A21\u578B\u5E94\u7528\u65F6

2
io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/RestarterInterceptorAutoConfiguration.java

@ -37,7 +37,7 @@ import java.util.Set;
public class RestarterInterceptorAutoConfiguration implements WebMvcConfigurer {
private static final String[] excludePathPatterns =new String[] {
"/" + Environment.getInstance().getApplicationName() + "/**",
"/io.sc.platform.core/**",
"/io.sc.platform.coe/**",
"/error"
};
@Autowired private ApplicationContext applicationContext;

2
io.sc.platform.core/src/main/java/io/sc/platform/core/controller/RestarterWebController.java

@ -14,7 +14,7 @@ import org.springframework.web.servlet.ModelAndView;
* 当系统检测到需要重启时, 所有的请求都将被重定向到本控制器
*/
@Controller
@RequestMapping("/io.sc.platform.core")
@RequestMapping("/io.sc.platform.coe")
public class RestarterWebController {
@RequestMapping(value="restarter.html")
public ModelAndView restarter(Model model){

10
io.sc.platform.core/src/main/java/io/sc/platform/core/enums/GoodLevel.java

@ -0,0 +1,10 @@
package io.sc.platform.core.enums;
public enum GoodLevel {
POOR,
MEDIUM,
GOOD,
VERY_GOOD,
EXCELLENT,
PERFECT;
}

2
io.sc.platform.core/src/main/java/io/sc/platform/core/interceptor/RestarterInterceptor.java

@ -15,7 +15,7 @@ public class RestarterInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(RuntimeStatus.RESTARTING.equals(Environment.getInstance().getRuntimeStatus())) {
RedirectView view = new RedirectView("/io.sc.platform.core/restarter.html");
RedirectView view = new RedirectView("/io.sc.platform.coe/restarter.html");
view.setContextRelative(true);
view.render(null, request, response);
return false;

6
io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/BeforeEnvironmentProcessor.java

@ -139,21 +139,21 @@ public class BeforeEnvironmentProcessor implements EnvironmentPostProcessor, Ord
exportConfigurationFile(new String[]{
"classpath:/logback-spring.xml",
"classpath:/config/logback-spring.xml",
"classpath:/io/sc/platform/core/config/logback-spring.xml"
"classpath:/io/sc/platform/coe/config/logback-spring.xml"
},"/config/logback-spring.xml",environment);
// banner.txt
exportConfigurationFile(new String[]{
"classpath:/banner.txt",
"classpath:/config/banner.txt",
"classpath:/io/sc/platform/core/config/banner.txt"
"classpath:/io/sc/platform/coe/config/banner.txt"
},"/config/banner.txt",environment);
// license.txt
exportConfigurationFile(new String[]{
"classpath:/license.txt",
"classpath:/config/license.txt",
"classpath:/io/sc/platform/core/config/license.txt"
"classpath:/io/sc/platform/coe/config/license.txt"
},"/config/license.txt",environment);
}

4
io.sc.platform.core/src/main/java/io/sc/platform/core/support/ProgressInfo.java

@ -12,9 +12,9 @@ public class ProgressInfo {
//完成时间
private Date completedDatetime;
//总计需要执行的数量
private AtomicInteger totalWeight;
private AtomicInteger totalWeight =new AtomicInteger(0);
//当前已经执行的数量
private AtomicInteger currentWeight;
private AtomicInteger currentWeight =new AtomicInteger(0);
//执行进度消息
private String messageKey;
//是否出现错误

8
io.sc.platform.core/src/main/java/io/sc/platform/core/util/EnumUtil.java

@ -16,7 +16,7 @@ public class EnumUtil {
* 将枚举转换成 Map
* 示例:
* 1) 枚举定义
* package io.sc.platform.core.util;
* package io.sc.platform.coe.util;
* enum Color{
* RED,YELLOW,GREEN
* }
@ -28,9 +28,9 @@ public class EnumUtil {
* }
*
* 3) 结果
* RED : io.sc.platform.core.util.Color.RED
* YELLOW : io.sc.platform.core.util.Color.YELLOW
* GREEN : io.sc.platform.core.util.Color.GREEN
* RED : io.sc.platform.coe.util.Color.RED
* YELLOW : io.sc.platform.coe.util.Color.YELLOW
* GREEN : io.sc.platform.coe.util.Color.GREEN
* @param type 枚举类
* @return 枚举 Map, 其中 key:表示枚举名称, value: 表示枚举的全路径类名称
*/

6
io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring.xml

@ -48,16 +48,16 @@
<!-- 可对不同的日志写入不同的文件示例 -->
<!--
<appender name="RULE_ENGINE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender name="RULE_ENGINE_FILE" class="ch.qos.logback.coe.rolling.RollingFileAppender">
<encoder><pattern>${pattern}</pattern></encoder>
<file>${homedir}/logs/rule-engine.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<rollingPolicy class="ch.qos.logback.coe.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${homedir}/logs/rule-engine.%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<logger name="org.wsp.engine.rule.core.code" level="debug" additivity="false">
<logger name="org.wsp.engine.rule.coe.code" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="RULE_ENGINE_FILE" />

6
io.sc.platform.core/src/main/resources/io/sc/platform/core/config/logback-spring2.xml

@ -106,16 +106,16 @@
<!-- 可对不同的日志写入不同的文件示例 -->
<!--
<appender name="RULE_ENGINE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<appender name="RULE_ENGINE_FILE" class="ch.qos.logback.coe.rolling.RollingFileAppender">
<encoder><pattern>${pattern}</pattern></encoder>
<file>${homedir}/logs/rule-engine.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<rollingPolicy class="ch.qos.logback.coe.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${homedir}/logs/rule-engine.%d.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
</appender>
<logger name="org.wsp.engine.rule.core.code" level="debug" additivity="false">
<logger name="org.wsp.engine.rule.coe.code" level="debug" additivity="false">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="RULE_ENGINE_FILE" />

9
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums.properties

@ -27,4 +27,11 @@ io.sc.platform.core.enums.RoundingMode.CEILING=Ceiling
io.sc.platform.core.enums.RoundingMode.FLOOR=floor
io.sc.platform.core.enums.RoundingMode.HALF_UP=Half Up
io.sc.platform.core.enums.RoundingMode.HALF_DOWN=Half Down
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=Half Even
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=Half Even
io.sc.platform.core.enums.GoodLevel.POOR=Poor
io.sc.platform.core.enums.GoodLevel.MEDIUM=Medium
io.sc.platform.core.enums.GoodLevel.GOOD=Good
io.sc.platform.core.enums.GoodLevel.VERY_GOOD=Very Good
io.sc.platform.core.enums.GoodLevel.EXCELLENT=Excellent
io.sc.platform.core.enums.GoodLevel.PERFECT=Perfect

9
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums_tw_CN.properties

@ -27,4 +27,11 @@ io.sc.platform.core.enums.RoundingMode.CEILING=\u5411\u6B63\u7121\u7AAE\u65B9\u5
io.sc.platform.core.enums.RoundingMode.FLOOR=\u5411\u8CA0\u7121\u7AAE\u65B9\u5411\u820D\u5165
io.sc.platform.core.enums.RoundingMode.HALF_UP=\u7D93\u5178\u7684\u56DB\u820D\u4E94\u5165
io.sc.platform.core.enums.RoundingMode.HALF_DOWN=\u6700\u8FD1\u6578\u5B57\u820D\u5165(5\u820D)
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=\u9280\u884C\u5BB6\u820D\u5165\u6CD5
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=\u9280\u884C\u5BB6\u820D\u5165\u6CD5
io.sc.platform.core.enums.GoodLevel.POOR=\u5DEE
io.sc.platform.core.enums.GoodLevel.MEDIUM=\u4E2D\u7B49
io.sc.platform.core.enums.GoodLevel.GOOD=\u597D
io.sc.platform.core.enums.GoodLevel.VERY_GOOD=\u5F88\u597D
io.sc.platform.core.enums.GoodLevel.EXCELLENT=\u975E\u5E38\u597D
io.sc.platform.core.enums.GoodLevel.PERFECT=\u5B8C\u7F8E

9
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/enums_zh_CN.properties

@ -27,4 +27,11 @@ io.sc.platform.core.enums.RoundingMode.CEILING=\u5411\u6B63\u65E0\u7A77\u65B9\u5
io.sc.platform.core.enums.RoundingMode.FLOOR=\u5411\u8D1F\u65E0\u7A77\u65B9\u5411\u820D\u5165
io.sc.platform.core.enums.RoundingMode.HALF_UP=\u7ECF\u5178\u7684\u56DB\u820D\u4E94\u5165
io.sc.platform.core.enums.RoundingMode.HALF_DOWN=\u6700\u8FD1\u6570\u5B57\u820D\u5165(5\u820D)
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=\u94F6\u884C\u5BB6\u820D\u5165\u6CD5
io.sc.platform.core.enums.RoundingMode.HALF_EVEN=\u94F6\u884C\u5BB6\u820D\u5165\u6CD5
io.sc.platform.core.enums.GoodLevel.POOR=\u5DEE
io.sc.platform.core.enums.GoodLevel.MEDIUM=\u4E2D\u7B49
io.sc.platform.core.enums.GoodLevel.GOOD=\u597D
io.sc.platform.core.enums.GoodLevel.VERY_GOOD=\u5F88\u597D
io.sc.platform.core.enums.GoodLevel.EXCELLENT=\u975E\u5E38\u597D
io.sc.platform.core.enums.GoodLevel.PERFECT=\u5B8C\u7F8E

12
io.sc.platform.gradle/build.gradle

@ -17,10 +17,10 @@ gradlePlugin {
dependencies {
implementation(
"org.springframework:spring-web",
"org.springframework:spring-core",
"com.fasterxml.jackson.core:jackson-core",
"com.fasterxml.jackson.core:jackson-annotations",
"com.fasterxml.jackson.core:jackson-databind",
"org.springframework:spring-coe",
"com.fasterxml.jackson.coe:jackson-coe",
"com.fasterxml.jackson.coe:jackson-annotations",
"com.fasterxml.jackson.coe:jackson-databind",
"com.google.guava:guava:${guava_version}",
"net.lingala.zip4j:zip4j:${zip4j_version}"
)
@ -120,7 +120,7 @@ processResources.dependsOn(syncPluginTemplates);
/*
task zipFrontendResources() {}
tasks.zipFrontendResources.doFirst {
File srcDir = file('../../framework-base/org.wsp.framework.core.frontend');
File srcDir = file('../../framework-base/org.wsp.framework.coe.frontend');
File targetFile =file('./src/main/resources/framework-template/front-end/template.zip');
delete targetFile
@ -138,7 +138,7 @@ tasks.zipFrontendResources.doFirst {
zipFile.addFolder(it);
}
}else{
if(!"org.wsp.framework.core.frontend.iml".equals(it.name)
if(!"org.wsp.framework.coe.frontend.iml".equals(it.name)
&& !"package-lock.json".equals(it.name)
){
zipFile.addFile(it);

4
io.sc.platform.gradle/src/main/java/io/sc/platform/gradle/plugins/CreateFrontEnd.java

@ -153,7 +153,7 @@ public class CreateFrontEnd extends AbstractFrameworkTask{
new File(projectPath + "/template.zip").delete();
//更改 asset 文件夹名称
new File(projectPath + "/public/org.wsp.framework.core.frontend").renameTo(new File(projectPath + "/public/" + name));
new File(projectPath + "/public/org.wsp.framework.coe.frontend").renameTo(new File(projectPath + "/public/" + name));
//替换 package.json 文件中的 name 属性
String packageJson =projectPath + "/package.json";
@ -161,7 +161,7 @@ public class CreateFrontEnd extends AbstractFrameworkTask{
if(rs!=null && rs.exists()) {
String txt =FileUtil.readString(rs.getInputStream());
if(txt!=null) {
txt =txt.replace("org.wsp.framework.core.frontend",name);
txt =txt.replace("org.wsp.framework.coe.frontend",name);
FileUtil.writeString(packageJson, txt);
}
}

2
io.sc.platform.gradle/templates/pgp/app/build-jetty.gradle

@ -2,7 +2,7 @@ println "[Jetty] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
io.sc.platform.gradle/templates/pgp/app/build-undertow.gradle

@ -2,7 +2,7 @@ println "[Undertow] 环境 ......"
configurations {
all*.exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-core"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-coe"
all*.exclude group: "org.apache.tomcat.embed", module: "tomcat-embed-websocket"
}

2
io.sc.platform.gradle/templates/pgp/app/build.gradle

@ -14,7 +14,7 @@ dependencies {
project(":io.sc.platform.app"),
project(":io.sc.platform.developer"),
//project(":io.sc.platform.job.core"),
//project(":io.sc.platform.job.coe"),
//project(":io.sc.platform.job.executor"),
//project(":io.sc.platform.job.manager"),

2
io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/application-properties.json

@ -12,7 +12,7 @@
/*
[
{
"module" : "io.sc.platform.core",
"module" : "io.sc.platform.coe",
"order" : 150,
"description": "application configuration",
"properties": [

8
io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/json-serializers.json

@ -13,13 +13,13 @@
[
{
"className" : "java.util.Date",
"serializer" : "io.sc.platform.core.autoconfigure.support.DateJsonSerializer",
"deserializer" : "io.sc.platform.core.autoconfigure.support.DateJsonDeserializer"
"serializer" : "io.sc.platform.coe.autoconfigure.support.DateJsonSerializer",
"deserializer" : "io.sc.platform.coe.autoconfigure.support.DateJsonDeserializer"
},
{
"className" : "java.time.Instant",
"serializer" : "io.sc.platform.core.autoconfigure.support.InstantJsonSerializer",
"deserializer" : "io.sc.platform.core.autoconfigure.support.InstantJsonDeserializer"
"serializer" : "io.sc.platform.coe.autoconfigure.support.InstantJsonSerializer",
"deserializer" : "io.sc.platform.coe.autoconfigure.support.InstantJsonDeserializer"
}
]
*/

2
io.sc.platform.gradle/templates/pgp/module/src/main/resources/META-INF/platform/plugins/security.json

@ -9,7 +9,7 @@
/*
{
"permitPatterns":[
"/io.sc.platform.core/**"
"/io.sc.platform.coe/**"
]
}
*/

2
io.sc.platform.gradle/templates/pgp/setup/build-version.gradle

@ -194,7 +194,7 @@ subprojects {
// ext['undertow.version'] =
// ext['versions-maven-plugin.version'] =
// ext['webjars-hal-browser.version'] =
// ext['webjars-locator-core.version'] =
// ext['webjars-locator-coe.version'] =
// ext['wsdl4j.version'] =
// ext['xml-maven-plugin.version'] =
// ext['xmlunit2.version'] =

2
io.sc.platform.groovy/build.gradle

@ -1,6 +1,6 @@
dependencies {
api(
project(":io.sc.platform.core"),
project(":io.sc.platform.coe"),
"org.codehaus.groovy:groovy",
"org.codehaus.groovy:groovy-jsr223",
"org.codehaus.groovy:groovy-datetime",

2
io.sc.platform.installer/build.gradle

@ -1,5 +1,5 @@
dependencies {
api(
project(":io.sc.platform.core"),
project(":io.sc.platform.coe"),
)
}

2
io.sc.platform.jdbc.liquibase/build.gradle

@ -2,6 +2,6 @@ dependencies {
api(
project(":io.sc.platform.jdbc"),
"org.liquibase:liquibase-core",
"org.liquibase:liquibase-coe",
)
}

2
io.sc.platform.jdbc.liquibase/src/main/java/io/sc/platform/jdbc/liquibase/autoconfigure/DatabaseUpdaterInterceptorAutoConfiguration.java

@ -25,7 +25,7 @@ public class DatabaseUpdaterInterceptorAutoConfiguration implements WebMvcConfig
private static final String[] excludePathPatterns =new String[] {
"/io.sc.platform.jdbc.liquibase/**",
"/io.sc.platform.core/**",
"/io.sc.platform.coe/**",
"/error",
"/**/*.js",

2
io.sc.platform.job.core/build.gradle

@ -1,6 +1,6 @@
dependencies {
api(
project(":io.sc.platform.core"),
project(":io.sc.platform.coe"),
project(":io.sc.platform.orm.api"),
)
}

2
io.sc.platform.job.executor/build.gradle

@ -1,5 +1,5 @@
dependencies {
api(
project(":io.sc.platform.job.core"),
project(":io.sc.platform.job.coe"),
)
}

2
io.sc.platform.job.manager/build.gradle

@ -1,6 +1,6 @@
dependencies {
api(
project(":io.sc.platform.job.core"),
project(":io.sc.platform.job.coe"),
project(":io.sc.platform.mvc"),
project(":io.sc.platform.jdbc.liquibase"),
)

2
io.sc.platform.monitor/build.gradle

@ -1,5 +1,5 @@
dependencies {
api(
"com.github.oshi:oshi-core:${oshi_version}",
"com.github.oshi:oshi-coe:${oshi_version}",
)
}

2
io.sc.platform.mvc/build.gradle

@ -4,7 +4,7 @@ dependencies {
project(":io.sc.platform.security"),
project(":io.sc.platform.mvc.frontend"),
"org.webjars:webjars-locator-core",
"org.webjars:webjars-locator-coe",
"org.webjars:webjars-locator-weblogic:${webjars_locator_weblogic_version}",
"commons-fileupload:commons-fileupload:${commons_fileupload_version}",
)

4
io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/autoconfigure/support/AuditLogAspectorBean.java

@ -47,9 +47,9 @@ public class AuditLogAspectorBean {
/**
* 定义切入点
* io.sc.platform.core.annotation.AuditLog 注解的方法
* io.sc.platform.coe.annotation.AuditLog 注解的方法
*/
@Pointcut("@annotation(io.sc.platform.core.annotation.AuditLog)")
@Pointcut("@annotation(io.sc.platform.coe.annotation.AuditLog)")
public void auditLogPointCut() {}
@Around("auditLogPointCut()")

6
io.sc.platform.orm.api/build.gradle

@ -1,7 +1,7 @@
dependencies {
api(
"com.fasterxml.jackson.core:jackson-annotations:${jackson_version}",
"com.fasterxml.jackson.core:jackson-core:${jackson_version}",
"com.fasterxml.jackson.core:jackson-databind:${jackson_version}",
"com.fasterxml.jackson.coe:jackson-annotations:${jackson_version}",
"com.fasterxml.jackson.coe:jackson-coe:${jackson_version}",
"com.fasterxml.jackson.coe:jackson-databind:${jackson_version}",
)
}

2
io.sc.platform.ws.cxf/build.gradle

@ -2,7 +2,7 @@ dependencies {
api(
"org.apache.cxf:cxf-spring-boot-starter-jaxws:${cxf_version}",
project(":io.sc.platform.core"),
project(":io.sc.platform.coe"),
project(":io.sc.platform.mvc"),
)
}
Loading…
Cancel
Save