Browse Source

update

main
wangshaoping 11 months ago
parent
commit
5996aa2ed7
  1. 23
      erm.api/src/main/java/erm/api/enums/RiskPolicy.java
  2. 6
      erm.api/src/main/java/erm/api/enums/StakeHolder.java
  3. 51
      erm.api/src/main/java/erm/appetite/api/CrossValidateVo.java
  4. 97
      erm.api/src/main/java/erm/appetite/api/SpreadBusinessObjectVo.java
  5. 97
      erm.api/src/main/java/erm/appetite/api/SpreadCoreIndicatorVo.java
  6. 97
      erm.api/src/main/java/erm/appetite/api/SpreadIndustryVo.java
  7. 80
      erm.api/src/main/java/erm/appetite/api/SpreadShareholderVo.java
  8. 79
      erm.api/src/main/java/erm/appetite/api/SpreadSupervisionVo.java
  9. 78
      erm.api/src/main/java/erm/appetite/api/SpreadVo.java
  10. 16
      erm.api/src/main/resources/META-INF/platform/plugins/messages.json
  11. 10
      erm.api/src/main/resources/erm/api/i18n/enums.properties
  12. 10
      erm.api/src/main/resources/erm/api/i18n/enums_tw_CN.properties
  13. 10
      erm.api/src/main/resources/erm/api/i18n/enums_zh_CN.properties
  14. 4
      erm.frontend/package.json
  15. 6
      erm.frontend/src/components/index.ts
  16. 61
      erm.frontend/src/i18n/messages.json
  17. 63
      erm.frontend/src/i18n/messages_tw_CN.json
  18. 65
      erm.frontend/src/i18n/messages_zh_CN.json
  19. 2
      erm.frontend/src/menus/menus.json
  20. 10
      erm.frontend/src/routes/routes.json
  21. 663
      erm.frontend/src/views/appetite/cross-validate/Calculate.vue
  22. 104
      erm.frontend/src/views/appetite/cross-validate/CrossValidate.vue
  23. 57
      erm.frontend/src/views/appetite/cross-validate/CrossValidateDialog.vue
  24. 102
      erm.frontend/src/views/appetite/cross-validate/Data.vue
  25. 124
      erm.frontend/src/views/appetite/spread/Spread.vue
  26. 71
      erm.frontend/src/views/appetite/spread/SpreadBusinessObject.vue
  27. 92
      erm.frontend/src/views/appetite/spread/SpreadIndustry.vue
  28. 88
      erm.frontend/src/views/appetite/spread/SpreadShareholder.vue
  29. 81
      erm.frontend/src/views/appetite/spread/SreadCoreIndicator.vue
  30. 88
      erm.frontend/src/views/appetite/spread/SreadSupervision.vue
  31. 1
      erm/build.gradle
  32. 15
      erm/src/main/java/erm/appetite/controller/CrossValidateWebController.java
  33. 22
      erm/src/main/java/erm/appetite/controller/SpreadBusinessObjectWebController.java
  34. 22
      erm/src/main/java/erm/appetite/controller/SpreadCoreIndicatorWebController.java
  35. 26
      erm/src/main/java/erm/appetite/controller/SpreadIndustryWebController.java
  36. 22
      erm/src/main/java/erm/appetite/controller/SpreadShareholderWebController.java
  37. 22
      erm/src/main/java/erm/appetite/controller/SpreadSupervisionWebController.java
  38. 15
      erm/src/main/java/erm/appetite/controller/SpreadWebController.java
  39. 97
      erm/src/main/java/erm/appetite/jpa/entity/CrossValidateEntity.java
  40. 156
      erm/src/main/java/erm/appetite/jpa/entity/SpreadBusinessObjectEntity.java
  41. 120
      erm/src/main/java/erm/appetite/jpa/entity/SpreadCoreIndicatorEntity.java
  42. 113
      erm/src/main/java/erm/appetite/jpa/entity/SpreadEntity.java
  43. 156
      erm/src/main/java/erm/appetite/jpa/entity/SpreadIndustryEntity.java
  44. 97
      erm/src/main/java/erm/appetite/jpa/entity/SpreadShareholderEntity.java
  45. 96
      erm/src/main/java/erm/appetite/jpa/entity/SpreadSupervisionEntity.java
  46. 8
      erm/src/main/java/erm/appetite/jpa/repository/CrossValidateRepository.java
  47. 13
      erm/src/main/java/erm/appetite/jpa/repository/SpreadBusinessObjectRepository.java
  48. 13
      erm/src/main/java/erm/appetite/jpa/repository/SpreadCoreIndicatorRepository.java
  49. 13
      erm/src/main/java/erm/appetite/jpa/repository/SpreadIndustryRepository.java
  50. 8
      erm/src/main/java/erm/appetite/jpa/repository/SpreadRepository.java
  51. 13
      erm/src/main/java/erm/appetite/jpa/repository/SpreadShareholderRepository.java
  52. 13
      erm/src/main/java/erm/appetite/jpa/repository/SpreadSupervisionRepository.java
  53. 8
      erm/src/main/java/erm/appetite/service/CrossValidateService.java
  54. 13
      erm/src/main/java/erm/appetite/service/SpreadBusinessObjectService.java
  55. 12
      erm/src/main/java/erm/appetite/service/SpreadCoreIndicatorService.java
  56. 12
      erm/src/main/java/erm/appetite/service/SpreadIndustryService.java
  57. 8
      erm/src/main/java/erm/appetite/service/SpreadService.java
  58. 12
      erm/src/main/java/erm/appetite/service/SpreadShareholderService.java
  59. 12
      erm/src/main/java/erm/appetite/service/SpreadSupervisionService.java
  60. 12
      erm/src/main/java/erm/appetite/service/impl/CrossValidateServiceImpl.java
  61. 44
      erm/src/main/java/erm/appetite/service/impl/SpreadBusinessObjectServiceImpl.java
  62. 27
      erm/src/main/java/erm/appetite/service/impl/SpreadCoreIndicatorServiceImpl.java
  63. 44
      erm/src/main/java/erm/appetite/service/impl/SpreadIndustryServiceImpl.java
  64. 12
      erm/src/main/java/erm/appetite/service/impl/SpreadServiceImpl.java
  65. 27
      erm/src/main/java/erm/appetite/service/impl/SpreadShareholderServiceImpl.java
  66. 27
      erm/src/main/java/erm/appetite/service/impl/SpreadSupervisionServiceImpl.java
  67. 10
      erm/src/main/java/erm/kpi/controller/IndicatorWebController.java
  68. 5
      erm/src/main/java/erm/kpi/jpa/entity/IndicatorEntity.java
  69. 3
      erm/src/main/java/erm/kpi/jpa/repository/IndicatorRepository.java
  70. 3
      erm/src/main/java/erm/kpi/service/IndicatorService.java
  71. 10
      erm/src/main/java/erm/kpi/service/impl/IndicatorServiceImpl.java
  72. 5
      erm/src/main/resources/META-INF/platform/plugins/components.json
  73. 7
      erm/src/main/resources/META-INF/platform/plugins/liquibase.json
  74. 5
      erm/src/main/resources/META-INF/platform/plugins/repositories.json
  75. 0
      erm/src/main/resources/erm/appetite/i18n/dictionary.properties
  76. 0
      erm/src/main/resources/erm/appetite/i18n/dictionary_tw_CN.properties
  77. 0
      erm/src/main/resources/erm/appetite/i18n/dictionary_zh_CN.properties
  78. 16
      erm/src/main/resources/liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Data.xml
  79. 259
      erm/src/main/resources/liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Schema DDL.xml
  80. 1
      erm/src/main/resources/liquibase/kpi/data/sys_dictionary.csv
  81. 4
      gradle.properties
  82. 4
      io.sc.engine.mv.frontend/package.json
  83. 11
      io.sc.engine.mv.frontend/src/views/result/Result.vue
  84. 4
      io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/liquibase.json
  85. 4
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties
  86. 4
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties
  87. 4
      io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties
  88. 4
      io.sc.platform.developer.frontend/package.json
  89. 2
      io.sc.platform.developer.frontend/src/components/index.ts
  90. 1
      io.sc.platform.developer.frontend/src/i18n/messages.json
  91. 1
      io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json
  92. 1
      io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json
  93. 26
      io.sc.platform.developer.frontend/src/menus/menus.json
  94. 15
      io.sc.platform.developer.frontend/src/routes/routes.json
  95. 33
      io.sc.platform.developer.frontend/src/views/plugin/Liquibase.vue
  96. 1
      io.sc.platform.developer/build.gradle
  97. 20
      io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginLiquibaseWebController.java
  98. 38
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java
  99. 7
      io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/liquibase.json
  100. 1
      io.sc.platform.flowable/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer

23
erm.api/src/main/java/erm/api/enums/RiskPolicy.java

@ -0,0 +1,23 @@
package erm.api.enums;
public enum RiskPolicy {
PRUDENT("(-10%,-5%]"), //审慎
PRUDENT_STEADY("(-5%,0%]"), //审慎偏稳健
STEADY("(0,5%]"), //稳健
STEADY_EXPANSION("(5%,10%]"), //稳健偏扩张
EXPANSION("(15%,20%]"); //扩张
private String range; //区间
private RiskPolicy(String range) {
this.range = range;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
}

6
erm.api/src/main/java/erm/api/enums/StakeHolder.java

@ -0,0 +1,6 @@
package erm.api.enums;
public enum StakeHolder {
SHAREHOLDER, //股东
SUPERVISION; //监管
}

51
erm.api/src/main/java/erm/appetite/api/CrossValidateVo.java

@ -0,0 +1,51 @@
package erm.appetite.api;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class CrossValidateVo extends CorporationAuditorVo {
private String id;
private String code;
private String name;
private String description;
private String year;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
}

97
erm.api/src/main/java/erm/appetite/api/SpreadBusinessObjectVo.java

@ -0,0 +1,97 @@
package erm.appetite.api;
import erm.api.enums.RiskPolicy;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadBusinessObjectVo extends CorporationAuditorVo {
private String id; //ID
private String spread; //风险传导机制ID
private String business; //业务条线
private RiskPolicy policy;//风险基调
private String range; //对应区间
private Double lastYearLoanBalance;//上年贷款余额
private Double lastYearNpl; //上年不良贷款率
private Double growthPercent; //预计增长率
private Double predictLoanBalance; //预计本年贷款余额
private Double predictNpl; //预计本年不良贷款率
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSpread() {
return spread;
}
public void setSpread(String spread) {
this.spread = spread;
}
public String getBusiness() {
return business;
}
public void setBusiness(String business) {
this.business = business;
}
public RiskPolicy getPolicy() {
return policy;
}
public void setPolicy(RiskPolicy policy) {
this.policy = policy;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public Double getLastYearLoanBalance() {
return lastYearLoanBalance;
}
public void setLastYearLoanBalance(Double lastYearLoanBalance) {
this.lastYearLoanBalance = lastYearLoanBalance;
}
public Double getLastYearNpl() {
return lastYearNpl;
}
public void setLastYearNpl(Double lastYearNpl) {
this.lastYearNpl = lastYearNpl;
}
public Double getGrowthPercent() {
return growthPercent;
}
public void setGrowthPercent(Double growthPercent) {
this.growthPercent = growthPercent;
}
public Double getPredictLoanBalance() {
return predictLoanBalance;
}
public void setPredictLoanBalance(Double predictLoanBalance) {
this.predictLoanBalance = predictLoanBalance;
}
public Double getPredictNpl() {
return predictNpl;
}
public void setPredictNpl(Double predictNpl) {
this.predictNpl = predictNpl;
}
}

97
erm.api/src/main/java/erm/appetite/api/SpreadCoreIndicatorVo.java

@ -0,0 +1,97 @@
package erm.appetite.api;
import erm.api.enums.StakeHolder;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadCoreIndicatorVo extends CorporationAuditorVo {
private String id; //ID
private String spread; //风险传导机制ID
private String indicator; //指标ID
private String indicatorCode; //指标代码
private String indicatorName; //指标名称
private String indicatorUnit; //指标单位
private Double supervisionMinValue; //容忍下限(监管要求)
private Double expectValue; //目标值(股东期望)
private Double referenceValue; //参考值(定量传导)
private Double lastYearValue; //上年度指标值
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSpread() {
return spread;
}
public void setSpread(String spread) {
this.spread = spread;
}
public String getIndicator() {
return indicator;
}
public void setIndicator(String indicator) {
this.indicator = indicator;
}
public String getIndicatorCode() {
return indicatorCode;
}
public void setIndicatorCode(String indicatorCode) {
this.indicatorCode = indicatorCode;
}
public String getIndicatorName() {
return indicatorName;
}
public void setIndicatorName(String indicatorName) {
this.indicatorName = indicatorName;
}
public String getIndicatorUnit() {
return indicatorUnit;
}
public void setIndicatorUnit(String indicatorUnit) {
this.indicatorUnit = indicatorUnit;
}
public Double getSupervisionMinValue() {
return supervisionMinValue;
}
public void setSupervisionMinValue(Double supervisionMinValue) {
this.supervisionMinValue = supervisionMinValue;
}
public Double getExpectValue() {
return expectValue;
}
public void setExpectValue(Double expectValue) {
this.expectValue = expectValue;
}
public Double getReferenceValue() {
return referenceValue;
}
public void setReferenceValue(Double referenceValue) {
this.referenceValue = referenceValue;
}
public Double getLastYearValue() {
return lastYearValue;
}
public void setLastYearValue(Double lastYearValue) {
this.lastYearValue = lastYearValue;
}
}

97
erm.api/src/main/java/erm/appetite/api/SpreadIndustryVo.java

@ -0,0 +1,97 @@
package erm.appetite.api;
import erm.api.enums.RiskPolicy;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadIndustryVo extends CorporationAuditorVo {
private String id; //ID
private String spread; //风险传导机制ID
private String industry; //行业
private RiskPolicy policy;//风险基调
private String range; //对应区间
private Double lastYearLoanBalance;//上年贷款余额
private Double lastYearNpl; //上年不良贷款率
private Double growthPercent; //预计增长率
private Double predictLoanBalance; //预计本年贷款余额
private Double predictNpl; //预计本年不良贷款率
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSpread() {
return spread;
}
public void setSpread(String spread) {
this.spread = spread;
}
public String getIndustry() {
return industry;
}
public void setIndustry(String industry) {
this.industry = industry;
}
public RiskPolicy getPolicy() {
return policy;
}
public void setPolicy(RiskPolicy policy) {
this.policy = policy;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public Double getLastYearLoanBalance() {
return lastYearLoanBalance;
}
public void setLastYearLoanBalance(Double lastYearLoanBalance) {
this.lastYearLoanBalance = lastYearLoanBalance;
}
public Double getLastYearNpl() {
return lastYearNpl;
}
public void setLastYearNpl(Double lastYearNpl) {
this.lastYearNpl = lastYearNpl;
}
public Double getGrowthPercent() {
return growthPercent;
}
public void setGrowthPercent(Double growthPercent) {
this.growthPercent = growthPercent;
}
public Double getPredictLoanBalance() {
return predictLoanBalance;
}
public void setPredictLoanBalance(Double predictLoanBalance) {
this.predictLoanBalance = predictLoanBalance;
}
public Double getPredictNpl() {
return predictNpl;
}
public void setPredictNpl(Double predictNpl) {
this.predictNpl = predictNpl;
}
}

80
erm.api/src/main/java/erm/appetite/api/SpreadShareholderVo.java

@ -0,0 +1,80 @@
package erm.appetite.api;
import erm.api.enums.RiskPolicy;
import erm.api.enums.StakeHolder;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadShareholderVo extends CorporationAuditorVo {
private String id; //ID
private String spread; //风险传导机制ID
private StakeHolder stakeHolder; //利益相关方
private String indicator; //指标ID
private String indicatorCode; //指标代码
private String indicatorName; //指标名称
private String indicatorUnit; //指标单位
private String condition; //条件
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSpread() {
return spread;
}
public void setSpread(String spread) {
this.spread = spread;
}
public StakeHolder getStakeHolder() {
return stakeHolder;
}
public void setStakeHolder(StakeHolder stakeHolder) {
this.stakeHolder = stakeHolder;
}
public String getIndicator() {
return indicator;
}
public void setIndicator(String indicator) {
this.indicator = indicator;
}
public String getIndicatorCode() {
return indicatorCode;
}
public void setIndicatorCode(String indicatorCode) {
this.indicatorCode = indicatorCode;
}
public String getIndicatorName() {
return indicatorName;
}
public void setIndicatorName(String indicatorName) {
this.indicatorName = indicatorName;
}
public String getIndicatorUnit() {
return indicatorUnit;
}
public void setIndicatorUnit(String indicatorUnit) {
this.indicatorUnit = indicatorUnit;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
}

79
erm.api/src/main/java/erm/appetite/api/SpreadSupervisionVo.java

@ -0,0 +1,79 @@
package erm.appetite.api;
import erm.api.enums.StakeHolder;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadSupervisionVo extends CorporationAuditorVo {
private String id; //ID
private String spread; //风险传导机制ID
private StakeHolder stakeHolder; //利益相关方
private String indicator; //指标ID
private String indicatorCode; //指标代码
private String indicatorName; //指标名称
private String indicatorUnit; //指标单位
private String condition; //条件
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSpread() {
return spread;
}
public void setSpread(String spread) {
this.spread = spread;
}
public StakeHolder getStakeHolder() {
return stakeHolder;
}
public void setStakeHolder(StakeHolder stakeHolder) {
this.stakeHolder = stakeHolder;
}
public String getIndicator() {
return indicator;
}
public void setIndicator(String indicator) {
this.indicator = indicator;
}
public String getIndicatorCode() {
return indicatorCode;
}
public void setIndicatorCode(String indicatorCode) {
this.indicatorCode = indicatorCode;
}
public String getIndicatorName() {
return indicatorName;
}
public void setIndicatorName(String indicatorName) {
this.indicatorName = indicatorName;
}
public String getIndicatorUnit() {
return indicatorUnit;
}
public void setIndicatorUnit(String indicatorUnit) {
this.indicatorUnit = indicatorUnit;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
}

78
erm.api/src/main/java/erm/appetite/api/SpreadVo.java

@ -0,0 +1,78 @@
package erm.appetite.api;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
public class SpreadVo extends CorporationAuditorVo {
private String id;
private String code;
private String name;
private String description;
private String year;
private String crossValidate;
private String crossValidateCode;
private String crossValidateName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getCrossValidate() {
return crossValidate;
}
public void setCrossValidate(String crossValidate) {
this.crossValidate = crossValidate;
}
public String getCrossValidateCode() {
return crossValidateCode;
}
public void setCrossValidateCode(String crossValidateCode) {
this.crossValidateCode = crossValidateCode;
}
public String getCrossValidateName() {
return crossValidateName;
}
public void setCrossValidateName(String crossValidateName) {
this.crossValidateName = crossValidateName;
}
}

16
erm.api/src/main/resources/META-INF/platform/plugins/messages.json

@ -0,0 +1,16 @@
/*
*
* :
* 使:
* includes:
* excludes:
* : includes excludes , excludes ,
*/
{
"includes":[
"erm/api/i18n/enums"
],
"excludes":[]
}

10
erm.api/src/main/resources/erm/api/i18n/enums.properties

@ -0,0 +1,10 @@
# \u98CE\u9669\u57FA\u8C03
erm.api.enums.RiskPolicy.PRUDENT=Prudent
erm.api.enums.RiskPolicy.PRUDENT_STEADY=Prudent to Steady
erm.api.enums.RiskPolicy.STEADY=Steady
erm.api.enums.RiskPolicy.STEADY_EXPANSION=Steady to Expansion
erm.api.enums.RiskPolicy.EXPANSION=Expansion
# \u5229\u76CA\u76F8\u5173\u65B9
erm.api.enums.StakeHolder.SHAREHOLDER=Shareholder
erm.api.enums.StakeHolder.SUPERVISION=Supervision

10
erm.api/src/main/resources/erm/api/i18n/enums_tw_CN.properties

@ -0,0 +1,10 @@
# \u98CE\u9669\u57FA\u8C03
erm.api.enums.RiskPolicy.PRUDENT=\u5BE9\u614E
erm.api.enums.RiskPolicy.PRUDENT_STEADY=\u5BE9\u614E\u504F\u7A69\u5065
erm.api.enums.RiskPolicy.STEADY=\u7A69\u5065
erm.api.enums.RiskPolicy.STEADY_EXPANSION=\u7A69\u5065\u504F\u64F4\u5F35
erm.api.enums.RiskPolicy.EXPANSION=\u64F4\u5F35
# \u5229\u76CA\u76F8\u5173\u65B9
erm.api.enums.StakeHolder.SHAREHOLDER=\u80A1\u6771
erm.api.enums.StakeHolder.SUPERVISION=\u76E3\u7BA1

10
erm.api/src/main/resources/erm/api/i18n/enums_zh_CN.properties

@ -0,0 +1,10 @@
# \u98CE\u9669\u57FA\u8C03
erm.api.enums.RiskPolicy.PRUDENT=\u5BA1\u614E
erm.api.enums.RiskPolicy.PRUDENT_STEADY=\u5BA1\u614E\u504F\u7A33\u5065
erm.api.enums.RiskPolicy.STEADY=\u7A33\u5065
erm.api.enums.RiskPolicy.STEADY_EXPANSION=\u7A33\u5065\u504F\u6269\u5F20
erm.api.enums.RiskPolicy.EXPANSION=\u6269\u5F20
# \u5229\u76CA\u76F8\u5173\u65B9
erm.api.enums.StakeHolder.SHAREHOLDER=\u80A1\u4E1C
erm.api.enums.StakeHolder.SUPERVISION=\u76D1\u7BA1

4
erm.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "erm.frontend",
"version": "8.1.26",
"version": "8.1.27",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.141",
"platform-core": "8.1.145",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

6
erm.frontend/src/components/index.ts

@ -4,8 +4,8 @@
import component_erm_kpi_indicator from '@/views/kpi/Indicator.vue';
import component_erm_kpi_lib from '@/views/kpi/Lib.vue';
import component_erm_appetite_validate from '@/views/appetite/Validate.vue';
import component_erm_appetite_spread from '@/views/appetite/Spread.vue';
import component_erm_appetite_crossValidate from '@/views/appetite/cross-validate/CrossValidate.vue';
import component_erm_appetite_spread from '@/views/appetite/spread/Spread.vue';
import component_erm_appetite_threshold from '@/views/appetite/Threshold.vue';
import component_erm_appetite_monitor from '@/views/appetite/Monitor.vue';
import component_erm_limit_threshold from '@/views/limit/Threshold.vue';
@ -42,7 +42,7 @@ import component_erm_icaap_template from '@/views/icaap/Template.vue';
const localComponents = {
'component.erm.kpi.indicator': component_erm_kpi_indicator,
'component.erm.kpi.lib': component_erm_kpi_lib,
'component.erm.appetite.validate': component_erm_appetite_validate,
'component.erm.appetite.crossValidate': component_erm_appetite_crossValidate,
'component.erm.appetite.spread': component_erm_appetite_spread,
'component.erm.appetite.threshold': component_erm_appetite_threshold,
'component.erm.appetite.monitor': component_erm_appetite_monitor,

61
erm.frontend/src/i18n/messages.json

@ -4,7 +4,7 @@
"menu.erm.kpi.indicator" : "Indicator",
"menu.erm.kpi.lib" : "Indicator Library",
"menu.erm.appetite" : "Risk Appetite",
"menu.erm.appetite.validate" : "Cross Validate",
"menu.erm.appetite.crossValidate" : "Cross Validate",
"menu.erm.appetite.spread" : "Spread",
"menu.erm.appetite.threshold" : "Threshold Setting",
"menu.erm.appetite.monitor" : "Indicator Monitor",
@ -78,8 +78,63 @@
"erm.kpi.lib.grid.toolbar.addTop": "Add Top Library",
"erm.kpi.lib.grid.toolbar.addChild": "Add Child Library",
"erm.appetite.validator.tab.data": "Data",
"erm.appetite.validator.tab.calculate": "Calculate",
"erm.appetite.crossValidator.grid.title": "Cross Validate List",
"erm.appetite.crossValidator.detail.dialog.title": "Cross Validate Detail",
"erm.appetite.crossValidator.detail.data": "Data Input",
"erm.appetite.crossValidator.detail.calculate": "Cross Validate Calculate",
"erm.appetite.spread.grid.title": "Spread List",
"erm.appetite.spread.detail.dialog.title": "Spread Detail",
"erm.appetite.spread.grid.entity.crossValidate": "Cross Validate",
"erm.appetite.spread.grid.entity.crossValidateId": "Cross Validate ID",
"erm.appetite.spread.grid.entity.crossValidateCode": "Cross Validate Code",
"erm.appetite.spread.grid.entity.crossValidateName": "Cross Validate Name",
"erm.appetite.spread.businessObject.grid.title": "Business Strategy Object Spread",
"erm.appetite.spread.businessObject.grid.entity.spreadId": "Spread Id",
"erm.appetite.spread.businessObject.grid.entity.business": "Business",
"erm.appetite.spread.businessObject.grid.entity.policy": "Policy",
"erm.appetite.spread.businessObject.grid.entity.range": "Range",
"erm.appetite.spread.businessObject.grid.entity.lastYearLoanBalance": "Last Year Loan Balance",
"erm.appetite.spread.businessObject.grid.entity.lastYearNpl": "Last Year NPL",
"erm.appetite.spread.businessObject.grid.entity.growthPercent": "Growth Percent",
"erm.appetite.spread.businessObject.grid.entity.predictLoanBalance": "Predict Loan Balance",
"erm.appetite.spread.businessObject.grid.entity.predictNpl": "Predict NPL",
"erm.appetite.spread.industry.grid.title": "Industry",
"erm.appetite.spread.industry.grid.entity.spreadId": "Spread Id",
"erm.appetite.spread.industry.grid.entity.industry": "Industry",
"erm.appetite.spread.industry.grid.entity.policy": "Policy",
"erm.appetite.spread.industry.grid.entity.range": "Range",
"erm.appetite.spread.industry.grid.entity.lastYearLoanBalance": "Last Year Loan Balance",
"erm.appetite.spread.industry.grid.entity.lastYearNpl": "Last Year NPL",
"erm.appetite.spread.industry.grid.entity.growthPercent": "Growth Percent",
"erm.appetite.spread.industry.grid.entity.predictLoanBalance": "Predict Loan Balance",
"erm.appetite.spread.industry.grid.entity.predictNpl": "Predict NPL",
"erm.appetite.spread.shareholder.grid.title": "Shareholder",
"erm.appetite.spread.shareholder.grid.entity.stakeHolder": "Stakeholder",
"erm.appetite.spread.shareholder.grid.entity.indicator": "Indicator",
"erm.appetite.spread.shareholder.grid.entity.indicatorCode": "Indicator Code",
"erm.appetite.spread.shareholder.grid.entity.indicatorName": "Indicator Name",
"erm.appetite.spread.shareholder.grid.entity.indicatorUnit": "Indicator Unit",
"erm.appetite.spread.shareholder.grid.entity.condition": "Condition",
"erm.appetite.spread.supervision.grid.title": "Supervision",
"erm.appetite.spread.supervision.grid.entity.stakeHolder": "Stakeholder",
"erm.appetite.spread.supervision.grid.entity.indicator": "Indicator",
"erm.appetite.spread.supervision.grid.entity.indicatorCode": "Indicator Code",
"erm.appetite.spread.supervision.grid.entity.indicatorName": "Indicator Name",
"erm.appetite.spread.supervision.grid.entity.indicatorUnit": "Indicator Unit",
"erm.appetite.spread.supervision.grid.entity.condition": "Condition",
"erm.appetite.spread.coreIndicator.grid.title": "Core Indicator",
"erm.appetite.spread.coreIndicator.grid.entity.indicator": "Indicator",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorCode": "Indicator Code",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorName": "Indicator Name",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorUnit": "Indicator Unit",
"erm.appetite.spread.coreIndicator.grid.entity.supervisionMinValue": "Minial Value of Supervision",
"erm.appetite.spread.coreIndicator.grid.entity.expectValue": "Expect Value",
"erm.appetite.spread.coreIndicator.grid.entity.referenceValue": "Reference Value",
"erm.appetite.spread.coreIndicator.grid.entity.lastYearValue": "Last Year Value"
}

63
erm.frontend/src/i18n/messages_tw_CN.json

@ -4,7 +4,7 @@
"menu.erm.kpi.indicator" : "指標",
"menu.erm.kpi.lib" : "指標庫",
"menu.erm.appetite" : "風險偏好",
"menu.erm.appetite.validate" : "交叉驗證",
"menu.erm.appetite.crossValidate" : "交叉驗證",
"menu.erm.appetite.spread" : "傳導機制",
"menu.erm.appetite.threshold" : "閾值設置",
"menu.erm.appetite.monitor" : "指標監測",
@ -78,6 +78,63 @@
"erm.kpi.lib.grid.toolbar.addTop": "添加頂級指標庫",
"erm.kpi.lib.grid.toolbar.addChild": "添加子指標庫",
"erm.appetite.validator.tab.data": "數據",
"erm.appetite.validator.tab.calculate": "計算",
"erm.appetite.crossValidator.grid.title": "交叉驗證列表",
"erm.appetite.crossValidator.detail.dialog.title": "交叉驗證詳情",
"erm.appetite.crossValidator.detail.data": "数据输入",
"erm.appetite.crossValidator.detail.calculate": "交叉驗證测算",
"erm.appetite.spread.grid.title": "風險傳導機制列表",
"erm.appetite.spread.detail.dialog.title": "風險傳導機制詳情",
"erm.appetite.spread.grid.entity.crossValidate": "交叉驗證",
"erm.appetite.spread.grid.entity.crossValidateId": "交叉驗證ID",
"erm.appetite.spread.grid.entity.crossValidateCode": "交叉驗證代碼",
"erm.appetite.spread.grid.entity.crossValidateName": "交叉驗證名稱",
"erm.appetite.spread.businessObject.grid.title": "業務戰略目標傳導分析",
"erm.appetite.spread.businessObject.grid.entity.spreadId": "風險傳導機制ID",
"erm.appetite.spread.businessObject.grid.entity.business": "業務線條",
"erm.appetite.spread.businessObject.grid.entity.policy": "風險基調",
"erm.appetite.spread.businessObject.grid.entity.range": "對應區間",
"erm.appetite.spread.businessObject.grid.entity.lastYearLoanBalance": "上年貸款餘額",
"erm.appetite.spread.businessObject.grid.entity.lastYearNpl": "上年不良貸款率(%)",
"erm.appetite.spread.businessObject.grid.entity.growthPercent": "預計增長率(%)",
"erm.appetite.spread.businessObject.grid.entity.predictLoanBalance": "預計本年貸款餘額",
"erm.appetite.spread.businessObject.grid.entity.predictNpl": "預計本年不良貸款率(%)",
"erm.appetite.spread.industry.grid.title": "行業分析",
"erm.appetite.spread.industry.grid.entity.spreadId": "風險傳導機制ID",
"erm.appetite.spread.industry.grid.entity.industry": "行業",
"erm.appetite.spread.industry.grid.entity.policy": "風險基調",
"erm.appetite.spread.industry.grid.entity.range": "對應區間",
"erm.appetite.spread.industry.grid.entity.lastYearLoanBalance": "上年貸款餘額",
"erm.appetite.spread.industry.grid.entity.lastYearNpl": "上年不良貸款率(%)",
"erm.appetite.spread.industry.grid.entity.growthPercent": "預計增長率(%)",
"erm.appetite.spread.industry.grid.entity.predictLoanBalance": "預計本年貸款餘額",
"erm.appetite.spread.industry.grid.entity.predictNpl": "預計本年不良貸款率(%)",
"erm.appetite.spread.shareholder.grid.title": "利益相關方分析(股東)",
"erm.appetite.spread.shareholder.grid.entity.stakeHolder": "利益相關方",
"erm.appetite.spread.shareholder.grid.entity.indicator": "指標",
"erm.appetite.spread.shareholder.grid.entity.indicatorCode": "指標代碼",
"erm.appetite.spread.shareholder.grid.entity.indicatorName": "指標名稱",
"erm.appetite.spread.shareholder.grid.entity.indicatorUnit": "指標單位",
"erm.appetite.spread.shareholder.grid.entity.condition": "條件",
"erm.appetite.spread.supervision.grid.title": "利益相關方分析(監管)",
"erm.appetite.spread.supervision.grid.entity.stakeHolder": "利益相關方",
"erm.appetite.spread.supervision.grid.entity.indicator": "指標",
"erm.appetite.spread.supervision.grid.entity.indicatorCode": "指標代碼",
"erm.appetite.spread.supervision.grid.entity.indicatorName": "指標名稱",
"erm.appetite.spread.supervision.grid.entity.indicatorUnit": "指標單位",
"erm.appetite.spread.supervision.grid.entity.condition": "條件",
"erm.appetite.spread.coreIndicator.grid.title": "核心指標匯總",
"erm.appetite.spread.coreIndicator.grid.entity.indicator": "指標",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorCode": "指標代碼",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorName": "指標名稱",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorUnit": "指標單位",
"erm.appetite.spread.coreIndicator.grid.entity.supervisionMinValue": "容忍下限(監管要求)",
"erm.appetite.spread.coreIndicator.grid.entity.expectValue": "目標值(股東期望)",
"erm.appetite.spread.coreIndicator.grid.entity.referenceValue": "參考值(定量傳導)",
"erm.appetite.spread.coreIndicator.grid.entity.lastYearValue": "上年度指標值"
}

65
erm.frontend/src/i18n/messages_zh_CN.json

@ -4,10 +4,10 @@
"menu.erm.kpi.indicator" : "指标",
"menu.erm.kpi.lib" : "指标库",
"menu.erm.appetite" : "风险偏好",
"menu.erm.appetite.validate" : "交叉验证",
"menu.erm.appetite.crossValidate" : "交叉验证",
"menu.erm.appetite.spread" : "传导机制",
"menu.erm.appetite.threshold" : "阈值设置",
"menu.erm.appetite.monitor" : "指标测",
"menu.erm.appetite.monitor" : "指标测",
"menu.erm.limit" : "风险限额",
"menu.erm.limit.threshold" : "阈值设置",
"menu.erm.limit.monitor" : "指标检测",
@ -78,6 +78,63 @@
"erm.kpi.lib.grid.toolbar.addTop": "添加顶级指标库",
"erm.kpi.lib.grid.toolbar.addChild": "添加子指标库",
"erm.appetite.validator.tab.data": "数据",
"erm.appetite.validator.tab.calculate": "计算",
"erm.appetite.crossValidator.grid.title": "交叉验证列表",
"erm.appetite.crossValidator.detail.dialog.title": "交叉验证详情",
"erm.appetite.crossValidator.detail.data": "数据輸入",
"erm.appetite.crossValidator.detail.calculate": "交叉验证測算",
"erm.appetite.spread.grid.title": "风险传导机制列表",
"erm.appetite.spread.detail.dialog.title": "风险传导机制详情",
"erm.appetite.spread.grid.entity.crossValidate": "交叉验证",
"erm.appetite.spread.grid.entity.crossValidateId": "交叉验证ID",
"erm.appetite.spread.grid.entity.crossValidateCode": "交叉验证代码",
"erm.appetite.spread.grid.entity.crossValidateName": "交叉验证名称",
"erm.appetite.spread.businessObject.grid.title": "业务战略目标传导分析",
"erm.appetite.spread.businessObject.grid.entity.spreadId": "风险传导机制ID",
"erm.appetite.spread.businessObject.grid.entity.business": "业务条线",
"erm.appetite.spread.businessObject.grid.entity.policy": "风险基调",
"erm.appetite.spread.businessObject.grid.entity.range": "对应区间",
"erm.appetite.spread.businessObject.grid.entity.lastYearLoanBalance": "上年贷款余额",
"erm.appetite.spread.businessObject.grid.entity.lastYearNpl": "上年不良贷款率(%)",
"erm.appetite.spread.businessObject.grid.entity.growthPercent": "预计增长率(%)",
"erm.appetite.spread.businessObject.grid.entity.predictLoanBalance": "预计本年贷款余额",
"erm.appetite.spread.businessObject.grid.entity.predictNpl": "预计本年不良贷款率(%)",
"erm.appetite.spread.industry.grid.title": "行业分析",
"erm.appetite.spread.industry.grid.entity.spreadId": "风险传导机制ID",
"erm.appetite.spread.industry.grid.entity.industry": "行业",
"erm.appetite.spread.industry.grid.entity.policy": "风险基调",
"erm.appetite.spread.industry.grid.entity.range": "对应区间",
"erm.appetite.spread.industry.grid.entity.lastYearLoanBalance": "上年贷款余额",
"erm.appetite.spread.industry.grid.entity.lastYearNpl": "上年不良贷款率(%)",
"erm.appetite.spread.industry.grid.entity.growthPercent": "预计增长率(%)",
"erm.appetite.spread.industry.grid.entity.predictLoanBalance": "预计本年贷款余额",
"erm.appetite.spread.industry.grid.entity.predictNpl": "预计本年不良贷款率(%)",
"erm.appetite.spread.shareholder.grid.title": "利益相关方分析(股东)",
"erm.appetite.spread.shareholder.grid.entity.stakeHolder": "利益相关方",
"erm.appetite.spread.shareholder.grid.entity.indicator": "指标",
"erm.appetite.spread.shareholder.grid.entity.indicatorCode": "指标代码",
"erm.appetite.spread.shareholder.grid.entity.indicatorName": "指标名称",
"erm.appetite.spread.shareholder.grid.entity.indicatorUnit": "指标单位",
"erm.appetite.spread.shareholder.grid.entity.condition": "条件",
"erm.appetite.spread.supervision.grid.title": "利益相关方分析(监管)",
"erm.appetite.spread.supervision.grid.entity.stakeHolder": "利益相关方",
"erm.appetite.spread.supervision.grid.entity.indicator": "指标",
"erm.appetite.spread.supervision.grid.entity.indicatorCode": "指标代码",
"erm.appetite.spread.supervision.grid.entity.indicatorName": "指标名称",
"erm.appetite.spread.supervision.grid.entity.indicatorUnit": "指标单位",
"erm.appetite.spread.supervision.grid.entity.condition": "条件",
"erm.appetite.spread.coreIndicator.grid.title": "核心指标汇总",
"erm.appetite.spread.coreIndicator.grid.entity.indicator": "指标",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorCode": "指标代码",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorName": "指标名称",
"erm.appetite.spread.coreIndicator.grid.entity.indicatorUnit": "指标单位",
"erm.appetite.spread.coreIndicator.grid.entity.supervisionMinValue": "容忍下限(监管要求)",
"erm.appetite.spread.coreIndicator.grid.entity.expectValue": "目标值(股东期望)",
"erm.appetite.spread.coreIndicator.grid.entity.referenceValue": "参考值(定量传导)",
"erm.appetite.spread.coreIndicator.grid.entity.lastYearValue": "上年度指标值"
}

2
erm.frontend/src/menus/menus.json

@ -30,7 +30,7 @@
/*/*/
{"type":"GROUP", "order":200, "parentId":"menu.erm", "id":"menu.erm.appetite", "titleI18nKey":"menu.erm.appetite", "icon":"bi-droplet"},
/*//*/
{"type":"ROUTE", "order":100, "parentId":"menu.erm.appetite", "id":"menu.erm.appetite.validate", "titleI18nKey":"menu.erm.appetite.validate", "icon":"bi-shuffle", "routeName":"route.erm.appetite.validate"},
{"type":"ROUTE", "order":100, "parentId":"menu.erm.appetite", "id":"menu.erm.appetite.crossValidate", "titleI18nKey":"menu.erm.appetite.crossValidate", "icon":"bi-shuffle", "routeName":"route.erm.appetite.crossValidate"},
/*//*/
{"type":"ROUTE", "order":200, "parentId":"menu.erm.appetite", "id":"menu.erm.appetite.spread", "titleI18nKey":"menu.erm.appetite.spread", "icon":"bi-sliders", "routeName":"route.erm.appetite.spread"},
/*//*/

10
erm.frontend/src/routes/routes.json

@ -30,13 +30,13 @@
}
},
{
"name": "route.erm.appetite.validate",
"path": "erm/appetite/validate",
"name": "route.erm.appetite.crossValidate",
"path": "erm/appetite/crossValidate",
"parent": "/",
"priority": 0,
"module": "erm.frontend",
"component": "component.erm.appetite.validate",
"componentPath": "@/views/appetite/Validate.vue",
"component": "component.erm.appetite.crossValidate",
"componentPath": "@/views/appetite/cross-validate/CrossValidate.vue",
"redirect": null,
"meta": {
"permissions": [
@ -51,7 +51,7 @@
"priority": 0,
"module": "erm.frontend",
"component": "component.erm.appetite.spread",
"componentPath": "@/views/appetite/Spread.vue",
"componentPath": "@/views/appetite/spread/Spread.vue",
"redirect": null,
"meta": {
"permissions": [

663
erm.frontend/src/views/appetite/cross-validate/Calculate.vue

@ -0,0 +1,663 @@
<template>
<div class="row">
<div class="col-6 pr-1">
<q-banner class="text-white bg-primary" inline-actions>
<template #avatar>
<q-icon name="bi-arrow-up-circle"></q-icon>
</template>
<q-item-label class="text-h6">低阶指标 -> 高阶指标</q-item-label>
<template #action>
<q-btn label="计算" outline @click.stop.prevent="() => {}"></q-btn>
</template>
</q-banner>
<q-list bordered>
<q-expansion-item expand-separator label="1. 信用风险资本占用比例与CAR(资本充足率)">
<q-card class="pb-2">
<q-card-section class="text-subtitle2 py-0"> 1.1 关联关系: </q-card-section>
<q-card-section class="text-caption pl-10 py-0"> 信用风险资本占用比例 -> 信用风险加权资产 -> 风险加权资产 -> 资本充足率 </q-card-section>
<q-card-section class="text-subtitle2 py-0"> 1.2 涉及科目: </q-card-section>
<q-card-section class="text-caption pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>[T+1]总资本净额预测值</td>
<td align="right">12710.88</td>
<td>_计划财务部</td>
</tr>
<tr>
<td>[T+1]市场风险加权资产预测值</td>
<td align="right">2244.22</td>
<td>_计划财务部</td>
</tr>
<tr>
<td>[T+1]操作风险加权资产预测值</td>
<td align="right">224.22</td>
<td>_计划财务部</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
<q-card-section class="text-subtitle2 py-0"> 1.3 勾稽过程: </q-card-section>
<q-card-section class="text-overline py-0"> i. 风险偏好指标(敏感性分析自变量) </q-card-section>
<q-card-section class="text-overline pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>信用风险资本占用比例</td>
<td><q-input value="3" type="number" outlined dense></q-input></td>
<td>_风险管理部</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
<q-card-section class="text-overline py-0"> ii. 风险偏好指标(敏感性分析因变量) </q-card-section>
<q-card-section class="text-caption pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>CAR</td>
<td align="right">45.57%</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
</q-card>
</q-expansion-item>
<q-expansion-item expand-separator label="2. 拨备覆盖率与CAR">
<q-card class="pb-2">
<q-card-section class="text-subtitle2 py-0"> 2.1 关联关系: </q-card-section>
<q-card-section class="text-caption pl-6 py-0"> 拨备覆盖率 -> 超额拨备计入二级资本部分 -> 总资本净额 -> 资本充足率 </q-card-section>
<q-card-section class="text-subtitle2 py-0"> 2.2 涉及科目: </q-card-section>
<q-card-section class="text-caption pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>[T+1]贷款总额预测值</td>
<td align="right">22.22</td>
<td>_计划财务部</td>
</tr>
<tr>
<td>[T+1]贷款专项准备</td>
<td align="right">22.22</td>
<td>_计划财务部</td>
</tr>
<tr>
<td>[T+1]一级资本净额预测值</td>
<td align="right">22.22</td>
<td>_计划财务部</td>
</tr>
<tr>
<td>[T+1]二级资本工具及其溢价可计入部分预测值</td>
<td align="right">22.22</td>
<td>_计划财务部</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
<q-card-section class="text-subtitle2 py-0"> 2.3 勾稽过程: </q-card-section>
<q-card-section class="text-overline py-0"> i. 风险偏好指标(敏感性分析自变量) </q-card-section>
<q-card-section class="text-overline pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>拨备覆盖率</td>
<td><q-input value="3" type="number" outlined dense></q-input></td>
<td>_风险管理部</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
<q-card-section class="text-overline py-0"> ii. 中间过程指标 </q-card-section>
<q-card-section class="text-overline pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>不良贷款率</td>
<td><q-input value="3" type="number" outlined dense></q-input></td>
<td>_风险管理部</td>
</tr>
<tr>
<td>不良贷款余额</td>
<td align="right">2.44</td>
<td>_风险管理部</td>
</tr>
<tr>
<td>贷款计提最低要求</td>
<td align="right">22.22</td>
<td>_风险管理部</td>
</tr>
<tr>
<td>超额拨备计入二级资本</td>
<td align="right">0</td>
<td>_风险管理部</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
<q-card-section class="text-overline py-0"> iii. 风险偏好指标(敏感性分析因变量)</q-card-section>
<q-card-section class="text-overline pl-10 py-0">
<q-markup-table separator="cell" flat bordered dense>
<tbody class="text-caption">
<tr>
<td>CAR</td>
<td align="right">1.74%</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</div>
<div class="col-6 pl-1">
<q-banner class="text-white bg-primary" inline-actions>
<template #avatar>
<q-icon name="bi-arrow-down-circle"></q-icon>
</template>
<q-item-label class="text-h6">高阶指标 -> 低阶指标(敏感性压力测试)</q-item-label>
<template #action>
<q-btn label="计算" outline @click.stop.prevent="() => {}"></q-btn>
</template>
</q-banner>
<q-list bordered>
<q-item>
<q-item-section>
<div class="row q-col-gutter-md">
<div class="col-6">
<q-select
label="信用风险资本占用比例与CAR"
outlined
dense
:options="creditCarOptions"
:option-disable="
(item) => {
if (item === null) {
return true;
}
return item.noSelect;
}
"
>
<template #option="{ itemProps, opt }">
<q-item v-bind="itemProps">
<q-item-section>
<q-item-label>{{ opt.percent }}</q-item-label>
</q-item-section>
<q-item-section side>
<q-item-label>{{ opt.car }}</q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-6">
<q-select
label="拨备覆盖率与CAR"
outlined
dense
:options="provisionCarOptions"
:option-disable="
(item) => {
if (item === null) {
return true;
}
return item.noSelect;
}
"
>
<template #option="{ itemProps, opt }">
<q-item v-bind="itemProps">
<q-item-section>
<q-item-label>{{ opt.percent }}</q-item-label>
</q-item-section>
<q-item-section side>
<q-item-label>{{ opt.car }}</q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
</q-item-section>
</q-item>
<q-item>
<q-item-section>
<q-item-label class="text-caption">
<q-markup-table separator="cell" flat bordered dense>
<thead>
<tr>
<th>信用风险资本占用比例</th>
<th>CAR</th>
<th>不良率</th>
<th>拨备覆盖率</th>
</tr>
</thead>
<tbody>
<tr>
<td>40%</td>
<td>19.23%</td>
<td><q-input value="3" type="number" outlined dense></q-input></td>
<td>未发现匹配值</td>
</tr>
</tbody>
</q-markup-table>
</q-item-label>
</q-item-section>
</q-item>
</q-list>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const creditCarOptions = [
{ percent: '信用风险资本占用比例', car: 'CAR', noSelect: true },
{ percent: '40%', car: '19.25%' },
{ percent: '40.25%', car: '19.14%' },
{ percent: '40.5%', car: '19.02%' },
{ percent: '40.75%', car: '18.91%' },
{ percent: '41%', car: '18.8%' },
{ percent: '41.25%', car: '18.69%' },
{ percent: '41.5%', car: '18.58%' },
{ percent: '41.75%', car: '18.47%' },
{ percent: '42%', car: '18.37%' },
{ percent: '42.25%', car: '18.26%' },
{ percent: '42.5%', car: '18.16%' },
{ percent: '42.75%', car: '18.06%' },
{ percent: '43%', car: '17.96%' },
{ percent: '43.25%', car: '17.86%' },
{ percent: '43.5%', car: '17.76%' },
{ percent: '43.75%', car: '17.66%' },
{ percent: '44%', car: '17.56%' },
{ percent: '44.25%', car: '17.47%' },
{ percent: '44.5%', car: '17.37%' },
{ percent: '44.75%', car: '17.28%' },
{ percent: '45%', car: '17.18%' },
{ percent: '45.25%', car: '17.09%' },
{ percent: '45.5%', car: '17%' },
{ percent: '45.75%', car: '16.91%' },
{ percent: '46%', car: '16.82%' },
{ percent: '46.25%', car: '16.74%' },
{ percent: '46.5%', car: '16.65%' },
{ percent: '46.75%', car: '16.56% ' },
{ percent: '47%', car: '16.48%' },
{ percent: '47.25%', car: '16.39%' },
{ percent: '47.5%', car: '16.31%' },
{ percent: '47.75%', car: '16.23%' },
{ percent: '48%', car: '16.14%' },
{ percent: '48.25%', car: '16.06%' },
{ percent: '48.5%', car: '15.98%' },
{ percent: '48.75%', car: '15.9%' },
{ percent: '49%', car: '15.82%' },
{ percent: '49.25%', car: '15.75%' },
{ percent: '49.5%', car: '15.67%' },
{ percent: '49.75%', car: '15.59%' },
{ percent: '50%', car: '15.52%' },
{ percent: '50.25%', car: '15.44%' },
{ percent: '50.5%', car: '15.37%' },
{ percent: '50.75%', car: '15.3%' },
{ percent: '51%', car: '15.22%' },
{ percent: '51.25%', car: '15.15%' },
{ percent: '51.5%', car: '15.08%' },
{ percent: '51.75%', car: '15.01%' },
{ percent: '52%', car: '14.94%' },
{ percent: '52.25%', car: '14.87%' },
{ percent: '52.5%', car: '14.8%' },
{ percent: '52.75%', car: '14.73%' },
{ percent: '53%', car: '14.66%' },
{ percent: '53.25%', car: '14.6%' },
{ percent: '53.5%', car: '14.53%' },
{ percent: '53.75%', car: '14.47%' },
{ percent: '54%', car: '14.4%' },
{ percent: '54.25%', car: '14.34%' },
{ percent: '54.5%', car: '14.27%' },
{ percent: '54.75%', car: '14.21%' },
{ percent: '55%', car: '14.15%' },
{ percent: '55.25%', car: '14.08%' },
{ percent: '55.5%', car: '14.02%' },
{ percent: '55.75%', car: '13.96%' },
{ percent: '56%', car: '13.9%' },
{ percent: '56.25%', car: '13.84%' },
{ percent: '56.5%', car: '13.78%' },
{ percent: '56.75%', car: '13.72%' },
{ percent: '57%', car: '13.66%' },
{ percent: '57.25%', car: '13.6%' },
{ percent: '57.5%', car: '13.55%' },
{ percent: '57.75%', car: '13.49%' },
{ percent: '58%', car: '13.43%' },
{ percent: '58.25%', car: '13.38%' },
{ percent: '58.5%', car: '13.32%' },
{ percent: '58.75%', car: '13.27%' },
{ percent: '59%', car: '13.21%' },
{ percent: '59.25%', car: '13.16%' },
{ percent: '59.5%', car: '13.1%' },
{ percent: '59.75%', car: '13.05%' },
{ percent: '60%', car: '13%' },
{ percent: '60.25%', car: '12.94%' },
{ percent: '60.5%', car: '12.89%' },
{ percent: '60.75%', car: '12.84%' },
{ percent: '61%', car: '12.79%' },
{ percent: '61.25%', car: '12.74%' },
{ percent: '61.5%', car: '12.69%' },
{ percent: '61.75%', car: '12.64%' },
{ percent: '62%', car: '12.59%' },
{ percent: '62.25%', car: '12.54%' },
{ percent: '62.5%', car: '12.49%' },
{ percent: '62.75%', car: '12.44%' },
{ percent: '63%', car: '12.39%' },
{ percent: '63.25%', car: '12.34%' },
{ percent: '63.5%', car: '12.3%' },
{ percent: '63.75%', car: '12.25%' },
{ percent: '64%', car: '12.2%' },
{ percent: '64.25%', car: '12.16%' },
{ percent: '64.5%', car: '12.11%' },
{ percent: '64.75%', car: '12.07%' },
{ percent: '65%', car: '12.02%' },
{ percent: '65.25%', car: '11.98%' },
{ percent: '65.5%', car: '11.93%' },
{ percent: '65.75%', car: '11.89%' },
{ percent: '66%', car: '11.84%' },
{ percent: '66.25%', car: '11.8%' },
{ percent: '66.5%', car: '11.76%' },
{ percent: '66.75%', car: '11.71%' },
{ percent: '67%', car: '11.67%' },
{ percent: '67.25%', car: '11.63%' },
{ percent: '67.5%', car: '11.59%' },
{ percent: '67.75%', car: '11.54%' },
{ percent: '68%', car: '11.5%' },
{ percent: '68.25%', car: '11.46%' },
{ percent: '68.5%', car: '11.42%' },
{ percent: '68.75%', car: '11.38%' },
{ percent: '69%', car: '11.34%' },
{ percent: '69.25%', car: '11.3%' },
{ percent: '69.5%', car: '11.26%' },
{ percent: '69.75%', car: '11.22%' },
{ percent: '70%', car: '11.18%' },
{ percent: '70.25%', car: '11.14%' },
{ percent: '70.5%', car: '11.1%' },
{ percent: '70.75%', car: '11.06%' },
{ percent: '71%', car: '11.03%' },
{ percent: '71.25%', car: '10.99%' },
{ percent: '71.5%', car: '10.95%' },
{ percent: '71.75%', car: '10.91%' },
{ percent: '72%', car: '10.88%' },
{ percent: '72.25%', car: '10.84%' },
{ percent: '72.5%', car: '10.8%' },
{ percent: '72.75%', car: '10.77%' },
{ percent: '73%', car: '10.73%' },
{ percent: '73.25%', car: '10.69%' },
{ percent: '73.5%', car: '10.66%' },
{ percent: '73.75%', car: '10.62%' },
{ percent: '74%', car: '10.59%' },
{ percent: '74.25%', car: '10.55%' },
{ percent: '74.5%', car: '10.52%' },
{ percent: '74.75%', car: '10.48%' },
{ percent: '75%', car: '10.45%' },
{ percent: '75.25%', car: '10.42%' },
{ percent: '75.5%', car: '10.38%' },
{ percent: '75.75%', car: '10.35%' },
{ percent: '76%', car: '10.32%' },
{ percent: '76.25%', car: '10.28%' },
{ percent: '76.5%', car: '10.25%' },
{ percent: '76.75%', car: '10.22%' },
{ percent: '77%', car: '10.18%' },
{ percent: '77.25%', car: '10.15%' },
{ percent: '77.5%', car: '10.12%' },
{ percent: '77.75%', car: '10.09%' },
{ percent: '78%', car: '10.06%' },
{ percent: '78.25%', car: '10.02%' },
{ percent: '78.5%', car: '9.99%' },
{ percent: '78.75%', car: '9.96%' },
{ percent: '79%', car: '9.93%' },
{ percent: '79.25%', car: '9.9%' },
{ percent: '79.5%', car: '9.87%' },
{ percent: '79.75%', car: '9.84%' },
{ percent: '80%', car: '9.81%' },
{ percent: '80.25%', car: '9.78%' },
{ percent: '80.5%', car: '9.75%' },
{ percent: '80.75%', car: '9.72%' },
{ percent: '81%', car: '9.69%' },
{ percent: '81.25%', car: '9.66%' },
{ percent: '81.5%', car: '9.63%' },
{ percent: '81.75%', car: '9.6%' },
{ percent: '82%', car: '9.57%' },
{ percent: '82.25%', car: '9.55%' },
{ percent: '82.5%', car: '9.52%' },
{ percent: '82.75%', car: '9.49%' },
{ percent: '83%', car: '9.46%' },
{ percent: '83.25%', car: '9.43%' },
{ percent: '83.5%', car: '9.41%' },
{ percent: '83.75%', car: '9.38%' },
{ percent: '84%', car: '9.35%' },
{ percent: '84.25%', car: '9.32%' },
{ percent: '84.5%', car: '9.3%' },
{ percent: '84.75%', car: '9.27%' },
{ percent: '85%', car: '9.24%' },
{ percent: '85.25%', car: '9.22%' },
{ percent: '85.5%', car: '9.19%' },
{ percent: '85.75%', car: '9.16%' },
{ percent: '86%', car: '9.14%' },
{ percent: '86.25%', car: '9.11%' },
{ percent: '86.5%', car: '9.09%' },
{ percent: '86.75%', car: '9.06%' },
{ percent: '87%', car: '9.03%' },
{ percent: '87.25%', car: '9.01%' },
{ percent: '87.5%', car: '8.98%' },
{ percent: '87.75%', car: '8.96%' },
{ percent: '88%', car: '8.93%' },
{ percent: '88.25%', car: '8.91%' },
{ percent: '88.5%', car: '8.88%' },
{ percent: '88.75%', car: '8.86%' },
{ percent: '89%', car: '8.83%' },
{ percent: '89.25%', car: '8.81%' },
{ percent: '89.5%', car: '8.79%' },
{ percent: '89.75%', car: '8.76%' },
{ percent: '90%', car: '8.74%' },
];
const provisionCarOptions = [
{ percent: '拨备覆盖率', car: 'CAR' },
{ percent: '150%', car: '1.50%' },
{ percent: '151%', car: '1.50%' },
{ percent: '152%', car: '1.50%' },
{ percent: '153%', car: '1.50%' },
{ percent: '154%', car: '1.50%' },
{ percent: '155%', car: '1.50%' },
{ percent: '156%', car: '1.50%' },
{ percent: '157%', car: '1.50%' },
{ percent: '158%', car: '1.50%' },
{ percent: '159%', car: '1.50%' },
{ percent: '160%', car: '1.50%' },
{ percent: '161%', car: '1.50%' },
{ percent: '162%', car: '1.50%' },
{ percent: '163%', car: '1.50%' },
{ percent: '164%', car: '1.50%' },
{ percent: '165%', car: '1.50%' },
{ percent: '166%', car: '1.50%' },
{ percent: '167%', car: '1.50%' },
{ percent: '168%', car: '1.50%' },
{ percent: '169%', car: '1.50%' },
{ percent: '170%', car: '1.50%' },
{ percent: '171%', car: '1.50%' },
{ percent: '172%', car: '1.50%' },
{ percent: '173%', car: '1.50%' },
{ percent: '174%', car: '1.50%' },
{ percent: '175%', car: '1.50%' },
{ percent: '176%', car: '1.50%' },
{ percent: '177%', car: '1.50%' },
{ percent: '178%', car: '1.50%' },
{ percent: '179%', car: '1.50%' },
{ percent: '180%', car: '1.50%' },
{ percent: '181%', car: '1.50%' },
{ percent: '182%', car: '1.50%' },
{ percent: '183%', car: '1.50%' },
{ percent: '184%', car: '1.50%' },
{ percent: '185%', car: '1.50%' },
{ percent: '186%', car: '1.50%' },
{ percent: '187%', car: '1.50%' },
{ percent: '188%', car: '1.50%' },
{ percent: '189%', car: '1.50%' },
{ percent: '190%', car: '1.50%' },
{ percent: '191%', car: '1.50%' },
{ percent: '192%', car: '1.50%' },
{ percent: '193%', car: '1.50%' },
{ percent: '194%', car: '1.50%' },
{ percent: '195%', car: '1.50%' },
{ percent: '196%', car: '1.50%' },
{ percent: '197%', car: '1.50%' },
{ percent: '198%', car: '1.50%' },
{ percent: '199%', car: '1.50%' },
{ percent: '200%', car: '1.50%' },
{ percent: '201%', car: '1.50%' },
{ percent: '202%', car: '1.50%' },
{ percent: '203%', car: '1.50%' },
{ percent: '204%', car: '1.50%' },
{ percent: '205%', car: '1.50%' },
{ percent: '206%', car: '1.50%' },
{ percent: '207%', car: '1.50%' },
{ percent: '208%', car: '1.50%' },
{ percent: '209%', car: '1.50%' },
{ percent: '210%', car: '1.50%' },
{ percent: '211%', car: '1.50%' },
{ percent: '212%', car: '1.50%' },
{ percent: '213%', car: '1.50%' },
{ percent: '214%', car: '1.50%' },
{ percent: '215%', car: '1.50%' },
{ percent: '216%', car: '1.50%' },
{ percent: '217%', car: '1.50%' },
{ percent: '218%', car: '1.50%' },
{ percent: '219%', car: '1.50%' },
{ percent: '220%', car: '1.50%' },
{ percent: '221%', car: '1.50%' },
{ percent: '222%', car: '1.50%' },
{ percent: '223%', car: '1.50%' },
{ percent: '224%', car: '1.50%' },
{ percent: '225%', car: '1.50%' },
{ percent: '226%', car: '1.50%' },
{ percent: '227%', car: '1.50%' },
{ percent: '228%', car: '1.50%' },
{ percent: '229%', car: '1.50%' },
{ percent: '230%', car: '1.50%' },
{ percent: '231%', car: '1.50%' },
{ percent: '232%', car: '1.50%' },
{ percent: '233%', car: '1.50%' },
{ percent: '234%', car: '1.50%' },
{ percent: '235%', car: '1.50%' },
{ percent: '236%', car: '1.50%' },
{ percent: '237%', car: '1.50%' },
{ percent: '238%', car: '1.50%' },
{ percent: '239%', car: '1.50%' },
{ percent: '240%', car: '1.50%' },
{ percent: '241%', car: '1.50%' },
{ percent: '242%', car: '1.50%' },
{ percent: '243%', car: '1.50%' },
{ percent: '244%', car: '1.50%' },
{ percent: '245%', car: '1.50%' },
{ percent: '246%', car: '1.50%' },
{ percent: '247%', car: '1.50%' },
{ percent: '248%', car: '1.50%' },
{ percent: '249%', car: '1.50%' },
{ percent: '250%', car: '1.50%' },
{ percent: '251%', car: '1.50%' },
{ percent: '252%', car: '1.50%' },
{ percent: '253%', car: '1.50%' },
{ percent: '254%', car: '1.50%' },
{ percent: '255%', car: '1.50%' },
{ percent: '256%', car: '1.50%' },
{ percent: '257%', car: '1.50%' },
{ percent: '258%', car: '1.50%' },
{ percent: '259%', car: '1.50%' },
{ percent: '260%', car: '1.50%' },
{ percent: '261%', car: '1.50%' },
{ percent: '262%', car: '1.50%' },
{ percent: '263%', car: '1.50%' },
{ percent: '264%', car: '1.50%' },
{ percent: '265%', car: '1.50%' },
{ percent: '266%', car: '1.50%' },
{ percent: '267%', car: '1.50%' },
{ percent: '268%', car: '1.50%' },
{ percent: '269%', car: '1.50%' },
{ percent: '270%', car: '1.50%' },
{ percent: '271%', car: '1.50%' },
{ percent: '272%', car: '1.50%' },
{ percent: '273%', car: '1.50%' },
{ percent: '274%', car: '1.50%' },
{ percent: '275%', car: '1.50%' },
{ percent: '276%', car: '1.50%' },
{ percent: '277%', car: '1.50%' },
{ percent: '278%', car: '1.50%' },
{ percent: '279%', car: '1.50%' },
{ percent: '280%', car: '1.50%' },
{ percent: '281%', car: '1.50%' },
{ percent: '282%', car: '1.50%' },
{ percent: '283%', car: '1.50%' },
{ percent: '284%', car: '1.50%' },
{ percent: '285%', car: '1.50%' },
{ percent: '286%', car: '1.50%' },
{ percent: '287%', car: '1.50%' },
{ percent: '288%', car: '1.50%' },
{ percent: '289%', car: '1.50%' },
{ percent: '290%', car: '1.50%' },
{ percent: '291%', car: '1.50%' },
{ percent: '292%', car: '1.50%' },
{ percent: '293%', car: '1.50%' },
{ percent: '294%', car: '1.50%' },
{ percent: '295%', car: '1.50%' },
{ percent: '296%', car: '1.50%' },
{ percent: '297%', car: '1.50%' },
{ percent: '298%', car: '1.50%' },
{ percent: '299%', car: '1.50%' },
{ percent: '300%', car: '1.50%' },
{ percent: '301%', car: '1.50%' },
{ percent: '302%', car: '1.50%' },
{ percent: '303%', car: '1.50%' },
{ percent: '304%', car: '1.50%' },
{ percent: '305%', car: '1.50%' },
{ percent: '306%', car: '1.50%' },
{ percent: '307%', car: '1.50%' },
{ percent: '308%', car: '1.50%' },
{ percent: '309%', car: '1.50%' },
{ percent: '310%', car: '1.50%' },
{ percent: '311%', car: '1.50%' },
{ percent: '312%', car: '1.50%' },
{ percent: '313%', car: '1.50%' },
{ percent: '314%', car: '1.50%' },
{ percent: '315%', car: '1.50%' },
{ percent: '316%', car: '1.50%' },
{ percent: '317%', car: '1.50%' },
{ percent: '318%', car: '1.50%' },
{ percent: '319%', car: '1.50%' },
{ percent: '320%', car: '1.50%' },
{ percent: '321%', car: '1.50%' },
{ percent: '322%', car: '1.50%' },
{ percent: '323%', car: '1.50%' },
{ percent: '324%', car: '1.50%' },
{ percent: '325%', car: '1.50%' },
{ percent: '326%', car: '1.50%' },
{ percent: '327%', car: '1.50%' },
{ percent: '328%', car: '1.50%' },
{ percent: '329%', car: '1.50%' },
{ percent: '330%', car: '1.50%' },
{ percent: '331%', car: '1.50%' },
{ percent: '332%', car: '1.50%' },
{ percent: '333%', car: '1.50%' },
{ percent: '334%', car: '1.50%' },
{ percent: '335%', car: '1.50%' },
{ percent: '336%', car: '1.50%' },
{ percent: '337%', car: '1.50%' },
{ percent: '338%', car: '1.50%' },
{ percent: '339%', car: '1.50%' },
{ percent: '340%', car: '1.50%' },
{ percent: '341%', car: '1.50%' },
{ percent: '342%', car: '1.50%' },
{ percent: '343%', car: '1.50%' },
{ percent: '344%', car: '1.50%' },
{ percent: '345%', car: '1.50%' },
{ percent: '346%', car: '1.50%' },
{ percent: '347%', car: '1.50%' },
{ percent: '348%', car: '1.50%' },
{ percent: '349%', car: '1.50%' },
{ percent: '350%', car: '1.50%' },
];
</script>

104
erm.frontend/src/views/appetite/cross-validate/CrossValidate.vue

@ -0,0 +1,104 @@
<template>
<div>
<w-grid
ref="gridRef"
:title="$t('erm.appetite.crossValidator.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:sticky-num="2"
:data-url="Environment.apiContextPath('/api/erm/appetite/crossValidate')"
:query-form-cols-num="4"
:query-form-fields="[
{ name: 'code', label: $t('code'), type: 'text' },
{ name: 'name', label: $t('name'), type: 'text' },
{ name: 'year', label: $t('year'), type: 'text' },
]"
:pagination="{
sortBy: 'lastModifyDate',
descending: true,
}"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'query',
'refresh',
'separator',
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'detail',
label: $t('detail'),
icon: 'bi-chat-square-text',
enableIf: (arg) => {
return arg.selected;
},
click: () => {
crossValidateDialogRef.open('');
},
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ width: 100, name: 'code', label: $t('code') },
{ width: 300, name: 'name', label: $t('name') },
{ width: 300, name: 'description', label: $t('description') },
{ width: 100, name: 'year', label: $t('year') },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '350px',
},
form: {
colsNum: 1,
fields: [
{ name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), colSpan: 3, type: 'textarea', rows: 3 },
{
name: 'year',
label: $t('year'),
type: 'date',
defaultView: 'Years',
},
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'year', label: $t('year') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
></w-grid>
<CrossValidateDialog ref="crossValidateDialogRef"></CrossValidateDialog>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, Formater } from 'platform-core';
import CrossValidateDialog from './CrossValidateDialog.vue';
const gridRef = ref();
const crossValidateDialogRef = ref();
</script>

57
erm.frontend/src/views/appetite/cross-validate/CrossValidateDialog.vue

@ -0,0 +1,57 @@
<template>
<w-dialog
ref="dialogRef"
:title="$t('erm.appetite.crossValidator.detail.dialog.title')"
width="1200px"
height="700px"
:can-maximize="false"
:buttons="[
{
label: $t('confirm'),
noCaps: true,
click: () => {},
},
]"
>
<div class="p-2">
<q-stepper ref="stepper" v-model="stepperRef.currentStep" flat header-nav color="primary" animated header-class="px-80">
<q-step :name="1" :title="$t('erm.appetite.crossValidator.detail.data')" icon="bi-1-circle" :done="stepperRef.doneOfStep1">
<Data></Data>
</q-step>
<q-step :name="2" :title="$t('erm.appetite.crossValidator.detail.calculate')" icon="bi-2-circle" :done="stepperRef.doneOfStep2">
<Calculate></Calculate>
</q-step>
</q-stepper>
</div>
</w-dialog>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue';
import { axios, Environment, NotifyManager, Tools } from 'platform-core';
import Data from './Data.vue';
import Calculate from './Calculate.vue';
const dialogRef = ref();
const stepperRef = reactive({
currentStep: 1,
doneOfStep1: false,
doneOfStep2: false,
});
let currentId = '';
const open = (id: string) => {
currentId = id;
dialogRef.value.show();
};
const close = () => {
dialogRef.value.hide();
};
defineExpose({
open,
close,
});
</script>

102
erm.frontend/src/views/appetite/cross-validate/Data.vue

@ -0,0 +1,102 @@
<template>
<q-markup-table separator="cell" flat bordered dense>
<thead>
<tr
:style="{
'background-color': $gc.theme.grid.headBgColor,
}"
>
<!-- <th style="width: 100%">科目</th>
<th style="width: 80px">单位</th>
<th style="width: 300px">上年实际值</th>
<th style="width: 300px">增长率(%)</th>
<th style="width: 300px">当年预测值</th> -->
<th>科目</th>
<th width="80px">单位</th>
<th width="200px">上年实际值</th>
<th width="200px">增长率(%)</th>
<th width="150px">当年预测值</th>
</tr>
</thead>
<tbody>
<tr>
<td>总资本净额预测值:G40_3.A</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>市场风险加权资产预测值:G40_5.A</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>操作风险加权资产预测值:G40_6.A</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>贷款总额预测值</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>贷款专项准备</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>一级资本净额预测值:G40_2.A</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
<tr>
<td>二级资本工具及其溢价可计入部分预测:G4A_5.1.A</td>
<td align="center">亿元</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td>
<q-input value="3" type="number" outlined dense></q-input>
</td>
<td class="text-right">396.29</td>
</tr>
</tbody>
</q-markup-table>
</template>
<script setup lang="ts"></script>

124
erm.frontend/src/views/appetite/spread/Spread.vue

@ -0,0 +1,124 @@
<template>
<div>
<w-grid
ref="gridRef"
:title="$t('erm.appetite.spread.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:sticky-num="2"
:data-url="Environment.apiContextPath('/api/erm/appetite/spread')"
:query-form-cols-num="4"
:query-form-fields="[
{ name: 'code', label: $t('code'), type: 'text' },
{ name: 'name', label: $t('name'), type: 'text' },
{ name: 'year', label: $t('year'), type: 'text' },
]"
:pagination="{
sortBy: 'lastModifyDate',
descending: true,
}"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'query',
'refresh',
'separator',
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'detail',
label: $t('detail'),
icon: 'bi-chat-square-text',
enableIf: (arg) => {
return arg.selected;
},
click: (arg) => {
spreadDialogRef.open(arg.selected.id);
},
},
'separator',
'view',
'separator',
'export',
]"
:columns="[
{ width: 150, name: 'code', label: $t('code') },
{ width: 200, name: 'name', label: $t('name') },
{ width: '100%', name: 'description', label: $t('description') },
{ width: 100, name: 'year', label: $t('year') },
{ width: 150, name: 'crossValidateCode', label: $t('erm.appetite.spread.grid.entity.crossValidateCode') },
{ width: 150, name: 'crossValidateName', label: $t('erm.appetite.spread.grid.entity.crossValidateName') },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '400px',
},
form: {
colsNum: 1,
fields: [
{ name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), colSpan: 3, type: 'textarea', rows: 3 },
{
name: 'year',
label: $t('year'),
type: 'date',
defaultView: 'Years',
},
{ name: 'crossValidate', label: $t('erm.appetite.spread.grid.entity.crossValidate'), type: 'select', options: crossValidateOptionsRef },
],
},
}"
:viewer="{
panel: {
columnNum: 1,
fields: [
{ name: 'id', label: $t('id') },
{ name: 'code', label: $t('code') },
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'year', label: $t('year') },
{ name: 'crossValidateId', label: $t('erm.appetite.spread.grid.entity.crossValidateId') },
{ name: 'crossValidateCode', label: $t('erm.appetite.spread.grid.entity.crossValidateCode') },
{ name: 'crossValidateName', label: $t('erm.appetite.spread.grid.entity.crossValidateName') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
{ name: 'lastModifier', label: $t('lastModifier') },
{ name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.none() },
{ name: 'corporationCode', label: $t('corporationCode') },
],
},
}"
></w-grid>
<SpreadDialog ref="spreadDialogRef"></SpreadDialog>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, Formater } from 'platform-core';
import SpreadDialog from './SpreadDialog.vue';
const gridRef = ref();
const spreadDialogRef = ref();
const crossValidateOptionsRef = ref([]);
axios.get(Environment.apiContextPath('/api/erm/appetite/crossValidate?pageable=false')).then((response) => {
const items = response?.data?.content;
if (items) {
crossValidateOptionsRef.value.splice(0, crossValidateOptionsRef.value.length);
for (const item of items) {
crossValidateOptionsRef.value.push({
value: item.id,
label: item.name + '(' + item.code + ')',
});
}
}
});
</script>

71
erm.frontend/src/views/appetite/spread/SpreadBusinessObject.vue

@ -0,0 +1,71 @@
<template>
<w-grid
:title="$t('erm.appetite.spread.businessObject.grid.title')"
:height="500"
:config-button="false"
selection="multiple"
:checkbox-selection="true"
:sticky-num="0"
:data-url="Environment.apiContextPath('/api/erm/appetite/spreadBusinessObject')"
:fetch-data-url="Environment.apiContextPath('/api/erm/appetite/spreadBusinessObject/findBySpreadId?spreadId=' + relationId)"
:query-form-cols-num="4"
:query-form-fields="[]"
:pageable="false"
hide-pagination
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'calculate',
label: $t('calculate'),
icon: 'bi-file-spreadsheet',
click: () => {},
},
]"
:columns="[
{ width: '100%', name: 'business', label: $t('erm.appetite.spread.businessObject.grid.entity.business'), format: Formater.dictionary(BANK_BUSINESS) },
{ width: 120, name: 'policy', label: $t('erm.appetite.spread.businessObject.grid.entity.policy'), format: Formater.dictionary(RISK_POLICY) },
{ width: 100, name: 'range', label: $t('erm.appetite.spread.businessObject.grid.entity.range') },
{ width: 150, name: 'lastYearLoanBalance', label: $t('erm.appetite.spread.businessObject.grid.entity.lastYearLoanBalance') },
{ width: 150, name: 'lastYearNpl', label: $t('erm.appetite.spread.businessObject.grid.entity.lastYearNpl'), align: 'right' },
{ width: 120, name: 'growthPercent', label: $t('erm.appetite.spread.businessObject.grid.entity.growthPercent'), align: 'right' },
{ width: 140, name: 'predictLoanBalance', label: $t('erm.appetite.spread.businessObject.grid.entity.predictLoanBalance'), align: 'right' },
{ width: 180, name: 'predictNpl', label: $t('erm.appetite.spread.businessObject.grid.entity.predictNpl'), align: 'right' },
]"
:editor="{
dialog: {
width: '400px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'spread', label: $t('erm.appetite.spread.businessObject.grid.entity.spreadId'), type: 'text', defaultValue: relationId, hidden: true },
{ name: 'id', label: $t('id'), hidden: true },
{
name: 'business',
label: $t('erm.appetite.spread.businessObject.grid.entity.business'),
type: 'select',
options: Options.dictionary(BANK_BUSINESS),
},
{ name: 'policy', label: $t('erm.appetite.spread.businessObject.grid.entity.policy'), type: 'select', options: Options.enum(RISK_POLICY) },
{ name: 'growthPercent', label: $t('erm.appetite.spread.businessObject.grid.entity.growthPercent'), type: 'number' },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
import { Environment, Options, Formater, EnumTools, DictionaryTools } from 'platform-core';
const props = defineProps({
relationId: { type: String, default: '' },
});
const BANK_BUSINESS = await DictionaryTools.fetch('BANK_BUSINESS');
const RISK_POLICY = await EnumTools.fetch('erm.api.enums.RiskPolicy');
</script>

92
erm.frontend/src/views/appetite/spread/SpreadIndustry.vue

@ -0,0 +1,92 @@
<template>
<w-grid
title=""
:height="500"
:hide-bottom="true"
:config-button="false"
selection="multiple"
:checkbox-selection="true"
:sticky-num="0"
:data-url="Environment.apiContextPath('/api/erm/appetite/spreadIndustry')"
:fetch-data-url="Environment.apiContextPath('/api/erm/appetite/spreadIndustry/findBySpreadId?spreadId=' + relationId)"
:query-form-cols-num="4"
:query-form-fields="[]"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'calculate',
label: $t('calculate'),
icon: 'bi-file-spreadsheet',
click: () => {},
},
]"
:columns="[
{
width: '100%',
name: 'industry',
label: $t('erm.appetite.spread.industry.grid.entity.industry'),
format: (value) => {
return industryMap[value];
},
},
{ width: 100, name: 'policy', label: $t('erm.appetite.spread.businessObject.grid.entity.policy'), format: Formater.dictionary(RISK_POLICY) },
{ width: 100, name: 'range', label: $t('erm.appetite.spread.businessObject.grid.entity.range') },
{ width: 120, name: 'lastYearLoanBalance', label: $t('erm.appetite.spread.businessObject.grid.entity.lastYearLoanBalance'), align: 'right' },
{ width: 140, name: 'lastYearNpl', label: $t('erm.appetite.spread.businessObject.grid.entity.lastYearNpl'), align: 'right' },
{ width: 120, name: 'growthPercent', label: $t('erm.appetite.spread.businessObject.grid.entity.growthPercent'), align: 'right' },
{ width: 140, name: 'predictLoanBalance', label: $t('erm.appetite.spread.businessObject.grid.entity.predictLoanBalance'), align: 'right' },
{ width: 170, name: 'predictNpl', label: $t('erm.appetite.spread.businessObject.grid.entity.predictNpl'), align: 'right' },
]"
:editor="{
dialog: {
width: '400px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'spread', label: $t('erm.appetite.spread.industry.grid.entity.spreadId'), type: 'text', defaultValue: relationId, hidden: true },
{ name: 'id', label: $t('id'), hidden: true },
{
name: 'industry',
label: $t('erm.appetite.spread.industry.grid.entity.industry'),
type: 'select',
options: industryOptionsRef,
},
{ name: 'policy', label: $t('erm.appetite.spread.industry.grid.entity.policy'), type: 'select', options: Options.enum(RISK_POLICY) },
{ name: 'growthPercent', label: $t('erm.appetite.spread.industry.grid.entity.growthPercent'), type: 'number' },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, Options, Formater, EnumTools, DictionaryTools } from 'platform-core';
const props = defineProps({
relationId: { type: String, default: '' },
});
const RISK_POLICY = await EnumTools.fetch('erm.api.enums.RiskPolicy');
const industryOptionsRef = ref([]);
let industryMap = {};
await axios.get(Environment.apiContextPath('/api/standard/industry/level1')).then((response) => {
industryOptionsRef.value.splice(0, industryOptionsRef.value.length);
const items = response.data;
if (items && items.length > 0) {
industryMap = {};
for (const item of items) {
industryOptionsRef.value.push({ label: item.code + '. ' + item.name, value: item.code });
industryMap[item.code] = item.code + '. ' + item.name;
}
}
});
</script>

88
erm.frontend/src/views/appetite/spread/SpreadShareholder.vue

@ -0,0 +1,88 @@
<template>
<w-grid
title=""
:height="500"
:hide-bottom="true"
:config-button="false"
selection="multiple"
:checkbox-selection="true"
:sticky-num="0"
:data-url="Environment.apiContextPath('/api/erm/appetite/spreadShareholder')"
:fetch-data-url="Environment.apiContextPath('/api/erm/appetite/spreadShareholder/findBySpreadId?spreadId=' + relationId)"
:query-form-cols-num="4"
:query-form-fields="[]"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'calculate',
label: $t('calculate'),
icon: 'bi-file-spreadsheet',
click: () => {},
},
]"
:columns="[
{ width: 100, name: 'stakeHolder', label: $t('erm.appetite.spread.shareholder.grid.entity.stakeHolder'), format: Formater.enum(StakeHolderEnums) },
{ width: 150, name: 'indicatorCode', label: $t('erm.appetite.spread.shareholder.grid.entity.indicatorCode') },
{ width: 400, name: 'indicatorName', label: $t('erm.appetite.spread.shareholder.grid.entity.indicatorName') },
{
width: 100,
name: 'indicatorUnit',
label: $t('erm.appetite.spread.shareholder.grid.entity.indicatorUnit'),
format: Formater.dictionary(DICTIONARY_MAP.INDICATOR_UNIT),
},
{ width: '100%', name: 'condition', label: $t('erm.appetite.spread.shareholder.grid.entity.condition') },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'spread', label: $t('erm.appetite.spread.shareholder.grid.entity.spreadId'), type: 'text', defaultValue: relationId, hidden: true },
{
name: 'stakeHolder',
label: $t('erm.appetite.spread.shareholder.grid.entity.stakeHolder'),
type: 'select',
readOnlyIf: () => {
return true;
},
defaultValue: 'SHAREHOLDER',
options: Options.enum(StakeHolderEnums),
},
{ name: 'indicator', label: $t('erm.appetite.spread.shareholder.grid.entity.indicator'), type: 'select', options: indicatorListRef },
{ name: 'condition', label: $t('erm.appetite.spread.shareholder.grid.entity.condition'), type: 'text' },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, Options, Formater, EnumTools, DictionaryTools } from 'platform-core';
const props = defineProps({
relationId: { type: String, default: '' },
});
const indicatorListRef = ref([]);
const DICTIONARY_MAP = await DictionaryTools.fetch(['INDICATOR_CATEGORY', 'INDICATOR_UNIT']);
const StakeHolderEnums = await EnumTools.fetch('erm.api.enums.StakeHolder');
await axios.get(Environment.apiContextPath('/api/erm/kpi/indicator?pageable=false')).then((response) => {
const items = response?.data?.content;
indicatorListRef.value.splice(0, indicatorListRef.value.length);
if (items && items.length > 0) {
for (const item of items) {
indicatorListRef.value.push({ value: item.id, label: item.code + ' : ' + item.name });
}
}
});
</script>

81
erm.frontend/src/views/appetite/spread/SreadCoreIndicator.vue

@ -0,0 +1,81 @@
<template>
<w-grid
title=""
:height="500"
:hide-bottom="true"
:config-button="false"
selection="multiple"
:checkbox-selection="true"
:sticky-num="0"
:data-url="Environment.apiContextPath('/api/erm/appetite/spreadCoreIndicator')"
:fetch-data-url="Environment.apiContextPath('/api/erm/appetite/spreadCoreIndicator/findBySpreadId?spreadId=' + relationId)"
:query-form-cols-num="4"
:query-form-fields="[]"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'calculate',
label: $t('calculate'),
icon: 'bi-file-spreadsheet',
click: () => {},
},
]"
:columns="[
{ width: 150, name: 'indicatorCode', label: $t('erm.appetite.spread.coreIndicator.grid.entity.indicatorCode') },
{ width: '100%', name: 'indicatorName', label: $t('erm.appetite.spread.coreIndicator.grid.entity.indicatorName') },
{
width: 100,
name: 'indicatorUnit',
label: $t('erm.appetite.spread.coreIndicator.grid.entity.indicatorUnit'),
format: Formater.dictionary(DICTIONARY_MAP.INDICATOR_UNIT),
},
{ width: 150, name: 'supervisionMinValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.supervisionMinValue') },
{ width: 150, name: 'expectValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.expectValue') },
{ width: 150, name: 'referenceValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.referenceValue') },
{ width: 150, name: 'lastYearValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.lastYearValue') },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'spread', label: $t('erm.appetite.spread.coreIndicator.grid.entity.spreadId'), type: 'text', defaultValue: relationId, hidden: true },
{ name: 'indicator', label: $t('erm.appetite.spread.coreIndicator.grid.entity.indicator'), type: 'select', options: indicatorListRef },
{ name: 'supervisionMinValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.supervisionMinValue'), type: 'number' },
{ name: 'expectValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.expectValue'), type: 'number' },
{ name: 'referenceValue', label: $t('erm.appetite.spread.coreIndicator.grid.entity.referenceValue'), type: 'number' },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, Options, Formater, EnumTools, DictionaryTools } from 'platform-core';
const props = defineProps({
relationId: { type: String, default: '' },
});
const indicatorListRef = ref([]);
const DICTIONARY_MAP = await DictionaryTools.fetch(['INDICATOR_CATEGORY', 'INDICATOR_UNIT']);
await axios.get(Environment.apiContextPath('/api/erm/kpi/indicator?pageable=false')).then((response) => {
const items = response?.data?.content;
indicatorListRef.value.splice(0, indicatorListRef.value.length);
if (items && items.length > 0) {
for (const item of items) {
indicatorListRef.value.push({ value: item.id, label: item.code + ' : ' + item.name });
}
}
});
</script>

88
erm.frontend/src/views/appetite/spread/SreadSupervision.vue

@ -0,0 +1,88 @@
<template>
<w-grid
title=""
:height="500"
:hide-bottom="true"
:config-button="false"
selection="multiple"
:checkbox-selection="true"
:sticky-num="0"
:data-url="Environment.apiContextPath('/api/erm/appetite/spreadSupervision')"
:fetch-data-url="Environment.apiContextPath('/api/erm/appetite/spreadSupervision/findBySpreadId?spreadId=' + relationId)"
:query-form-cols-num="4"
:query-form-fields="[]"
:pageable="false"
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="[
'add',
'clone',
'edit',
'remove',
'separator',
{
name: 'calculate',
label: $t('calculate'),
icon: 'bi-file-spreadsheet',
click: () => {},
},
]"
:columns="[
{ width: 100, name: 'stakeHolder', label: $t('erm.appetite.spread.supervision.grid.entity.stakeHolder'), format: Formater.enum(StakeHolderEnums) },
{ width: 150, name: 'indicatorCode', label: $t('erm.appetite.spread.supervision.grid.entity.indicatorCode') },
{ width: 400, name: 'indicatorName', label: $t('erm.appetite.spread.supervision.grid.entity.indicatorName') },
{
width: 100,
name: 'indicatorUnit',
label: $t('erm.appetite.spread.supervision.grid.entity.indicatorUnit'),
format: Formater.dictionary(DICTIONARY_MAP.INDICATOR_UNIT),
},
{ width: '100%', name: 'condition', label: $t('erm.appetite.spread.supervision.grid.entity.condition') },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
fields: [
{ name: 'spread', label: $t('erm.appetite.spread.supervision.grid.entity.spreadId'), type: 'text', defaultValue: relationId, hidden: true },
{
name: 'stakeHolder',
label: $t('erm.appetite.spread.supervision.grid.entity.stakeHolder'),
type: 'select',
readOnlyIf: () => {
return true;
},
defaultValue: 'SHAREHOLDER',
options: Options.enum(StakeHolderEnums),
},
{ name: 'indicator', label: $t('erm.appetite.spread.supervision.grid.entity.indicator'), type: 'select', options: indicatorListRef },
{ name: 'condition', label: $t('erm.appetite.spread.supervision.grid.entity.condition'), type: 'text' },
],
},
}"
></w-grid>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { axios, Environment, Options, Formater, EnumTools, DictionaryTools } from 'platform-core';
const props = defineProps({
relationId: { type: String, default: '' },
});
const indicatorListRef = ref([]);
const DICTIONARY_MAP = await DictionaryTools.fetch(['INDICATOR_CATEGORY', 'INDICATOR_UNIT']);
const StakeHolderEnums = await EnumTools.fetch('erm.api.enums.StakeHolder');
await axios.get(Environment.apiContextPath('/api/erm/kpi/indicator?pageable=false')).then((response) => {
const items = response?.data?.content;
indicatorListRef.value.splice(0, indicatorListRef.value.length);
if (items && items.length > 0) {
for (const item of items) {
indicatorListRef.value.push({ value: item.id, label: item.code + ' : ' + item.name });
}
}
});
</script>

1
erm/build.gradle

@ -1,6 +1,7 @@
dependencies {
api(
project(":erm.api"),
project(":io.sc.standard"),
project(":io.sc.platform.data"),
project(":io.sc.platform.system"),
)

15
erm/src/main/java/erm/appetite/controller/CrossValidateWebController.java

@ -0,0 +1,15 @@
package erm.appetite.controller;
import erm.appetite.api.CrossValidateVo;
import erm.appetite.jpa.entity.CrossValidateEntity;
import erm.appetite.jpa.repository.CrossValidateRepository;
import erm.appetite.service.CrossValidateService;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/erm/appetite/crossValidate")
public class CrossValidateWebController extends RestCrudController<CrossValidateVo, CrossValidateEntity,String, CrossValidateRepository, CrossValidateService> {
}

22
erm/src/main/java/erm/appetite/controller/SpreadBusinessObjectWebController.java

@ -0,0 +1,22 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadBusinessObjectVo;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import erm.appetite.jpa.repository.SpreadBusinessObjectRepository;
import erm.appetite.service.SpreadBusinessObjectService;
import io.sc.platform.mvc.controller.support.RestCrudController;
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.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/appetite/spreadBusinessObject")
public class SpreadBusinessObjectWebController extends RestCrudController<SpreadBusinessObjectVo, SpreadBusinessObjectEntity,String, SpreadBusinessObjectRepository, SpreadBusinessObjectService> {
@GetMapping("findBySpreadId")
public List<SpreadBusinessObjectVo> findBySpreadId(@RequestParam("spreadId")String spreadId) throws Exception{
return service.findBySpreadId(spreadId);
}
}

22
erm/src/main/java/erm/appetite/controller/SpreadCoreIndicatorWebController.java

@ -0,0 +1,22 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadCoreIndicatorVo;
import erm.appetite.jpa.entity.SpreadCoreIndicatorEntity;
import erm.appetite.jpa.repository.SpreadCoreIndicatorRepository;
import erm.appetite.service.SpreadCoreIndicatorService;
import io.sc.platform.mvc.controller.support.RestCrudController;
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.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/appetite/spreadCoreIndicator")
public class SpreadCoreIndicatorWebController extends RestCrudController<SpreadCoreIndicatorVo, SpreadCoreIndicatorEntity,String, SpreadCoreIndicatorRepository, SpreadCoreIndicatorService> {
@GetMapping("findBySpreadId")
public List<SpreadCoreIndicatorVo> findBySpreadId(@RequestParam("spreadId")String spreadId) throws Exception{
return service.findBySpreadId(spreadId);
}
}

26
erm/src/main/java/erm/appetite/controller/SpreadIndustryWebController.java

@ -0,0 +1,26 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadBusinessObjectVo;
import erm.appetite.api.SpreadIndustryVo;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import erm.appetite.jpa.entity.SpreadIndustryEntity;
import erm.appetite.jpa.repository.SpreadBusinessObjectRepository;
import erm.appetite.jpa.repository.SpreadIndustryRepository;
import erm.appetite.service.SpreadBusinessObjectService;
import erm.appetite.service.SpreadIndustryService;
import io.sc.platform.mvc.controller.support.RestCrudController;
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.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/appetite/spreadIndustry")
public class SpreadIndustryWebController extends RestCrudController<SpreadIndustryVo, SpreadIndustryEntity,String, SpreadIndustryRepository, SpreadIndustryService> {
@GetMapping("findBySpreadId")
public List<SpreadIndustryVo> findBySpreadId(@RequestParam("spreadId")String spreadId) throws Exception{
return service.findBySpreadId(spreadId);
}
}

22
erm/src/main/java/erm/appetite/controller/SpreadShareholderWebController.java

@ -0,0 +1,22 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadShareholderVo;
import erm.appetite.jpa.entity.SpreadShareholderEntity;
import erm.appetite.jpa.repository.SpreadShareholderRepository;
import erm.appetite.service.SpreadShareholderService;
import io.sc.platform.mvc.controller.support.RestCrudController;
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.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/appetite/spreadShareholder")
public class SpreadShareholderWebController extends RestCrudController<SpreadShareholderVo, SpreadShareholderEntity,String, SpreadShareholderRepository, SpreadShareholderService> {
@GetMapping("findBySpreadId")
public List<SpreadShareholderVo> findBySpreadId(@RequestParam("spreadId")String spreadId) throws Exception{
return service.findBySpreadId(spreadId);
}
}

22
erm/src/main/java/erm/appetite/controller/SpreadSupervisionWebController.java

@ -0,0 +1,22 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadSupervisionVo;
import erm.appetite.jpa.entity.SpreadSupervisionEntity;
import erm.appetite.jpa.repository.SpreadSupervisionRepository;
import erm.appetite.service.SpreadSupervisionService;
import io.sc.platform.mvc.controller.support.RestCrudController;
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.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/appetite/spreadSupervision")
public class SpreadSupervisionWebController extends RestCrudController<SpreadSupervisionVo, SpreadSupervisionEntity,String, SpreadSupervisionRepository, SpreadSupervisionService> {
@GetMapping("findBySpreadId")
public List<SpreadSupervisionVo> findBySpreadId(@RequestParam("spreadId")String spreadId) throws Exception{
return service.findBySpreadId(spreadId);
}
}

15
erm/src/main/java/erm/appetite/controller/SpreadWebController.java

@ -0,0 +1,15 @@
package erm.appetite.controller;
import erm.appetite.api.SpreadVo;
import erm.appetite.jpa.entity.SpreadEntity;
import erm.appetite.jpa.repository.SpreadRepository;
import erm.appetite.service.SpreadService;
import io.sc.platform.mvc.controller.support.RestCrudController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/erm/appetite/spread")
public class SpreadWebController extends RestCrudController<SpreadVo, SpreadEntity,String, SpreadRepository, SpreadService> {
}

97
erm/src/main/java/erm/appetite/jpa/entity/CrossValidateEntity.java

@ -0,0 +1,97 @@
package erm.appetite.jpa.entity;
import erm.appetite.api.CrossValidateVo;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_CROSS_VALIDATE")
public class CrossValidateEntity extends CorporationAuditorEntity<CrossValidateVo> {
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
//代码
@Column(name="CODE_",nullable=false,length=255)
@Size(max=255)
private String code;
//名称
@Column(name="NAME_",nullable=false, length=255)
@Size(min=1,max=255)
private String name;
//描述
@Column(name="DESCRIPTION_",length=255)
@Size(max=255)
private String description;
//年份
@Column(name="YEAR_",length = 4)
@Size(max=4)
private String year;
@Override
public CrossValidateVo toVo() {
CrossValidateVo vo =new CrossValidateVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setCode(this.getCode());
vo.setName(this.getName());
vo.setDescription(this.getDescription());
vo.setYear(this.getYear());
return vo;
}
public CrossValidateEntity(){}
public CrossValidateEntity(String id){
this.id =id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
}

156
erm/src/main/java/erm/appetite/jpa/entity/SpreadBusinessObjectEntity.java

@ -0,0 +1,156 @@
package erm.appetite.jpa.entity;
import erm.api.enums.RiskPolicy;
import erm.appetite.api.SpreadBusinessObjectVo;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD_BO")
public class SpreadBusinessObjectEntity extends CorporationAuditorEntity<SpreadBusinessObjectVo>{
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
//业务条线
@Column(name="BUSINESS_",length=20)
@Size(max=20)
private String business;
//风险基调
@Column(name="POLICY_", length=20)
@Enumerated(EnumType.STRING)
private RiskPolicy policy;
//对应区间
@Column(name="RANGE_", length=20)
private String range;
//上年贷款余额
@Column(name="LAST_YEAR_LOAN_BALANCE_")
private Double lastYearLoanBalance;
//上年不良贷款率
@Column(name="LAST_YEAR_NPL_")
private Double lastYearNpl;
//预计增长率
@Column(name="GROWTH_PERCENT_")
private Double growthPercent;
//预计本年贷款余额
@Column(name="PREDICT_LOAN_BALANCE_")
private Double predictLoanBalance;
//预计本年不良贷款率
@Column(name="PREDICT_NPL_")
private Double predictNpl;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SPREAD_ID_")
private SpreadEntity spread;
@Override
public SpreadBusinessObjectVo toVo() {
SpreadBusinessObjectVo vo =new SpreadBusinessObjectVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setBusiness(this.getBusiness());
vo.setPolicy(this.getPolicy());
vo.setRange(this.getRange());
vo.setLastYearLoanBalance(this.getLastYearLoanBalance());
vo.setLastYearNpl(this.getLastYearNpl());
vo.setGrowthPercent(this.getGrowthPercent());
vo.setPredictLoanBalance(this.getPredictLoanBalance());
vo.setPredictNpl(this.getPredictNpl());
vo.setSpread(this.getSpread()==null?null:this.getSpread().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getBusiness() {
return business;
}
public void setBusiness(String business) {
this.business = business;
}
public RiskPolicy getPolicy() {
return policy;
}
public void setPolicy(RiskPolicy policy) {
this.policy = policy;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public Double getLastYearLoanBalance() {
return lastYearLoanBalance;
}
public void setLastYearLoanBalance(Double lastYearLoanBalance) {
this.lastYearLoanBalance = lastYearLoanBalance;
}
public Double getLastYearNpl() {
return lastYearNpl;
}
public void setLastYearNpl(Double lastYearNpl) {
this.lastYearNpl = lastYearNpl;
}
public Double getGrowthPercent() {
return growthPercent;
}
public void setGrowthPercent(Double growthPercent) {
this.growthPercent = growthPercent;
}
public Double getPredictLoanBalance() {
return predictLoanBalance;
}
public void setPredictLoanBalance(Double predictLoanBalance) {
this.predictLoanBalance = predictLoanBalance;
}
public Double getPredictNpl() {
return predictNpl;
}
public void setPredictNpl(Double predictNpl) {
this.predictNpl = predictNpl;
}
public SpreadEntity getSpread() {
return spread;
}
public void setSpread(SpreadEntity spread) {
this.spread = spread;
}
}

120
erm/src/main/java/erm/appetite/jpa/entity/SpreadCoreIndicatorEntity.java

@ -0,0 +1,120 @@
package erm.appetite.jpa.entity;
import erm.api.enums.StakeHolder;
import erm.appetite.api.SpreadCoreIndicatorVo;
import erm.kpi.jpa.entity.IndicatorEntity;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD_CI")
public class SpreadCoreIndicatorEntity extends CorporationAuditorEntity<SpreadCoreIndicatorVo>{
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
// 指标
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="INDICATOR_ID_")
private IndicatorEntity indicator;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SPREAD_ID_")
private SpreadEntity spread;
//容忍下限(监管要求)
@Column(name="SUPERVISION_MIN_VALUE_")
private Double supervisionMinValue;
//目标值(股东期望)
@Column(name="EXPECT_VALUE_")
private Double expectValue;
//参考值(定量传导)
@Column(name="REFERENCE_VALUE_")
private Double referenceValue;
//上年度指标值
@Column(name="LAST_YEAR_VALUE")
private Double lastYearValue;
@Override
public SpreadCoreIndicatorVo toVo() {
SpreadCoreIndicatorVo vo =new SpreadCoreIndicatorVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setIndicator(this.getIndicator()==null?null:this.getIndicator().getId());
vo.setIndicatorCode(this.getIndicator()==null?null:this.getIndicator().getCode());
vo.setIndicatorName(this.getIndicator()==null?null:this.getIndicator().getName());
vo.setIndicatorUnit(this.getIndicator()==null?null:this.getIndicator().getUnit());
vo.setSupervisionMinValue(this.getSupervisionMinValue());
vo.setExpectValue(this.getExpectValue());
vo.setReferenceValue(this.getReferenceValue());
vo.setLastYearValue(this.getLastYearValue());
vo.setSpread(this.getSpread()==null?null:this.getSpread().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public IndicatorEntity getIndicator() {
return indicator;
}
public void setIndicator(IndicatorEntity indicator) {
this.indicator = indicator;
}
public Double getSupervisionMinValue() {
return supervisionMinValue;
}
public void setSupervisionMinValue(Double supervisionMinValue) {
this.supervisionMinValue = supervisionMinValue;
}
public Double getExpectValue() {
return expectValue;
}
public void setExpectValue(Double expectValue) {
this.expectValue = expectValue;
}
public Double getReferenceValue() {
return referenceValue;
}
public void setReferenceValue(Double referenceValue) {
this.referenceValue = referenceValue;
}
public Double getLastYearValue() {
return lastYearValue;
}
public void setLastYearValue(Double lastYearValue) {
this.lastYearValue = lastYearValue;
}
public SpreadEntity getSpread() {
return spread;
}
public void setSpread(SpreadEntity spread) {
this.spread = spread;
}
}

113
erm/src/main/java/erm/appetite/jpa/entity/SpreadEntity.java

@ -0,0 +1,113 @@
package erm.appetite.jpa.entity;
import erm.appetite.api.SpreadVo;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD")
public class SpreadEntity extends CorporationAuditorEntity<SpreadVo> {
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
//代码
@Column(name="CODE_",nullable=false,length=255)
@Size(max=255)
private String code;
//名称
@Column(name="NAME_",nullable=false, length=255)
@Size(min=1,max=255)
private String name;
//描述
@Column(name="DESCRIPTION_",length=255)
@Size(max=255)
private String description;
//年份
@Column(name="YEAR_",length = 4)
@Size(max=4)
private String year;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="CROSS_VALIDATE_ID_")
private CrossValidateEntity crossValidate;
public SpreadEntity(){}
public SpreadEntity(String id){
this.id =id;
}
@Override
public SpreadVo toVo() {
SpreadVo vo =new SpreadVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setCode(this.getCode());
vo.setName(this.getName());
vo.setDescription(this.getDescription());
vo.setYear(this.getYear());
vo.setCrossValidate(this.getCrossValidate()==null?"":this.getCrossValidate().getId());
vo.setCrossValidateCode(this.getCrossValidate()==null?"":this.getCrossValidate().getCode());
vo.setCrossValidateName(this.getCrossValidate()==null?"":this.getCrossValidate().getName());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public CrossValidateEntity getCrossValidate() {
return crossValidate;
}
public void setCrossValidate(CrossValidateEntity crossValidate) {
this.crossValidate = crossValidate;
}
}

156
erm/src/main/java/erm/appetite/jpa/entity/SpreadIndustryEntity.java

@ -0,0 +1,156 @@
package erm.appetite.jpa.entity;
import erm.api.enums.RiskPolicy;
import erm.appetite.api.SpreadIndustryVo;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD_INDUSTRY")
public class SpreadIndustryEntity extends CorporationAuditorEntity<SpreadIndustryVo>{
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
//行业
@Column(name="INDUSTRY_",length=20)
@Size(max=20)
private String industry;
//风险基调
@Column(name="POLICY_", length=20)
@Enumerated(EnumType.STRING)
private RiskPolicy policy;
//对应区间
@Column(name="RANGE_", length=20)
private String range;
//上年贷款余额
@Column(name="LAST_YEAR_LOAN_BALANCE_")
private Double lastYearLoanBalance;
//上年不良贷款率
@Column(name="LAST_YEAR_NPL_")
private Double lastYearNpl;
//预计增长率
@Column(name="GROWTH_PERCENT_")
private Double growthPercent;
//预计本年贷款余额
@Column(name="PREDICT_LOAN_BALANCE_")
private Double predictLoanBalance;
//预计本年不良贷款率
@Column(name="PREDICT_NPL_")
private Double predictNpl;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SPREAD_ID_")
private SpreadEntity spread;
@Override
public SpreadIndustryVo toVo() {
SpreadIndustryVo vo =new SpreadIndustryVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setIndustry(this.getIndustry());
vo.setPolicy(this.getPolicy());
vo.setRange(this.getRange());
vo.setLastYearLoanBalance(this.getLastYearLoanBalance());
vo.setLastYearNpl(this.getLastYearNpl());
vo.setGrowthPercent(this.getGrowthPercent());
vo.setPredictLoanBalance(this.getPredictLoanBalance());
vo.setPredictNpl(this.getPredictNpl());
vo.setSpread(this.getSpread()==null?null:this.getSpread().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIndustry() {
return industry;
}
public void setIndustry(String industry) {
this.industry = industry;
}
public RiskPolicy getPolicy() {
return policy;
}
public void setPolicy(RiskPolicy policy) {
this.policy = policy;
}
public String getRange() {
return range;
}
public void setRange(String range) {
this.range = range;
}
public Double getLastYearLoanBalance() {
return lastYearLoanBalance;
}
public void setLastYearLoanBalance(Double lastYearLoanBalance) {
this.lastYearLoanBalance = lastYearLoanBalance;
}
public Double getLastYearNpl() {
return lastYearNpl;
}
public void setLastYearNpl(Double lastYearNpl) {
this.lastYearNpl = lastYearNpl;
}
public Double getGrowthPercent() {
return growthPercent;
}
public void setGrowthPercent(Double growthPercent) {
this.growthPercent = growthPercent;
}
public Double getPredictLoanBalance() {
return predictLoanBalance;
}
public void setPredictLoanBalance(Double predictLoanBalance) {
this.predictLoanBalance = predictLoanBalance;
}
public Double getPredictNpl() {
return predictNpl;
}
public void setPredictNpl(Double predictNpl) {
this.predictNpl = predictNpl;
}
public SpreadEntity getSpread() {
return spread;
}
public void setSpread(SpreadEntity spread) {
this.spread = spread;
}
}

97
erm/src/main/java/erm/appetite/jpa/entity/SpreadShareholderEntity.java

@ -0,0 +1,97 @@
package erm.appetite.jpa.entity;
import erm.api.enums.RiskPolicy;
import erm.api.enums.StakeHolder;
import erm.appetite.api.SpreadShareholderVo;
import erm.kpi.jpa.entity.IndicatorEntity;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD_SH")
public class SpreadShareholderEntity extends CorporationAuditorEntity<SpreadShareholderVo>{
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
// 利益相关方
@Column(name="STAKE_HOLDER_", length=20)
@Enumerated(EnumType.STRING)
private StakeHolder stakeHolder;
// 指标
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="INDICATOR_ID_")
private IndicatorEntity indicator;
//条件
@Column(name="CONDITION_",length=255)
@Size(max=255)
private String condition;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SPREAD_ID_")
private SpreadEntity spread;
@Override
public SpreadShareholderVo toVo() {
SpreadShareholderVo vo =new SpreadShareholderVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setStakeHolder(this.getStakeHolder());
vo.setIndicator(this.getIndicator()==null?null:this.getIndicator().getId());
vo.setIndicatorCode(this.getIndicator()==null?null:this.getIndicator().getCode());
vo.setIndicatorName(this.getIndicator()==null?null:this.getIndicator().getName());
vo.setIndicatorUnit(this.getIndicator()==null?null:this.getIndicator().getUnit());
vo.setCondition(this.getCondition());
vo.setSpread(this.getSpread()==null?null:this.getSpread().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public StakeHolder getStakeHolder() {
return stakeHolder;
}
public void setStakeHolder(StakeHolder stakeHolder) {
this.stakeHolder = stakeHolder;
}
public IndicatorEntity getIndicator() {
return indicator;
}
public void setIndicator(IndicatorEntity indicator) {
this.indicator = indicator;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public SpreadEntity getSpread() {
return spread;
}
public void setSpread(SpreadEntity spread) {
this.spread = spread;
}
}

96
erm/src/main/java/erm/appetite/jpa/entity/SpreadSupervisionEntity.java

@ -0,0 +1,96 @@
package erm.appetite.jpa.entity;
import erm.api.enums.StakeHolder;
import erm.appetite.api.SpreadSupervisionVo;
import erm.kpi.jpa.entity.IndicatorEntity;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import javax.validation.constraints.Size;
@Entity
@Table(name="RP_APT_SPREAD_SV")
public class SpreadSupervisionEntity extends CorporationAuditorEntity<SpreadSupervisionVo>{
//ID,主键
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@Column(name="ID_", length=36)
@Size(max=36)
private String id;
// 利益相关方
@Column(name="STAKE_HOLDER_", length=20)
@Enumerated(EnumType.STRING)
private StakeHolder stakeHolder;
// 指标
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="INDICATOR_ID_")
private IndicatorEntity indicator;
//条件
@Column(name="CONDITION_",length=255)
@Size(max=255)
private String condition;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="SPREAD_ID_")
private SpreadEntity spread;
@Override
public SpreadSupervisionVo toVo() {
SpreadSupervisionVo vo =new SpreadSupervisionVo();
super.toVo(vo);
vo.setId(this.getId());
vo.setStakeHolder(this.getStakeHolder());
vo.setIndicator(this.getIndicator()==null?null:this.getIndicator().getId());
vo.setIndicatorCode(this.getIndicator()==null?null:this.getIndicator().getCode());
vo.setIndicatorName(this.getIndicator()==null?null:this.getIndicator().getName());
vo.setIndicatorUnit(this.getIndicator()==null?null:this.getIndicator().getUnit());
vo.setCondition(this.getCondition());
vo.setSpread(this.getSpread()==null?null:this.getSpread().getId());
return vo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public StakeHolder getStakeHolder() {
return stakeHolder;
}
public void setStakeHolder(StakeHolder stakeHolder) {
this.stakeHolder = stakeHolder;
}
public IndicatorEntity getIndicator() {
return indicator;
}
public void setIndicator(IndicatorEntity indicator) {
this.indicator = indicator;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public SpreadEntity getSpread() {
return spread;
}
public void setSpread(SpreadEntity spread) {
this.spread = spread;
}
}

8
erm/src/main/java/erm/appetite/jpa/repository/CrossValidateRepository.java

@ -0,0 +1,8 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.CrossValidateEntity;
import io.sc.platform.orm.repository.DaoRepository;
public interface CrossValidateRepository extends DaoRepository<CrossValidateEntity,String> {
public CrossValidateEntity findByCode(String code);
}

13
erm/src/main/java/erm/appetite/jpa/repository/SpreadBusinessObjectRepository.java

@ -0,0 +1,13 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadBusinessObjectRepository extends DaoRepository<SpreadBusinessObjectEntity,String> {
@Query("select e from SpreadBusinessObjectEntity e where e.spread.id=:spreadId")
public List<SpreadBusinessObjectEntity> findBySpreadId(@Param("spreadId") String spreadId);
}

13
erm/src/main/java/erm/appetite/jpa/repository/SpreadCoreIndicatorRepository.java

@ -0,0 +1,13 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadCoreIndicatorEntity;
import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadCoreIndicatorRepository extends DaoRepository<SpreadCoreIndicatorEntity,String> {
@Query("select e from SpreadCoreIndicatorEntity e where e.spread.id=:spreadId")
public List<SpreadCoreIndicatorEntity> findBySpreadId(@Param("spreadId") String spreadId);
}

13
erm/src/main/java/erm/appetite/jpa/repository/SpreadIndustryRepository.java

@ -0,0 +1,13 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadIndustryEntity;
import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadIndustryRepository extends DaoRepository<SpreadIndustryEntity,String> {
@Query("select e from SpreadIndustryEntity e where e.spread.id=:spreadId")
public List<SpreadIndustryEntity> findBySpreadId(@Param("spreadId") String spreadId);
}

8
erm/src/main/java/erm/appetite/jpa/repository/SpreadRepository.java

@ -0,0 +1,8 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadEntity;
import io.sc.platform.orm.repository.DaoRepository;
public interface SpreadRepository extends DaoRepository<SpreadEntity,String> {
public SpreadEntity findByCode(String code);
}

13
erm/src/main/java/erm/appetite/jpa/repository/SpreadShareholderRepository.java

@ -0,0 +1,13 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadShareholderEntity;
import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadShareholderRepository extends DaoRepository<SpreadShareholderEntity,String> {
@Query("select e from SpreadShareholderEntity e where e.spread.id=:spreadId")
public List<SpreadShareholderEntity> findBySpreadId(@Param("spreadId") String spreadId);
}

13
erm/src/main/java/erm/appetite/jpa/repository/SpreadSupervisionRepository.java

@ -0,0 +1,13 @@
package erm.appetite.jpa.repository;
import erm.appetite.jpa.entity.SpreadSupervisionEntity;
import io.sc.platform.orm.repository.DaoRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadSupervisionRepository extends DaoRepository<SpreadSupervisionEntity,String> {
@Query("select e from SpreadSupervisionEntity e where e.spread.id=:spreadId")
public List<SpreadSupervisionEntity> findBySpreadId(@Param("spreadId") String spreadId);
}

8
erm/src/main/java/erm/appetite/service/CrossValidateService.java

@ -0,0 +1,8 @@
package erm.appetite.service;
import erm.appetite.jpa.entity.CrossValidateEntity;
import erm.appetite.jpa.repository.CrossValidateRepository;
import io.sc.platform.orm.service.DaoService;
public interface CrossValidateService extends DaoService<CrossValidateEntity, String, CrossValidateRepository> {
}

13
erm/src/main/java/erm/appetite/service/SpreadBusinessObjectService.java

@ -0,0 +1,13 @@
package erm.appetite.service;
import erm.appetite.api.SpreadBusinessObjectVo;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import erm.appetite.jpa.repository.SpreadBusinessObjectRepository;
import io.sc.platform.orm.service.DaoService;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface SpreadBusinessObjectService extends DaoService<SpreadBusinessObjectEntity, String, SpreadBusinessObjectRepository> {
public List<SpreadBusinessObjectVo> findBySpreadId(String spreadId) throws Exception;
}

12
erm/src/main/java/erm/appetite/service/SpreadCoreIndicatorService.java

@ -0,0 +1,12 @@
package erm.appetite.service;
import erm.appetite.api.SpreadCoreIndicatorVo;
import erm.appetite.jpa.entity.SpreadCoreIndicatorEntity;
import erm.appetite.jpa.repository.SpreadCoreIndicatorRepository;
import io.sc.platform.orm.service.DaoService;
import java.util.List;
public interface SpreadCoreIndicatorService extends DaoService<SpreadCoreIndicatorEntity, String, SpreadCoreIndicatorRepository> {
public List<SpreadCoreIndicatorVo> findBySpreadId(String spreadId) throws Exception;
}

12
erm/src/main/java/erm/appetite/service/SpreadIndustryService.java

@ -0,0 +1,12 @@
package erm.appetite.service;
import erm.appetite.api.SpreadIndustryVo;
import erm.appetite.jpa.entity.SpreadIndustryEntity;
import erm.appetite.jpa.repository.SpreadIndustryRepository;
import io.sc.platform.orm.service.DaoService;
import java.util.List;
public interface SpreadIndustryService extends DaoService<SpreadIndustryEntity, String, SpreadIndustryRepository> {
public List<SpreadIndustryVo> findBySpreadId(String spreadId) throws Exception;
}

8
erm/src/main/java/erm/appetite/service/SpreadService.java

@ -0,0 +1,8 @@
package erm.appetite.service;
import erm.appetite.jpa.entity.SpreadEntity;
import erm.appetite.jpa.repository.SpreadRepository;
import io.sc.platform.orm.service.DaoService;
public interface SpreadService extends DaoService<SpreadEntity, String, SpreadRepository> {
}

12
erm/src/main/java/erm/appetite/service/SpreadShareholderService.java

@ -0,0 +1,12 @@
package erm.appetite.service;
import erm.appetite.api.SpreadShareholderVo;
import erm.appetite.jpa.entity.SpreadShareholderEntity;
import erm.appetite.jpa.repository.SpreadShareholderRepository;
import io.sc.platform.orm.service.DaoService;
import java.util.List;
public interface SpreadShareholderService extends DaoService<SpreadShareholderEntity, String, SpreadShareholderRepository> {
public List<SpreadShareholderVo> findBySpreadId(String spreadId) throws Exception;
}

12
erm/src/main/java/erm/appetite/service/SpreadSupervisionService.java

@ -0,0 +1,12 @@
package erm.appetite.service;
import erm.appetite.api.SpreadSupervisionVo;
import erm.appetite.jpa.entity.SpreadSupervisionEntity;
import erm.appetite.jpa.repository.SpreadSupervisionRepository;
import io.sc.platform.orm.service.DaoService;
import java.util.List;
public interface SpreadSupervisionService extends DaoService<SpreadSupervisionEntity, String, SpreadSupervisionRepository> {
public List<SpreadSupervisionVo> findBySpreadId(String spreadId) throws Exception;
}

12
erm/src/main/java/erm/appetite/service/impl/CrossValidateServiceImpl.java

@ -0,0 +1,12 @@
package erm.appetite.service.impl;
import erm.appetite.jpa.entity.CrossValidateEntity;
import erm.appetite.jpa.repository.CrossValidateRepository;
import erm.appetite.service.CrossValidateService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class CrossValidateServiceImpl extends DaoServiceImpl<CrossValidateEntity, String, CrossValidateRepository> implements CrossValidateService {
}

44
erm/src/main/java/erm/appetite/service/impl/SpreadBusinessObjectServiceImpl.java

@ -0,0 +1,44 @@
package erm.appetite.service.impl;
import erm.appetite.api.SpreadBusinessObjectVo;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import erm.appetite.jpa.repository.SpreadBusinessObjectRepository;
import erm.appetite.service.SpreadBusinessObjectService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.service.support.QueryResult;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.List;
@Service
public class SpreadBusinessObjectServiceImpl extends DaoServiceImpl<SpreadBusinessObjectEntity, String, SpreadBusinessObjectRepository> implements SpreadBusinessObjectService {
@Override
public List<SpreadBusinessObjectVo> findBySpreadId(String spreadId) throws Exception {
if(StringUtils.hasText(spreadId)) {
List<SpreadBusinessObjectEntity> entities = repository.findBySpreadId(spreadId);
if(entities!=null && !entities.isEmpty()){
return EntityVoUtil.toVo(entities);
}
}
return Collections.emptyList();
}
@Override
public SpreadBusinessObjectEntity add(SpreadBusinessObjectEntity entity) throws Exception {
if(entity!=null){
entity.setRange(entity.getPolicy().getRange());
}
return super.add(entity);
}
@Override
public SpreadBusinessObjectEntity update(String s, SpreadBusinessObjectEntity entity) throws Exception {
if(entity!=null){
entity.setRange(entity.getPolicy().getRange());
}
return super.update(s, entity);
}
}

27
erm/src/main/java/erm/appetite/service/impl/SpreadCoreIndicatorServiceImpl.java

@ -0,0 +1,27 @@
package erm.appetite.service.impl;
import erm.appetite.api.SpreadCoreIndicatorVo;
import erm.appetite.jpa.entity.SpreadCoreIndicatorEntity;
import erm.appetite.jpa.repository.SpreadCoreIndicatorRepository;
import erm.appetite.service.SpreadCoreIndicatorService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.List;
@Service
public class SpreadCoreIndicatorServiceImpl extends DaoServiceImpl<SpreadCoreIndicatorEntity, String, SpreadCoreIndicatorRepository> implements SpreadCoreIndicatorService {
@Override
public List<SpreadCoreIndicatorVo> findBySpreadId(String spreadId) throws Exception {
if(StringUtils.hasText(spreadId)) {
List<SpreadCoreIndicatorEntity> entities = repository.findBySpreadId(spreadId);
if(entities!=null && !entities.isEmpty()){
return EntityVoUtil.toVo(entities);
}
}
return Collections.emptyList();
}
}

44
erm/src/main/java/erm/appetite/service/impl/SpreadIndustryServiceImpl.java

@ -0,0 +1,44 @@
package erm.appetite.service.impl;
import erm.appetite.api.SpreadIndustryVo;
import erm.appetite.jpa.entity.SpreadBusinessObjectEntity;
import erm.appetite.jpa.entity.SpreadIndustryEntity;
import erm.appetite.jpa.repository.SpreadIndustryRepository;
import erm.appetite.service.SpreadIndustryService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.List;
@Service
public class SpreadIndustryServiceImpl extends DaoServiceImpl<SpreadIndustryEntity, String, SpreadIndustryRepository> implements SpreadIndustryService {
@Override
public List<SpreadIndustryVo> findBySpreadId(String spreadId) throws Exception {
if(StringUtils.hasText(spreadId)) {
List<SpreadIndustryEntity> entities = repository.findBySpreadId(spreadId);
if(entities!=null && !entities.isEmpty()){
return EntityVoUtil.toVo(entities);
}
}
return Collections.emptyList();
}
@Override
public SpreadIndustryEntity add(SpreadIndustryEntity entity) throws Exception {
if(entity!=null){
entity.setRange(entity.getPolicy().getRange());
}
return super.add(entity);
}
@Override
public SpreadIndustryEntity update(String s, SpreadIndustryEntity entity) throws Exception {
if(entity!=null){
entity.setRange(entity.getPolicy().getRange());
}
return super.update(s, entity);
}
}

12
erm/src/main/java/erm/appetite/service/impl/SpreadServiceImpl.java

@ -0,0 +1,12 @@
package erm.appetite.service.impl;
import erm.appetite.jpa.entity.SpreadEntity;
import erm.appetite.jpa.repository.SpreadRepository;
import erm.appetite.service.SpreadService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class SpreadServiceImpl extends DaoServiceImpl<SpreadEntity, String, SpreadRepository> implements SpreadService {
}

27
erm/src/main/java/erm/appetite/service/impl/SpreadShareholderServiceImpl.java

@ -0,0 +1,27 @@
package erm.appetite.service.impl;
import erm.appetite.api.SpreadShareholderVo;
import erm.appetite.jpa.entity.SpreadShareholderEntity;
import erm.appetite.jpa.repository.SpreadShareholderRepository;
import erm.appetite.service.SpreadShareholderService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.List;
@Service
public class SpreadShareholderServiceImpl extends DaoServiceImpl<SpreadShareholderEntity, String, SpreadShareholderRepository> implements SpreadShareholderService {
@Override
public List<SpreadShareholderVo> findBySpreadId(String spreadId) throws Exception {
if(StringUtils.hasText(spreadId)) {
List<SpreadShareholderEntity> entities = repository.findBySpreadId(spreadId);
if(entities!=null && !entities.isEmpty()){
return EntityVoUtil.toVo(entities);
}
}
return Collections.emptyList();
}
}

27
erm/src/main/java/erm/appetite/service/impl/SpreadSupervisionServiceImpl.java

@ -0,0 +1,27 @@
package erm.appetite.service.impl;
import erm.appetite.api.SpreadSupervisionVo;
import erm.appetite.jpa.entity.SpreadSupervisionEntity;
import erm.appetite.jpa.repository.SpreadSupervisionRepository;
import erm.appetite.service.SpreadSupervisionService;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.util.EntityVoUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.List;
@Service
public class SpreadSupervisionServiceImpl extends DaoServiceImpl<SpreadSupervisionEntity, String, SpreadSupervisionRepository> implements SpreadSupervisionService {
@Override
public List<SpreadSupervisionVo> findBySpreadId(String spreadId) throws Exception {
if(StringUtils.hasText(spreadId)) {
List<SpreadSupervisionEntity> entities = repository.findBySpreadId(spreadId);
if(entities!=null && !entities.isEmpty()){
return EntityVoUtil.toVo(entities);
}
}
return Collections.emptyList();
}
}

10
erm/src/main/java/erm/kpi/controller/IndicatorWebController.java

@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/api/erm/kpi/indicator")
public class IndicatorWebController extends RestCrudController<IndicatorVo, IndicatorEntity,String, IndicatorRepository, IndicatorService> {
@ -35,4 +37,12 @@ public class IndicatorWebController extends RestCrudController<IndicatorVo, Indi
}
return QueryResult.emptyPage();
}
@GetMapping("queryByCategory")
public List<IndicatorVo> queryByCategory(@RequestParam(name="category",required=false) String category, QueryParameter parameter) throws Exception{
if(StringUtils.hasText(category)){
return EntityVoUtil.toVo(service.findByCategory(category));
}
return QueryResult.emptyList();
}
}

5
erm/src/main/java/erm/kpi/jpa/entity/IndicatorEntity.java

@ -134,6 +134,11 @@ public class IndicatorEntity extends CorporationAuditorEntity<IndicatorVo> {
return vo;
}
public IndicatorEntity(){}
public IndicatorEntity(String id){
this.id =id;
}
public String getId() {
return id;
}

3
erm/src/main/java/erm/kpi/jpa/repository/IndicatorRepository.java

@ -3,6 +3,9 @@ package erm.kpi.jpa.repository;
import erm.kpi.jpa.entity.IndicatorEntity;
import io.sc.platform.orm.repository.DaoRepository;
import java.util.List;
public interface IndicatorRepository extends DaoRepository<IndicatorEntity,String> {
public IndicatorEntity findByCode(String code);
public List<IndicatorEntity> findByCategoryOrderByName(String category);
}

3
erm/src/main/java/erm/kpi/service/IndicatorService.java

@ -6,7 +6,10 @@ import io.sc.platform.orm.service.DaoService;
import io.sc.platform.orm.service.support.QueryParameter;
import org.springframework.data.domain.Page;
import java.util.List;
public interface IndicatorService extends DaoService<IndicatorEntity, String, IndicatorRepository> {
public List<IndicatorEntity> findByCategory(String category);
public Page<IndicatorEntity> queryIndicatorsByLib(String libId, QueryParameter queryParameter) throws Exception;
public Page<IndicatorEntity> queryOtherIndicatorsByLib(String libId,QueryParameter queryParameter) throws Exception;
}

10
erm/src/main/java/erm/kpi/service/impl/IndicatorServiceImpl.java

@ -14,6 +14,8 @@ import org.springframework.util.StringUtils;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Subquery;
import java.util.Collections;
import java.util.List;
@Service
public class IndicatorServiceImpl extends DaoServiceImpl<IndicatorEntity, String, IndicatorRepository> implements IndicatorService {
@ -22,6 +24,14 @@ public class IndicatorServiceImpl extends DaoServiceImpl<IndicatorEntity, String
return repository.findByCode(entity.getCode());
}
@Override
public List<IndicatorEntity> findByCategory(String category) {
if(StringUtils.hasText(category)) {
return repository.findByCategoryOrderByName(category);
}
return Collections.emptyList();
}
@Override
public Page<IndicatorEntity> queryIndicatorsByLib(String libId, QueryParameter queryParameter) throws Exception {
if(StringUtils.hasText(libId)) {

5
erm/src/main/resources/META-INF/platform/plugins/components.json

@ -10,7 +10,10 @@
{
"includes":[
"erm.kpi.controller",
"erm.kpi.service.impl"
"erm.kpi.service.impl",
"erm.appetite.controller",
"erm.appetite.service.impl"
],
"excludes":[]
}

7
erm/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -14,10 +14,13 @@
{
"category" : "install",
"order" : 20000,
"description":"ICAAP表结构及其数据",
"description":"全面风险",
"locations":[
"liquibase/kpi/erm.kpi_1.0.0_20221020__ERM KPI Database Schema DDL.xml",
"liquibase/kpi/erm.kpi_1.0.0_20221020__ERM KPI Database Data.xml"
"liquibase/kpi/erm.kpi_1.0.0_20221020__ERM KPI Database Data.xml",
"liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Schema DDL.xml",
"liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Data.xml"
]
}
]

5
erm/src/main/resources/META-INF/platform/plugins/repositories.json

@ -10,7 +10,10 @@
{
"includes":[
"erm.kpi.jpa.entity",
"erm.kpi.jpa.repository"
"erm.kpi.jpa.repository",
"erm.appetite.jpa.entity",
"erm.appetite.jpa.repository"
],
"excludes":[]
}

0
erm/src/main/resources/erm/appetite/i18n/dictionary.properties

0
erm/src/main/resources/erm/appetite/i18n/dictionary_tw_CN.properties

0
erm/src/main/resources/erm/appetite/i18n/dictionary_zh_CN.properties

16
erm/src/main/resources/liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Data.xml

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
"
>
<changeSet id="erm.appetite_1.0.0_20221020__ERM Appetite Database Data" author="platform">
</changeSet>
</databaseChangeLog>

259
erm/src/main/resources/liquibase/appetite/erm.appetite_1.0.0_20221020__ERM Appetite Database Schema DDL.xml

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
"
>
<changeSet id="erm.appetite_1.0.0_20221020__ERM Appetite Database Schema DDL" author="platform">
<!-- 风险偏好交叉验证表 -->
<createTable tableName="RP_APT_CROSS_VALIDATE" remarks="风险偏好交叉验证表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="CODE_" type="NVARCHAR(255)" remarks="代码"/>
<column name="NAME_" type="NVARCHAR(255)" remarks="名称"/>
<column name="DESCRIPTION_" type="CLOB" remarks="描述"/>
<column name="YEAR_" type="NVARCHAR(4)" remarks="年份"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addUniqueConstraint tableName="RP_APT_CROSS_VALIDATE" columnNames="CODE_,CORP_CODE_"></addUniqueConstraint>
<addNotNullConstraint columnName="CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_CROSS_VALIDATE" constraintName="CONST_RP_APT_CROSS_VALIDATE_CODE"/>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_CROSS_VALIDATE" constraintName="CONST_RP_APT_CROSS_VALIDATE_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_CROSS_VALIDATE" constraintName="CONST_RP_APT_CROSS_VALIDATE_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_CROSS_VALIDATE" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_CROSS_VALIDATE" defaultValue="_PRIMARY_"/>
<!-- 风险偏好传导机制表 -->
<createTable tableName="RP_APT_SPREAD" remarks="风险偏好传导机制表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="CODE_" type="NVARCHAR(255)" remarks="代码"/>
<column name="NAME_" type="NVARCHAR(255)" remarks="名称"/>
<column name="DESCRIPTION_" type="CLOB" remarks="描述"/>
<column name="YEAR_" type="NVARCHAR(4)" remarks="年份"/>
<column name="CROSS_VALIDATE_ID_" type="NVARCHAR(36)" remarks="风险偏好交叉验证ID"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addUniqueConstraint tableName="RP_APT_SPREAD" columnNames="CODE_,CORP_CODE_"></addUniqueConstraint>
<addNotNullConstraint columnName="CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD" constraintName="CONST_RP_APT_SPREAD_CODE"/>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD" constraintName="CONST_RP_APT_SPREAD_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD" constraintName="CONST_RP_APT_SPREAD_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好交叉验证被删除,其所有风险偏好传导机制也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_CVID"
baseTableName="RP_APT_SPREAD"
baseColumnNames="CROSS_VALIDATE_ID_"
referencedTableName="RP_APT_CROSS_VALIDATE"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<!-- 风险偏好传导机制(业务战略目标传导分析)表 -->
<createTable tableName="RP_APT_SPREAD_BO" remarks="风险偏好传导机制(业务战略目标传导分析)表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="SPREAD_ID_" type="NVARCHAR(36)" remarks="风险偏好传导机制ID"/>
<column name="BUSINESS_" type="NVARCHAR(20)" remarks="业务条线"/>
<column name="POLICY_" type="NVARCHAR(20)" remarks="风险基调"/>
<column name="RANGE_" type="NVARCHAR(20)" remarks="对应区间"/>
<column name="LAST_YEAR_LOAN_BALANCE_" type="NUMERIC(31,6)" remarks="上年贷款余额"/>
<column name="LAST_YEAR_NPL_" type="NUMERIC(31,6)" remarks="上年不良贷款率"/>
<column name="GROWTH_PERCENT_" type="NUMERIC(31,6)" remarks="预计增长率"/>
<column name="PREDICT_LOAN_BALANCE_" type="NUMERIC(31,6)" remarks="预计本年贷款余额"/>
<column name="PREDICT_NPL_" type="NUMERIC(31,6)" remarks="预计本年不良贷款率"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_BO" constraintName="CONST_RP_APT_SPREAD_BO_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_BO" constraintName="CONST_RP_APT_SPREAD_BO_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_BO" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_BO" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好传导机制被删除,其所有业务战略目标传导分析也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_BO_SPID"
baseTableName="RP_APT_SPREAD_BO"
baseColumnNames="SPREAD_ID_"
referencedTableName="RP_APT_SPREAD"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<!-- 风险偏好传导机制(行业分析)表 -->
<createTable tableName="RP_APT_SPREAD_INDUSTRY" remarks="风险偏好传导机制(行业分析)表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="SPREAD_ID_" type="NVARCHAR(36)" remarks="风险偏好传导机制ID"/>
<column name="INDUSTRY_" type="NVARCHAR(20)" remarks="行业"/>
<column name="POLICY_" type="NVARCHAR(20)" remarks="风险基调"/>
<column name="RANGE_" type="NVARCHAR(20)" remarks="对应区间"/>
<column name="LAST_YEAR_LOAN_BALANCE_" type="NUMERIC(31,6)" remarks="上年贷款余额"/>
<column name="LAST_YEAR_NPL_" type="NUMERIC(31,6)" remarks="上年不良贷款率"/>
<column name="GROWTH_PERCENT_" type="NUMERIC(31,6)" remarks="预计增长率"/>
<column name="PREDICT_LOAN_BALANCE_" type="NUMERIC(31,6)" remarks="预计本年贷款余额"/>
<column name="PREDICT_NPL_" type="NUMERIC(31,6)" remarks="预计本年不良贷款率"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_INDUSTRY" constraintName="CONST_RP_APT_SPREAD_INDUSTRY_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_INDUSTRY" constraintName="CONST_RP_APT_SPREAD_INDUSTRY_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_INDUSTRY" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_INDUSTRY" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好传导机制被删除,其所有业务战略目标传导分析也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_ID_SPID"
baseTableName="RP_APT_SPREAD_INDUSTRY"
baseColumnNames="SPREAD_ID_"
referencedTableName="RP_APT_SPREAD"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<!-- 风险偏好传导机制(利益相关方-股东)表 -->
<createTable tableName="RP_APT_SPREAD_SH" remarks="风险偏好传导机制(利益相关方-股东)表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="SPREAD_ID_" type="NVARCHAR(36)" remarks="风险偏好传导机制ID"/>
<column name="STAKE_HOLDER_" type="NVARCHAR(20)" remarks="利益相关方"/>
<column name="INDICATOR_ID_" type="NVARCHAR(36)" remarks="指标ID"/>
<column name="CONDITION_" type="NVARCHAR(255)" remarks="条件"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_SH" constraintName="CONST_RP_APT_SPREAD_SH_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_SH" constraintName="CONST_RP_APT_SPREAD_SH_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_SH" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_SH" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好传导机制被删除,其所有业务利益相关方-股东分析也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_SH_SPID"
baseTableName="RP_APT_SPREAD_SH"
baseColumnNames="SPREAD_ID_"
referencedTableName="RP_APT_SPREAD"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_SH_IDX_ID"
baseTableName="RP_APT_SPREAD_SH"
baseColumnNames="INDICATOR_ID_"
referencedTableName="RP_INDICATOR"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<!-- 风险偏好传导机制(利益相关方-监管)表 -->
<createTable tableName="RP_APT_SPREAD_SV" remarks="风险偏好传导机制(利益相关方-监管)表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="SPREAD_ID_" type="NVARCHAR(36)" remarks="风险偏好传导机制ID"/>
<column name="STAKE_HOLDER_" type="NVARCHAR(20)" remarks="利益相关方"/>
<column name="INDICATOR_ID_" type="NVARCHAR(36)" remarks="指标ID"/>
<column name="CONDITION_" type="NVARCHAR(255)" remarks="条件"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_SV" constraintName="CONST_RP_APT_SPREAD_SV_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_SV" constraintName="CONST_RP_APT_SPREAD_SV_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_SV" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_SV" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好传导机制被删除,其所有业务利益相关方-股东分析也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_SV_SPID"
baseTableName="RP_APT_SPREAD_SV"
baseColumnNames="SPREAD_ID_"
referencedTableName="RP_APT_SPREAD"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_SV_IDX_ID"
baseTableName="RP_APT_SPREAD_SV"
baseColumnNames="INDICATOR_ID_"
referencedTableName="RP_INDICATOR"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<!-- 风险偏好传导机制(核心指标)表 -->
<createTable tableName="RP_APT_SPREAD_CI" remarks="风险偏好传导机制(核心指标)表">
<column name="ID_" type="NVARCHAR(36)" remarks="ID">
<constraints primaryKey="true"/>
</column>
<column name="SPREAD_ID_" type="NVARCHAR(36)" remarks="风险偏好传导机制ID"/>
<column name="INDICATOR_ID_" type="NVARCHAR(36)" remarks="指标ID"/>
<column name="SUPERVISION_MIN_VALUE_" type="NUMERIC(31,6)" remarks="容忍下限(监管要求)"/>
<column name="EXPECT_VALUE_" type="NUMERIC(31,6)" remarks="目标值(股东期望)"/>
<column name="REFERENCE_VALUE_" type="NUMERIC(31,6)" remarks="参考值(定量传导)"/>
<column name="LAST_YEAR_VALUE" type="NUMERIC(31,6)" remarks="上年度指标值"/>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>
<column name="CREATOR_" type="NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
<column name="LAST_MODIFIER_" type="NVARCHAR(255)" remarks="最后修改人"/>
<column name="LAST_MODIFYDATE_" type="DATETIME" remarks="最后修改日期"/>
<column name="CORP_CODE_" type="NVARCHAR(255)" remarks="所属法人代码"/>
</createTable>
<addNotNullConstraint columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_CI" constraintName="CONST_RP_APT_SPREAD_CI_DCF"/>
<addNotNullConstraint columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_CI" constraintName="CONST_RP_APT_SPREAD_CI_CORP"/>
<addDefaultValue columnName="DATA_COME_FROM_" columnDataType="NVARCHAR(10)" tableName="RP_APT_SPREAD_CI" defaultValue="INPUT"/>
<addDefaultValue columnName="CORP_CODE_" columnDataType="NVARCHAR(255)" tableName="RP_APT_SPREAD_CI" defaultValue="_PRIMARY_"/>
<!-- 当风险偏好传导机制被删除,其所有业务利益相关方-股东分析也被删除 -->
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_CI_SPID"
baseTableName="RP_APT_SPREAD_CI"
baseColumnNames="SPREAD_ID_"
referencedTableName="RP_APT_SPREAD"
referencedColumnNames="ID_" onDelete="CASCADE"/>
<addForeignKeyConstraint
constraintName="FK_RP_APT_SPREAD_CI_IDX_ID"
baseTableName="RP_APT_SPREAD_CI"
baseColumnNames="INDICATOR_ID_"
referencedTableName="RP_INDICATOR"
referencedColumnNames="ID_" onDelete="CASCADE"/>
</changeSet>
</databaseChangeLog>

1
erm/src/main/resources/liquibase/kpi/data/sys_dictionary.csv

@ -33,6 +33,7 @@
"00000000-0000-0000-0003-000000000009","INDICATOR_CATEGORY_BUSINESS","INTER_BANK","9",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0003-000000000010","INDICATOR_CATEGORY_BUSINESS","FINANCIAL","10",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0003-000000000011","INDICATOR_CATEGORY_BUSINESS","COMPREHENSIVE","11",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0003-000000000012","INDICATOR_CATEGORY_BUSINESS","OTHER","12",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0004-000000000001","INDICATOR_CATEGORY_CAL","BASIC","1",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0004-000000000002","INDICATOR_CATEGORY_CAL","DIY","2",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"00000000-0000-0000-0005-000000000001","INDICATOR_UNIT","YUAN","1",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"

1 SYS_DICTIONARY
33 00000000-0000-0000-0003-000000000009 INDICATOR_CATEGORY_BUSINESS INTER_BANK 9 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
34 00000000-0000-0000-0003-000000000010 INDICATOR_CATEGORY_BUSINESS FINANCIAL 10 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
35 00000000-0000-0000-0003-000000000011 INDICATOR_CATEGORY_BUSINESS COMPREHENSIVE 11 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
36 00000000-0000-0000-0003-000000000012 INDICATOR_CATEGORY_BUSINESS OTHER 12 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
37 00000000-0000-0000-0004-000000000001 INDICATOR_CATEGORY_CAL BASIC 1 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
38 00000000-0000-0000-0004-000000000002 INDICATOR_CATEGORY_CAL DIY 2 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
39 00000000-0000-0000-0005-000000000001 INDICATOR_UNIT YUAN 1 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_

4
gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform
###########################################################
platform_group=io.sc
platform_version=8.1.26
platform_version=8.1.27
platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.141
platform_core_frontend_version=8.1.145
###########################################################
# dependencies version

4
io.sc.engine.mv.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.engine.mv.frontend",
"version": "8.1.26",
"version": "8.1.27",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.141",
"platform-core": "8.1.145",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

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

@ -38,14 +38,11 @@
name: 'detail',
label: $t('detail'),
icon: 'bi-display',
enableIf: (selecteds) => {
return selecteds && selecteds.length > 0;
enableIf: (arg) => {
return arg.selected;
},
click: (selecteds) => {
if (selecteds && selecteds.length > 0) {
const selected = selecteds[0];
resultDetailDialogRef.open(selected);
}
click: (arg) => {
resultDetailDialogRef.open(arg.selected);
},
},
{

4
io.sc.engine.mv/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -13,8 +13,8 @@
[
{
"category" : "install",
"order" : 100,
"description":"模型验证模块表结构及其初始化菜单",
"order" : 10000,
"description":"模型验证工具",
"locations":[
"liquibase/io.sc.engine.mv_8.0.0_20221020__Model Validate Database Schema DDL.xml"
]

4
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words.properties

@ -96,6 +96,7 @@ name=Name
newValue=New Value
next=Next
nextPage=Next Page
nextStep=Next Step
no=No
normal=Normal
oldValue=Old Value
@ -112,6 +113,7 @@ phone=Phone
pixel=px
previous=Previous
previousPage=Previous Page
previousStep=Previous Step
priority=Priority
qq=QQ
query=Query
@ -192,3 +194,5 @@ specify=Specify
notSpecify=Not Specify
formula=Formula
unit=Unit
calculate=Calculate
location=Location

4
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_tw_CN.properties

@ -96,6 +96,7 @@ name=\u540D\u7A31
newValue=\u65B0\u503C
next=\u4E0B\u4E00
nextPage=\u4E0B\u4E00\u9801
nextStep=\u4E0B\u4E00\u6B65
no=\u5426
normal=\u6B63\u5E38
oldValue=\u539F\u503C
@ -112,6 +113,7 @@ phone=\u96FB\u8A71
pixel=\u50CF\u7D20
previous=\u524D\u4E00
previousPage=\u524D\u4E00\u9801
previousStep=\u4E0A\u4E00\u6B65
priority=\u512A\u5148\u7D1A
qq=QQ
query=\u67E5\u8A62
@ -192,3 +194,5 @@ specify=\u6307\u5B9A
notSpecify=\u4E0D\u6307\u5B9A
formula=\u516C\u5F0F
unit=\u55AE\u4F4D
calculate=\u8A08\u7B97
location=\u4F4D\u7F6E

4
io.sc.platform.core/src/main/resources/io/sc/platform/core/i18n/words_zh_CN.properties

@ -96,6 +96,7 @@ name=\u540D\u79F0
newValue=\u65B0\u503C
next=\u4E0B\u4E00
nextPage=\u4E0B\u4E00\u9875
nextStep=\u4E0B\u4E00\u6B65
no=\u5426
normal=\u6B63\u5E38
oldValue=\u539F\u503C
@ -112,6 +113,7 @@ phone=\u7535\u8BDD
pixel=\u50CF\u7D20
previous=\u524D\u4E00
previousPage=\u524D\u4E00\u9875
previousStep=\u4E0A\u4E00\u6B65
priority=\u4F18\u5148\u7EA7
qq=QQ
query=\u67E5\u8BE2
@ -192,3 +194,5 @@ specify=\u6307\u5B9A
notSpecify=\u4E0D\u6307\u5B9A
formula=\u516C\u5F0F
unit=\u5355\u4F4D
calculate=\u8BA1\u7B97
location=\u4F4D\u7F6E

4
io.sc.platform.developer.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "io.sc.platform.developer.frontend",
"version": "8.1.26",
"version": "8.1.27",
"description": "",
"private": false,
"keywords": [
@ -80,7 +80,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.141",
"platform-core": "8.1.145",
"quasar": "2.14.2",
"tailwindcss": "3.4.0",
"vue": "3.4.3",

2
io.sc.platform.developer.frontend/src/components/index.ts

@ -19,6 +19,7 @@ import Messages from '@/views/plugin/Messages.vue';
import P6spy from '@/views/plugin/P6spy.vue';
import Parameters from '@/views/plugin/Parameters.vue';
import Repositories from '@/views/plugin/Repositories.vue';
import Liquibase from '@/views/plugin/Liquibase.vue';
import RestartProperties from '@/views/plugin/RestartProperties.vue';
import Security from '@/views/plugin/Security.vue';
import Ws from '@/views/plugin/Ws.vue';
@ -46,6 +47,7 @@ const localComponents = {
'component.developer.plugin.P6spy': P6spy,
'component.developer.plugin.Parameters': Parameters,
'component.developer.plugin.Repositories': Repositories,
'component.developer.plugin.Liquibase': Liquibase,
'component.developer.plugin.RestartProperties': RestartProperties,
'component.developer.plugin.Security': Security,
'component.developer.plugin.Ws': Ws,

1
io.sc.platform.developer.frontend/src/i18n/messages.json

@ -21,6 +21,7 @@
"menu.developer.plugin.parameters" : "System Parameter",
"menu.developer.plugin.swagger" : "Swagger",
"menu.developer.plugin.repositories" : "JPA Repository",
"menu.developer.plugin.liquibase" : "Liquibase",
"menu.developer.plugin.frontendModule" : "Front End Module",
"menu.developer.plugin.frontendRoutes" : "Front End Route",
"menu.developer.plugin.menus" : "Menu",

1
io.sc.platform.developer.frontend/src/i18n/messages_tw_CN.json

@ -21,6 +21,7 @@
"menu.developer.plugin.parameters" : "系統參數",
"menu.developer.plugin.swagger" : "Swagger",
"menu.developer.plugin.repositories" : "JPA Repository",
"menu.developer.plugin.liquibase" : "Liquibase",
"menu.developer.plugin.frontendModule" : "前端模塊",
"menu.developer.plugin.frontendRoutes" : "前端路由",
"menu.developer.plugin.menus" : "菜單",

1
io.sc.platform.developer.frontend/src/i18n/messages_zh_CN.json

@ -21,6 +21,7 @@
"menu.developer.plugin.parameters" : "系统参数",
"menu.developer.plugin.swagger" : "Swagger",
"menu.developer.plugin.repositories" : "JPA Repository",
"menu.developer.plugin.liquibase" : "Liquibase",
"menu.developer.plugin.frontendModule" : "前端模块",
"menu.developer.plugin.frontendRoutes" : "前端路由",
"menu.developer.plugin.menus" : "菜单",

26
io.sc.platform.developer.frontend/src/menus/menus.json

@ -44,30 +44,32 @@
{"type":"ROUTE", "order":300, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.components", "titleI18nKey":"menu.developer.plugin.components", "icon":"bi-vignette", "routeName":"route.developer.plugin.components"},
/*//JPA Repositories*/
{"type":"ROUTE", "order":400, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.repositories", "titleI18nKey":"menu.developer.plugin.repositories", "icon":"bi-database", "routeName":"route.developer.plugin.repositories"},
/*//Liquibase*/
{"type":"ROUTE", "order":500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.liquibase", "titleI18nKey":"menu.developer.plugin.liquibase", "icon":"bi-database", "routeName":"route.developer.plugin.liquibase"},
/*//*/
{"type":"ROUTE", "order":500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.messages", "titleI18nKey":"menu.developer.plugin.messages", "icon":"bi-globe", "routeName":"route.developer.plugin.messages"},
{"type":"ROUTE", "order":600, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.messages", "titleI18nKey":"menu.developer.plugin.messages", "icon":"bi-globe", "routeName":"route.developer.plugin.messages"},
/*//*/
{"type":"ROUTE", "order":600, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.frontendModule", "titleI18nKey":"menu.developer.plugin.frontendModule", "icon":"bi-grid", "routeName":"route.developer.plugin.frontendModule"},
{"type":"ROUTE", "order":700, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.frontendModule", "titleI18nKey":"menu.developer.plugin.frontendModule", "icon":"bi-grid", "routeName":"route.developer.plugin.frontendModule"},
/*//*/
{"type":"ROUTE", "order":700, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.frontendRoutes", "titleI18nKey":"menu.developer.plugin.frontendRoutes", "icon":"bi-bezier2", "routeName":"route.developer.plugin.frontendRoutes"},
{"type":"ROUTE", "order":800, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.frontendRoutes", "titleI18nKey":"menu.developer.plugin.frontendRoutes", "icon":"bi-bezier2", "routeName":"route.developer.plugin.frontendRoutes"},
/*//*/
{"type":"ROUTE", "order":800, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.security", "titleI18nKey":"menu.developer.plugin.security", "icon":"bi-shield-check", "routeName":"route.developer.plugin.security"},
{"type":"ROUTE", "order":900, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.security", "titleI18nKey":"menu.developer.plugin.security", "icon":"bi-shield-check", "routeName":"route.developer.plugin.security"},
/*//*/
{"type":"ROUTE", "order":900, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.directories", "titleI18nKey":"menu.developer.plugin.directories", "icon":"bi-folder2", "routeName":"route.developer.plugin.directories"},
{"type":"ROUTE", "order":1000, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.directories", "titleI18nKey":"menu.developer.plugin.directories", "icon":"bi-folder2", "routeName":"route.developer.plugin.directories"},
/*//JSON */
{"type":"ROUTE", "order":1000, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.jsonSerializers", "titleI18nKey":"menu.developer.plugin.jsonSerializers", "icon":"bi-usb-c", "routeName":"route.developer.plugin.jsonSerializers"},
{"type":"ROUTE", "order":1100, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.jsonSerializers", "titleI18nKey":"menu.developer.plugin.jsonSerializers", "icon":"bi-usb-c", "routeName":"route.developer.plugin.jsonSerializers"},
/*//*/
{"type":"ROUTE", "order":1100, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.systemProperties", "titleI18nKey":"menu.developer.plugin.systemProperties", "icon":"bi-list-task", "routeName":"route.developer.plugin.systemProperties"},
{"type":"ROUTE", "order":1200, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.systemProperties", "titleI18nKey":"menu.developer.plugin.systemProperties", "icon":"bi-list-task", "routeName":"route.developer.plugin.systemProperties"},
/*//*/
{"type":"ROUTE", "order":1200, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.applicationProperties", "titleI18nKey":"menu.developer.plugin.applicationProperties", "icon":"bi-list-ul", "routeName":"route.developer.plugin.applicationProperties"},
{"type":"ROUTE", "order":1300, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.applicationProperties", "titleI18nKey":"menu.developer.plugin.applicationProperties", "icon":"bi-list-ul", "routeName":"route.developer.plugin.applicationProperties"},
/*//*/
{"type":"ROUTE", "order":1300, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.restartProperties", "titleI18nKey":"menu.developer.plugin.restartProperties", "icon":"bi-list-check", "routeName":"route.developer.plugin.restartProperties"},
{"type":"ROUTE", "order":1400, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.restartProperties", "titleI18nKey":"menu.developer.plugin.restartProperties", "icon":"bi-list-check", "routeName":"route.developer.plugin.restartProperties"},
/*//SQL*/
{"type":"ROUTE", "order":1400, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.p6spy", "titleI18nKey":"menu.developer.plugin.p6spy", "icon":"bi-filetype-sql", "routeName":"route.developer.plugin.p6spy"},
{"type":"ROUTE", "order":1500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.p6spy", "titleI18nKey":"menu.developer.plugin.p6spy", "icon":"bi-filetype-sql", "routeName":"route.developer.plugin.p6spy"},
/*//WebService*/
{"type":"ROUTE", "order":1500, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.ws", "titleI18nKey":"menu.developer.plugin.ws", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.ws"},
{"type":"ROUTE", "order":1600, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.ws", "titleI18nKey":"menu.developer.plugin.ws", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.ws"},
/*//Swagger*/
{"type":"ROUTE", "order":1600, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.swagger", "titleI18nKey":"menu.developer.plugin.swagger", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.swagger"},
{"type":"ROUTE", "order":1700, "parentId":"menu.developer.plugin", "id":"menu.developer.plugin.swagger", "titleI18nKey":"menu.developer.plugin.swagger", "icon":"bi-filetype-html", "routeName":"route.developer.plugin.swagger"},
/*/*/
{"type":"GROUP", "order":500, "parentId":"menu.developer", "id":"menu.developer.backend", "titleI18nKey":"menu.developer.backend", "icon":"bi-server"},

15
io.sc.platform.developer.frontend/src/routes/routes.json

@ -254,6 +254,21 @@
]
}
},
{
"name": "route.developer.plugin.liquibase",
"path": "developer/plugin/liquibase",
"parent": "/",
"priority": 0,
"module": "io.sc.platform.developer.frontend",
"component": "component.developer.plugin.Liquibase",
"componentPath": "@/views/plugin/Liquibase.vue",
"redirect": null,
"meta": {
"permissions": [
"/system/developer/plugin/repositories/**/*"
]
}
},
{
"name": "route.developer.plugin.restartProperties",
"path": "developer/plugin/restartProperties",

33
io.sc.platform.developer.frontend/src/views/plugin/Liquibase.vue

@ -0,0 +1,33 @@
<template>
<w-grid
:title="$t('menu.developer.plugin.initializer')"
:toolbar-actions="['refresh', 'separator', 'view', 'export']"
:fetch-data-url="Environment.apiContextPath('/api/developer/plugins/liquibase')"
:checkbox-selection="false"
:pageable="false"
:columns="[
{ width: 80, name: 'order', label: $t('order'), align: 'right', sortable: false },
{ width: 80, name: 'category', label: $t('category'), format: (value) => $t(value), align: 'left', sortable: false },
{ width: 200, name: 'description', label: $t('description'), format: (value) => $t(value), align: 'left', sortable: false },
{
width: 600,
name: 'locations',
label: $t('location'),
format: (locations) => {
locations = locations || [];
let result = '';
for (const location of locations) {
result += location + '<br/>';
}
return result;
},
align: 'left',
sortable: false,
},
{ width: '100%', name: 'configurationFileUrl', label: $t('url'), sortable: false },
]"
></w-grid>
</template>
<script setup lang="ts">
import { Environment } from 'platform-core';
</script>

1
io.sc.platform.developer/build.gradle

@ -5,5 +5,6 @@ dependencies {
project(":io.sc.platform.ws.cxf"),
project(":io.sc.platform.developer.doc"),
project(":io.sc.platform.developer.frontend"),
project(":io.sc.platform.jdbc.liquibase"),
)
}

20
io.sc.platform.developer/src/main/java/io/sc/platform/developer/controller/plugins/PluginLiquibaseWebController.java

@ -0,0 +1,20 @@
package io.sc.platform.developer.controller.plugins;
import io.sc.platform.jdbc.liquibase.plugins.PluginManager;
import io.sc.platform.jdbc.liquibase.plugins.item.LiquibaseChangeLog;
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.ResponseBody;
import java.util.List;
@Controller
@RequestMapping("/api/developer/plugins/liquibase")
public class PluginLiquibaseWebController {
@GetMapping("")
@ResponseBody
public List<LiquibaseChangeLog> directories(){
return PluginManager.getInstance().getLiquibaseChangeLogs();
}
}

38
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/initializer/SampleWorkFlowSystemDictionaryInitializer.java

@ -1,38 +0,0 @@
package io.sc.platform.flowable.initializer;
import io.sc.platform.core.initializer.ApplicationInitializer;
import io.sc.platform.core.initializer.ApplicationInitializerExecuteException;
import io.sc.platform.core.util.BeanUtil;
import io.sc.platform.system.dictionary.jpa.entity.DictionaryEntity;
import io.sc.platform.system.dictionary.service.DictionaryService;
import io.sc.platform.system.i18n.jpa.entity.I18nEntity;
import io.sc.platform.system.i18n.service.I18nService;
import org.springframework.context.ApplicationContext;
public class SampleWorkFlowSystemDictionaryInitializer implements ApplicationInitializer {
private DictionaryService dictionaryService;
@Override
public void init(ApplicationContext applicationContext) {
this.dictionaryService = BeanUtil.getBean(applicationContext,DictionaryService.class);
}
@Override
public int getOrder() {
return 10000;
}
@Override
public boolean isInitialized() {
return dictionaryService.getRepository().count()>0;
}
@Override
public void execute() throws ApplicationInitializerExecuteException {
DictionaryEntity item =new DictionaryEntity();
item.setCode("WORK_FLOW");
item.setValue("SAMPLE");
item.setOrder(0);
item.setCorporationCode("_PRIMARY_");
dictionaryService.getRepository().save(item);
}
}

7
io.sc.platform.flowable/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -1,11 +1,12 @@
[
{
"category" : "install",
"order" : 600,
"description":"工作流流程定义表结构",
"order" : 400,
"description":"工作流",
"locations":[
"liquibase/io.sc.platform.flowable_8.0.0_20220606__Flowable(6.8.0) Database Schema DDL.xml",
"liquibase/io.sc.platform.flowable_8.0.0_20220606__Process Manager Database Schema DDL.xml"
"liquibase/io.sc.platform.flowable_8.0.0_20220606__Process Manager Database Schema DDL.xml",
"liquibase/io.sc.platform.flowable_8.0.0_20220606__Process Manager Data.xml"
]
}
]

1
io.sc.platform.flowable/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer

@ -1 +0,0 @@
io.sc.platform.flowable.initializer.SampleWorkFlowSystemDictionaryInitializer

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save