Browse Source

修改客户评级代码

main
likunming 8 months ago
parent
commit
a83a03e49d
  1. 1196
      app.irbs/src/main/resources/liquibase/data/irbs/NS_COMPANY_RATING.csv
  2. 25
      app.irbs/src/main/resources/liquibase/data/irbs/SYS_DICTIONARY.csv
  3. 23
      app.irbs/src/main/resources/liquibase/data/irbs/SYS_I18N.csv
  4. 6
      irbs.cust.rating/src/main/java/irbs/cust/rating/controller/RatingIndexController.java
  5. 123
      irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/entity/CompanyRating.java
  6. 14
      irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/entity/RatingIndex.java
  7. 104
      irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/vo/CompanyRatingVo.java
  8. 12
      irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/vo/RatingIndexVo.java
  9. 4
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/ModelLibService.java
  10. 1
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/RatingIndexService.java
  11. 2
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingProcessServiceImpl.java
  12. 41
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingServiceImpl.java
  13. 15
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/ModelLibServiceImpl.java
  14. 85
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/RatingIndexServiceImpl.java
  15. 10
      irbs.cust.rating/src/main/resources/liquibase/20240321_CUST_RATING_DDL.xml
  16. 69
      irbs.frontend/src/views/IrbsHome.vue
  17. 20
      irbs.frontend/src/views/custRating/CustRating.ts
  18. 49
      irbs.frontend/src/views/custRating/CustRating.vue
  19. 342
      irbs.frontend/src/views/custRating/GrayModelDialog.vue
  20. 183
      irbs.frontend/src/views/custRating/RatingDialog.vue
  21. 30
      irbs.frontend/src/views/custRating/RatingLevel.vue

1196
app.irbs/src/main/resources/liquibase/data/irbs/NS_COMPANY_RATING.csv

File diff suppressed because it is too large

25
app.irbs/src/main/resources/liquibase/data/irbs/SYS_DICTIONARY.csv

@ -1,8 +1,10 @@
"SYS_DICTIONARY",,,,,,,,,, "SYS_DICTIONARY",,,,,,,,,,
"ID_","CODE_","VALUE_","ORDER_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_","CORP_CODE_" "ID_","CODE_","VALUE_","ORDER_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_","CORP_CODE_"
"ID","","","排序","JPA乐观锁版本","","创建人","创建日期","最后修改人","最后修改日期","" "ID","字典代码","字典项值","排序","JPA乐观锁版本","数据来源(INPUT:手工录入,IMPORT:系统自动导入)","创建人","创建日期","最后修改人","最后修改日期","所属法人代码"
"VARCHAR","VARCHAR","VARCHAR","INTEGER","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP","VARCHAR" "VARCHAR","VARCHAR","VARCHAR","INTEGER","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP","VARCHAR"
"java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp","java.lang.String" "java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp","java.lang.String"
"05535cb1-d9c4-49fb-bde1-405fce601ac3","WORK_FLOW","SAMPLE","1",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"debe6a2c-da11-46f9-a66d-28481e1da319","WORK_FLOW","RULE_ENGINE_APPROVING","2",,"INPUT","system","2024-03-11 12:50:35.0","system","2024-03-11 12:50:35.0","_PRIMARY_"
"098b04c2-0ce7-440d-8f4d-edd665b84d9b","NATION_CD","208","208",,"INPUT","test01","2024-06-26 15:33:33.0","test01","2024-06-26 15:33:33.0","_PRIMARY_" "098b04c2-0ce7-440d-8f4d-edd665b84d9b","NATION_CD","208","208",,"INPUT","test01","2024-06-26 15:33:33.0","test01","2024-06-26 15:33:33.0","_PRIMARY_"
"102f43a1-588c-4890-bef1-a54b5ac18394","NATION_CD","999","999",,"INPUT","test01","2024-06-26 15:34:00.0","test01","2024-06-26 15:34:00.0","_PRIMARY_" "102f43a1-588c-4890-bef1-a54b5ac18394","NATION_CD","999","999",,"INPUT","test01","2024-06-26 15:34:00.0","test01","2024-06-26 15:34:00.0","_PRIMARY_"
"10b4c787-85a9-4b2d-85ef-e9e13eadac88","REGISTERED_TYPE","150","150",,"INPUT","test01","2024-06-26 15:01:51.0","test01","2024-06-26 15:01:51.0","_PRIMARY_" "10b4c787-85a9-4b2d-85ef-e9e13eadac88","REGISTERED_TYPE","150","150",,"INPUT","test01","2024-06-26 15:01:51.0","test01","2024-06-26 15:01:51.0","_PRIMARY_"
@ -93,3 +95,24 @@
"f684a563-eb64-11ee-b0df-0242ac110002","CustomerSizeCd","3","3",,"INPUT","admin","2024-03-07 00:00:00.0","admin","2024-03-07 00:00:00.0","_PRIMARY_" "f684a563-eb64-11ee-b0df-0242ac110002","CustomerSizeCd","3","3",,"INPUT","admin","2024-03-07 00:00:00.0","admin","2024-03-07 00:00:00.0","_PRIMARY_"
"f68527b2-eb64-11ee-b0df-0242ac110002","CustomerSizeCd","4","4",,"INPUT","admin","2024-03-07 00:00:00.0","admin","2024-03-07 00:00:00.0","_PRIMARY_" "f68527b2-eb64-11ee-b0df-0242ac110002","CustomerSizeCd","4","4",,"INPUT","admin","2024-03-07 00:00:00.0","admin","2024-03-07 00:00:00.0","_PRIMARY_"
"fd4cdc4b-e850-4c7c-a6ec-197bd533a24a","REGISTERED_TYPE","210","210",,"INPUT","test01","2024-06-26 15:03:21.0","test01","2024-06-26 15:03:21.0","_PRIMARY_" "fd4cdc4b-e850-4c7c-a6ec-197bd533a24a","REGISTERED_TYPE","210","210",,"INPUT","test01","2024-06-26 15:03:21.0","test01","2024-06-26 15:03:21.0","_PRIMARY_"
"aba440f5-1dcb-49e9-b7a7-ed8092f4398f","FinanceTypeCd","1","1",,"INPUT","test03","2024-07-02 15:34:25.804","test03","2024-07-02 15:34:25.804","_PRIMARY_"
"883f19aa-6693-4673-b05d-e630788151a2","FinanceTypeCd","2","2",,"INPUT","test03","2024-07-02 15:34:37.172","test03","2024-07-02 15:34:37.172","_PRIMARY_"
"9f6d5458-56c1-4dcb-b9e2-779b077efc9a","FinanceTypeCd","3","3",,"INPUT","test03","2024-07-02 15:34:41.364","test03","2024-07-02 15:34:41.364","_PRIMARY_"
"260f78fd-19e3-48aa-93e2-36f8663ef429","FinanceTypeCd","4","4",,"INPUT","test03","2024-07-02 15:34:45.28","test03","2024-07-02 15:34:45.28","_PRIMARY_"
"454219fb-118b-4f18-ba54-5084bbf1fc2a","FinanceSortTypeCd","1","1",,"INPUT","test03","2024-07-02 15:36:48.483","test03","2024-07-02 15:36:48.483","_PRIMARY_"
"2991bca4-76d2-445e-a087-d24f2f2feab5","FinanceSortTypeCd","2","2",,"INPUT","test03","2024-07-02 15:37:06.399","test03","2024-07-02 15:37:06.399","_PRIMARY_"
"01088c64-8ee6-4938-be36-d94b79027c13","FinanceStatusCd","1","1",,"INPUT","test03","2024-07-02 15:38:43.89","test03","2024-07-02 15:38:43.89","_PRIMARY_"
"3662dc72-0157-4e80-92f3-401b36c88c42","FinanceStatusCd","2","2",,"INPUT","test03","2024-07-02 15:38:51.013","test03","2024-07-02 15:38:51.013","_PRIMARY_"
"d1d9e471-f303-4eef-97a7-d5c215f978b5","CaliberCd","1","1",,"INPUT","test03","2024-07-02 15:39:38.966","test03","2024-07-02 15:39:38.966","_PRIMARY_"
"32398056-5a80-4d20-a90a-1dada666e321","CaliberCd","2","2",,"INPUT","test03","2024-07-02 15:39:44.697","test03","2024-07-02 15:39:44.697","_PRIMARY_"
"a8d87b57-cfe1-4764-af7d-3d28691a4ec6","CaliberCd","3","3",,"INPUT","test03","2024-07-02 15:39:48.456","test03","2024-07-02 15:39:48.456","_PRIMARY_"
"cac6450d-1ffc-46e8-888b-25b3773274b3","CurrencyTypeCd","392","392",,"INPUT","test03","2024-07-02 15:40:52.072","test03","2024-07-02 15:40:52.072","_PRIMARY_"
"e0870b56-fc67-4914-aeb8-f6c858943697","CurrencyTypeCd","156","156",,"INPUT","test03","2024-07-02 15:41:11.348","test03","2024-07-02 15:41:11.348","_PRIMARY_"
"50e18518-4712-4c82-8bb9-e82a825d82ef","CurrencyTypeCd","344","344",,"INPUT","test03","2024-07-02 15:41:17.584","test03","2024-07-02 15:41:17.584","_PRIMARY_"
"78f70f39-52cd-4f2a-a9d8-c1e905844394","CurrencyTypeCd","840","840",,"INPUT","test03","2024-07-02 15:41:24.603","test03","2024-07-02 15:41:24.603","_PRIMARY_"
"1c4c7e01-7036-4b2e-bb49-dab76b02ce6e","CurrencyTypeCd","036","36",,"INPUT","test03","2024-07-02 15:41:30.638","test03","2024-07-02 15:41:30.638","_PRIMARY_"
"4b36dd1f-d4f2-4956-afa1-b23407bc7666","CurrencyTypeCd","124","124",,"INPUT","test03","2024-07-02 15:41:37.158","test03","2024-07-02 15:41:37.158","_PRIMARY_"
"057e295f-869e-4974-955c-d585699b802e","CurrencyTypeCd","702","702",,"INPUT","test03","2024-07-02 15:41:49.072","test03","2024-07-02 15:41:49.072","_PRIMARY_"
"b7820a3d-9214-47de-94b6-43d01fc38723","CurrencyTypeCd","978","978",,"INPUT","test03","2024-07-02 15:41:55.848","test03","2024-07-02 15:41:55.848","_PRIMARY_"
"089854b1-08e2-4a44-8378-029e3b9e4d2d","CurrencyTypeCd","756","756",,"INPUT","test03","2024-07-02 15:42:02.368","test03","2024-07-02 15:42:02.368","_PRIMARY_"
"7e9d62c3-7a68-4fcc-aa5b-08044478b750","CurrencyTypeCd","826","826",,"INPUT","test03","2024-07-02 15:42:10.858","test03","2024-07-02 15:42:10.858","_PRIMARY_"

1 SYS_DICTIONARY
2 ID_ CODE_ VALUE_ ORDER_ JPA_VERSION_ DATA_COME_FROM_ CREATOR_ CREATE_DATE_ LAST_MODIFIER_ LAST_MODIFYDATE_ CORP_CODE_
3 ID 字典代码 字典项值 排序 JPA乐观锁版本 数据来源(INPUT:手工录入,IMPORT:系统自动导入) 创建人 创建日期 最后修改人 最后修改日期 所属法人代码
4 VARCHAR VARCHAR VARCHAR INTEGER INTEGER VARCHAR VARCHAR TIMESTAMP VARCHAR TIMESTAMP VARCHAR
5 java.lang.String java.lang.String java.lang.String java.lang.Integer java.lang.Integer java.lang.String java.lang.String java.sql.Timestamp java.lang.String java.sql.Timestamp java.lang.String
6 05535cb1-d9c4-49fb-bde1-405fce601ac3 WORK_FLOW SAMPLE 1 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
7 debe6a2c-da11-46f9-a66d-28481e1da319 WORK_FLOW RULE_ENGINE_APPROVING 2 INPUT system 2024-03-11 12:50:35.0 system 2024-03-11 12:50:35.0 _PRIMARY_
8 098b04c2-0ce7-440d-8f4d-edd665b84d9b NATION_CD 208 208 INPUT test01 2024-06-26 15:33:33.0 test01 2024-06-26 15:33:33.0 _PRIMARY_
9 102f43a1-588c-4890-bef1-a54b5ac18394 NATION_CD 999 999 INPUT test01 2024-06-26 15:34:00.0 test01 2024-06-26 15:34:00.0 _PRIMARY_
10 10b4c787-85a9-4b2d-85ef-e9e13eadac88 REGISTERED_TYPE 150 150 INPUT test01 2024-06-26 15:01:51.0 test01 2024-06-26 15:01:51.0 _PRIMARY_
95 f684a563-eb64-11ee-b0df-0242ac110002 CustomerSizeCd 3 3 INPUT admin 2024-03-07 00:00:00.0 admin 2024-03-07 00:00:00.0 _PRIMARY_
96 f68527b2-eb64-11ee-b0df-0242ac110002 CustomerSizeCd 4 4 INPUT admin 2024-03-07 00:00:00.0 admin 2024-03-07 00:00:00.0 _PRIMARY_
97 fd4cdc4b-e850-4c7c-a6ec-197bd533a24a REGISTERED_TYPE 210 210 INPUT test01 2024-06-26 15:03:21.0 test01 2024-06-26 15:03:21.0 _PRIMARY_
98 aba440f5-1dcb-49e9-b7a7-ed8092f4398f FinanceTypeCd 1 1 INPUT test03 2024-07-02 15:34:25.804 test03 2024-07-02 15:34:25.804 _PRIMARY_
99 883f19aa-6693-4673-b05d-e630788151a2 FinanceTypeCd 2 2 INPUT test03 2024-07-02 15:34:37.172 test03 2024-07-02 15:34:37.172 _PRIMARY_
100 9f6d5458-56c1-4dcb-b9e2-779b077efc9a FinanceTypeCd 3 3 INPUT test03 2024-07-02 15:34:41.364 test03 2024-07-02 15:34:41.364 _PRIMARY_
101 260f78fd-19e3-48aa-93e2-36f8663ef429 FinanceTypeCd 4 4 INPUT test03 2024-07-02 15:34:45.28 test03 2024-07-02 15:34:45.28 _PRIMARY_
102 454219fb-118b-4f18-ba54-5084bbf1fc2a FinanceSortTypeCd 1 1 INPUT test03 2024-07-02 15:36:48.483 test03 2024-07-02 15:36:48.483 _PRIMARY_
103 2991bca4-76d2-445e-a087-d24f2f2feab5 FinanceSortTypeCd 2 2 INPUT test03 2024-07-02 15:37:06.399 test03 2024-07-02 15:37:06.399 _PRIMARY_
104 01088c64-8ee6-4938-be36-d94b79027c13 FinanceStatusCd 1 1 INPUT test03 2024-07-02 15:38:43.89 test03 2024-07-02 15:38:43.89 _PRIMARY_
105 3662dc72-0157-4e80-92f3-401b36c88c42 FinanceStatusCd 2 2 INPUT test03 2024-07-02 15:38:51.013 test03 2024-07-02 15:38:51.013 _PRIMARY_
106 d1d9e471-f303-4eef-97a7-d5c215f978b5 CaliberCd 1 1 INPUT test03 2024-07-02 15:39:38.966 test03 2024-07-02 15:39:38.966 _PRIMARY_
107 32398056-5a80-4d20-a90a-1dada666e321 CaliberCd 2 2 INPUT test03 2024-07-02 15:39:44.697 test03 2024-07-02 15:39:44.697 _PRIMARY_
108 a8d87b57-cfe1-4764-af7d-3d28691a4ec6 CaliberCd 3 3 INPUT test03 2024-07-02 15:39:48.456 test03 2024-07-02 15:39:48.456 _PRIMARY_
109 cac6450d-1ffc-46e8-888b-25b3773274b3 CurrencyTypeCd 392 392 INPUT test03 2024-07-02 15:40:52.072 test03 2024-07-02 15:40:52.072 _PRIMARY_
110 e0870b56-fc67-4914-aeb8-f6c858943697 CurrencyTypeCd 156 156 INPUT test03 2024-07-02 15:41:11.348 test03 2024-07-02 15:41:11.348 _PRIMARY_
111 50e18518-4712-4c82-8bb9-e82a825d82ef CurrencyTypeCd 344 344 INPUT test03 2024-07-02 15:41:17.584 test03 2024-07-02 15:41:17.584 _PRIMARY_
112 78f70f39-52cd-4f2a-a9d8-c1e905844394 CurrencyTypeCd 840 840 INPUT test03 2024-07-02 15:41:24.603 test03 2024-07-02 15:41:24.603 _PRIMARY_
113 1c4c7e01-7036-4b2e-bb49-dab76b02ce6e CurrencyTypeCd 036 36 INPUT test03 2024-07-02 15:41:30.638 test03 2024-07-02 15:41:30.638 _PRIMARY_
114 4b36dd1f-d4f2-4956-afa1-b23407bc7666 CurrencyTypeCd 124 124 INPUT test03 2024-07-02 15:41:37.158 test03 2024-07-02 15:41:37.158 _PRIMARY_
115 057e295f-869e-4974-955c-d585699b802e CurrencyTypeCd 702 702 INPUT test03 2024-07-02 15:41:49.072 test03 2024-07-02 15:41:49.072 _PRIMARY_
116 b7820a3d-9214-47de-94b6-43d01fc38723 CurrencyTypeCd 978 978 INPUT test03 2024-07-02 15:41:55.848 test03 2024-07-02 15:41:55.848 _PRIMARY_
117 089854b1-08e2-4a44-8378-029e3b9e4d2d CurrencyTypeCd 756 756 INPUT test03 2024-07-02 15:42:02.368 test03 2024-07-02 15:42:02.368 _PRIMARY_
118 7e9d62c3-7a68-4fcc-aa5b-08044478b750 CurrencyTypeCd 826 826 INPUT test03 2024-07-02 15:42:10.858 test03 2024-07-02 15:42:10.858 _PRIMARY_

23
app.irbs/src/main/resources/liquibase/data/irbs/SYS_I18N.csv

@ -1,6 +1,6 @@
"SYS_I18N",,,,,,,,,, "SYS_I18N",,,,,,,,,,
"ID_","CODE_","LANG_","MESSAGE_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_","CORP_CODE_" "ID_","CODE_","LANG_","MESSAGE_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_","CORP_CODE_"
"消息ID","","","消息","JPA乐观锁版本","","创建人","创建日期","最后修改人","最后修改日期","" "消息ID","消息代码","语言","消息","JPA乐观锁版本","数据来源(INPUT:手工录入,IMPORT:系统自动导入)","创建人","创建日期","最后修改人","最后修改日期","所属法人代码"
"VARCHAR","VARCHAR","VARCHAR","VARCHAR","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP","VARCHAR" "VARCHAR","VARCHAR","VARCHAR","VARCHAR","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP","VARCHAR"
"java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp","java.lang.String" "java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp","java.lang.String"
"00a8c8d5-41d1-4b3f-823a-970128b407ff","MEMBER_TYPE_CD.3","zh_CN","分公司",,"INPUT","test01","2024-06-26 15:41:01.0","test01","2024-06-26 15:41:01.0","_PRIMARY_" "00a8c8d5-41d1-4b3f-823a-970128b407ff","MEMBER_TYPE_CD.3","zh_CN","分公司",,"INPUT","test01","2024-06-26 15:41:01.0","test01","2024-06-26 15:41:01.0","_PRIMARY_"
@ -86,3 +86,24 @@
"fb8cd8ed-ac4c-4b06-99cc-1892790edb10","REGISTERED_TYPE.340","zh_CN","外商投资股份有限公司",,"INPUT","test01","2024-06-26 15:10:50.0","test01","2024-06-26 15:10:50.0","_PRIMARY_" "fb8cd8ed-ac4c-4b06-99cc-1892790edb10","REGISTERED_TYPE.340","zh_CN","外商投资股份有限公司",,"INPUT","test01","2024-06-26 15:10:50.0","test01","2024-06-26 15:10:50.0","_PRIMARY_"
"fbf22958-4ba8-40ad-ba3d-8f4497a6bc3b","REGISTERED_TYPE.142","zh_CN","集体联营企业",,"INPUT","test01","2024-06-26 15:06:26.0","test01","2024-06-26 15:06:26.0","_PRIMARY_" "fbf22958-4ba8-40ad-ba3d-8f4497a6bc3b","REGISTERED_TYPE.142","zh_CN","集体联营企业",,"INPUT","test01","2024-06-26 15:06:26.0","test01","2024-06-26 15:06:26.0","_PRIMARY_"
"fd2a254f-a034-467d-a0af-6a55346bbaf4","MEMBER_TYPE_CD.5","zh_CN","其他成员单位",,"INPUT","test01","2024-06-26 15:41:17.0","test01","2024-06-26 15:41:17.0","_PRIMARY_" "fd2a254f-a034-467d-a0af-6a55346bbaf4","MEMBER_TYPE_CD.5","zh_CN","其他成员单位",,"INPUT","test01","2024-06-26 15:41:17.0","test01","2024-06-26 15:41:17.0","_PRIMARY_"
"7ffea1cf-bae9-464c-9c34-3e2de5dc26cc","FinanceTypeCd.1","zh_CN","年报",,"INPUT","test03","2024-07-02 15:35:03.923","test03","2024-07-02 15:35:03.923","_PRIMARY_"
"5cd7add3-bbe6-434a-bcfd-fbaefe5c97b5","FinanceTypeCd.2","zh_CN","半年报",,"INPUT","test03","2024-07-02 15:35:19.348","test03","2024-07-02 15:35:19.348","_PRIMARY_"
"553562f0-c145-484a-8d24-9a5c5d44bc86","FinanceTypeCd.3","zh_CN","季报",,"INPUT","test03","2024-07-02 15:35:26.517","test03","2024-07-02 15:35:26.517","_PRIMARY_"
"a49c821c-95bf-4ba7-a90a-29bc4850a992","FinanceTypeCd.4","zh_CN","月报",,"INPUT","test03","2024-07-02 15:35:34.228","test03","2024-07-02 15:35:34.228","_PRIMARY_"
"0152e3c9-a527-44b3-8bf0-c332360199c0","FinanceSortTypeCd.1","zh_CN","企业类",,"INPUT","test03","2024-07-02 15:37:18.158","test03","2024-07-02 15:37:18.158","_PRIMARY_"
"ad8fbda0-4356-4ab1-9470-82f3fdd30b04","FinanceSortTypeCd.2","zh_CN","事业类",,"INPUT","test03","2024-07-02 15:37:33.719","test03","2024-07-02 15:37:33.719","_PRIMARY_"
"70ddf130-9a2c-49d2-b3f8-8aa10622b965","FinanceStatusCd.1","zh_CN","未审计",,"INPUT","test03","2024-07-02 15:39:01.284","test03","2024-07-02 15:39:01.284","_PRIMARY_"
"5ea4c973-9d31-42f1-bfd8-3f5630b37d24","FinanceStatusCd.2","zh_CN","已审计",,"INPUT","test03","2024-07-02 15:39:18.34","test03","2024-07-02 15:39:18.34","_PRIMARY_"
"38e7df06-5866-4b6d-9e92-fafc96def444","CaliberCd.1","zh_CN","单一",,"INPUT","test03","2024-07-02 15:40:03.273","test03","2024-07-02 15:40:03.273","_PRIMARY_"
"7e87029c-95e8-4fb8-b9ea-612a768ab94f","CaliberCd.2","zh_CN","合并",,"INPUT","test03","2024-07-02 15:40:14.043","test03","2024-07-02 15:40:14.043","_PRIMARY_"
"8a6b689c-bc01-453f-8a8e-03ab80305179","CaliberCd.3","zh_CN","汇总",,"INPUT","test03","2024-07-02 15:40:21.498","test03","2024-07-02 15:40:21.498","_PRIMARY_"
"0c4da92b-85ab-46c2-a59e-2e0e6e8305a9","CurrencyTypeCd.392","zh_CN","日元",,"INPUT","test03","2024-07-02 15:42:43.169","test03","2024-07-02 15:42:43.169","_PRIMARY_"
"cbb43aba-e915-42d2-a8d1-bbe111cc96f2","CurrencyTypeCd.156","zh_CN","人民币",,"INPUT","test03","2024-07-02 15:42:53.489","test03","2024-07-02 15:42:53.489","_PRIMARY_"
"1449e525-b04f-4987-abe3-15396aa8f86d","CurrencyTypeCd.344","zh_CN","港币",,"INPUT","test03","2024-07-02 15:43:03.777","test03","2024-07-02 15:43:03.777","_PRIMARY_"
"a9459c6d-dc85-41b3-8b93-1e97dbceff5e","CurrencyTypeCd.840","zh_CN","美元",,"INPUT","test03","2024-07-02 15:43:19.053","test03","2024-07-02 15:43:19.053","_PRIMARY_"
"2bcacbd1-2c85-45f8-8635-d7cdfdae274c","CurrencyTypeCd.036","zh_CN","澳大利亚元",,"INPUT","test03","2024-07-02 15:48:21.631","test03","2024-07-02 15:48:21.631","_PRIMARY_"
"79d442d8-ffab-4ac6-9506-b8b9fa447a54","CurrencyTypeCd.124","zh_CN","加拿大元",,"INPUT","test03","2024-07-02 15:48:45.405","test03","2024-07-02 15:48:45.405","_PRIMARY_"
"e55d43ce-5592-421f-abd7-fcbc83380b74","CurrencyTypeCd.702","zh_CN","新加坡币",,"INPUT","test03","2024-07-02 15:49:04.395","test03","2024-07-02 15:49:04.395","_PRIMARY_"
"6c447e23-9c5b-4801-806d-364359697e8b","CurrencyTypeCd.978","zh_CN","欧元",,"INPUT","test03","2024-07-02 15:49:14.454","test03","2024-07-02 15:49:14.454","_PRIMARY_"
"8048ddda-317d-4d66-9f33-c3f22c7f78a6","CurrencyTypeCd.756","zh_CN","瑞士法郎",,"INPUT","test03","2024-07-02 15:49:27.016","test03","2024-07-02 15:49:27.016","_PRIMARY_"
"f5a0d225-b080-4ff9-963e-93165e68807e","CurrencyTypeCd.826","zh_CN","英镑",,"INPUT","test03","2024-07-02 15:49:38.703","test03","2024-07-02 15:49:38.703","_PRIMARY_"

1 SYS_I18N
2 ID_ CODE_ LANG_ MESSAGE_ JPA_VERSION_ DATA_COME_FROM_ CREATOR_ CREATE_DATE_ LAST_MODIFIER_ LAST_MODIFYDATE_ CORP_CODE_
3 消息ID 消息代码 语言 消息 JPA乐观锁版本 数据来源(INPUT:手工录入,IMPORT:系统自动导入) 创建人 创建日期 最后修改人 最后修改日期 所属法人代码
4 VARCHAR VARCHAR VARCHAR VARCHAR INTEGER VARCHAR VARCHAR TIMESTAMP VARCHAR TIMESTAMP VARCHAR
5 java.lang.String java.lang.String java.lang.String java.lang.String java.lang.Integer java.lang.String java.lang.String java.sql.Timestamp java.lang.String java.sql.Timestamp java.lang.String
6 00a8c8d5-41d1-4b3f-823a-970128b407ff MEMBER_TYPE_CD.3 zh_CN 分公司 INPUT test01 2024-06-26 15:41:01.0 test01 2024-06-26 15:41:01.0 _PRIMARY_
86 fb8cd8ed-ac4c-4b06-99cc-1892790edb10 REGISTERED_TYPE.340 zh_CN 外商投资股份有限公司 INPUT test01 2024-06-26 15:10:50.0 test01 2024-06-26 15:10:50.0 _PRIMARY_
87 fbf22958-4ba8-40ad-ba3d-8f4497a6bc3b REGISTERED_TYPE.142 zh_CN 集体联营企业 INPUT test01 2024-06-26 15:06:26.0 test01 2024-06-26 15:06:26.0 _PRIMARY_
88 fd2a254f-a034-467d-a0af-6a55346bbaf4 MEMBER_TYPE_CD.5 zh_CN 其他成员单位 INPUT test01 2024-06-26 15:41:17.0 test01 2024-06-26 15:41:17.0 _PRIMARY_
89 7ffea1cf-bae9-464c-9c34-3e2de5dc26cc FinanceTypeCd.1 zh_CN 年报 INPUT test03 2024-07-02 15:35:03.923 test03 2024-07-02 15:35:03.923 _PRIMARY_
90 5cd7add3-bbe6-434a-bcfd-fbaefe5c97b5 FinanceTypeCd.2 zh_CN 半年报 INPUT test03 2024-07-02 15:35:19.348 test03 2024-07-02 15:35:19.348 _PRIMARY_
91 553562f0-c145-484a-8d24-9a5c5d44bc86 FinanceTypeCd.3 zh_CN 季报 INPUT test03 2024-07-02 15:35:26.517 test03 2024-07-02 15:35:26.517 _PRIMARY_
92 a49c821c-95bf-4ba7-a90a-29bc4850a992 FinanceTypeCd.4 zh_CN 月报 INPUT test03 2024-07-02 15:35:34.228 test03 2024-07-02 15:35:34.228 _PRIMARY_
93 0152e3c9-a527-44b3-8bf0-c332360199c0 FinanceSortTypeCd.1 zh_CN 企业类 INPUT test03 2024-07-02 15:37:18.158 test03 2024-07-02 15:37:18.158 _PRIMARY_
94 ad8fbda0-4356-4ab1-9470-82f3fdd30b04 FinanceSortTypeCd.2 zh_CN 事业类 INPUT test03 2024-07-02 15:37:33.719 test03 2024-07-02 15:37:33.719 _PRIMARY_
95 70ddf130-9a2c-49d2-b3f8-8aa10622b965 FinanceStatusCd.1 zh_CN 未审计 INPUT test03 2024-07-02 15:39:01.284 test03 2024-07-02 15:39:01.284 _PRIMARY_
96 5ea4c973-9d31-42f1-bfd8-3f5630b37d24 FinanceStatusCd.2 zh_CN 已审计 INPUT test03 2024-07-02 15:39:18.34 test03 2024-07-02 15:39:18.34 _PRIMARY_
97 38e7df06-5866-4b6d-9e92-fafc96def444 CaliberCd.1 zh_CN 单一 INPUT test03 2024-07-02 15:40:03.273 test03 2024-07-02 15:40:03.273 _PRIMARY_
98 7e87029c-95e8-4fb8-b9ea-612a768ab94f CaliberCd.2 zh_CN 合并 INPUT test03 2024-07-02 15:40:14.043 test03 2024-07-02 15:40:14.043 _PRIMARY_
99 8a6b689c-bc01-453f-8a8e-03ab80305179 CaliberCd.3 zh_CN 汇总 INPUT test03 2024-07-02 15:40:21.498 test03 2024-07-02 15:40:21.498 _PRIMARY_
100 0c4da92b-85ab-46c2-a59e-2e0e6e8305a9 CurrencyTypeCd.392 zh_CN 日元 INPUT test03 2024-07-02 15:42:43.169 test03 2024-07-02 15:42:43.169 _PRIMARY_
101 cbb43aba-e915-42d2-a8d1-bbe111cc96f2 CurrencyTypeCd.156 zh_CN 人民币 INPUT test03 2024-07-02 15:42:53.489 test03 2024-07-02 15:42:53.489 _PRIMARY_
102 1449e525-b04f-4987-abe3-15396aa8f86d CurrencyTypeCd.344 zh_CN 港币 INPUT test03 2024-07-02 15:43:03.777 test03 2024-07-02 15:43:03.777 _PRIMARY_
103 a9459c6d-dc85-41b3-8b93-1e97dbceff5e CurrencyTypeCd.840 zh_CN 美元 INPUT test03 2024-07-02 15:43:19.053 test03 2024-07-02 15:43:19.053 _PRIMARY_
104 2bcacbd1-2c85-45f8-8635-d7cdfdae274c CurrencyTypeCd.036 zh_CN 澳大利亚元 INPUT test03 2024-07-02 15:48:21.631 test03 2024-07-02 15:48:21.631 _PRIMARY_
105 79d442d8-ffab-4ac6-9506-b8b9fa447a54 CurrencyTypeCd.124 zh_CN 加拿大元 INPUT test03 2024-07-02 15:48:45.405 test03 2024-07-02 15:48:45.405 _PRIMARY_
106 e55d43ce-5592-421f-abd7-fcbc83380b74 CurrencyTypeCd.702 zh_CN 新加坡币 INPUT test03 2024-07-02 15:49:04.395 test03 2024-07-02 15:49:04.395 _PRIMARY_
107 6c447e23-9c5b-4801-806d-364359697e8b CurrencyTypeCd.978 zh_CN 欧元 INPUT test03 2024-07-02 15:49:14.454 test03 2024-07-02 15:49:14.454 _PRIMARY_
108 8048ddda-317d-4d66-9f33-c3f22c7f78a6 CurrencyTypeCd.756 zh_CN 瑞士法郎 INPUT test03 2024-07-02 15:49:27.016 test03 2024-07-02 15:49:27.016 _PRIMARY_
109 f5a0d225-b080-4ff9-963e-93165e68807e CurrencyTypeCd.826 zh_CN 英镑 INPUT test03 2024-07-02 15:49:38.703 test03 2024-07-02 15:49:38.703 _PRIMARY_

6
irbs.cust.rating/src/main/java/irbs/cust/rating/controller/RatingIndexController.java

@ -22,4 +22,10 @@ public class RatingIndexController extends RestCrudController<RatingIndexVo, Rat
public Map<String, Object> getScoreDetail(QueryParameter parameter) throws Exception { public Map<String, Object> getScoreDetail(QueryParameter parameter) throws Exception {
return service.getScoreDetail(parameter); return service.getScoreDetail(parameter);
} }
@RequestMapping(value="getGrayScoreDetail",method= RequestMethod.GET)
@ResponseBody
public Map<String, Object> getGrayScoreDetail(QueryParameter parameter) throws Exception {
return service.getGrayScoreDetail(parameter);
}
} }

123
irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/entity/CompanyRating.java

@ -77,14 +77,26 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
@Column(name="QUAN_SCORE") @Column(name="QUAN_SCORE")
protected BigDecimal quanScore; protected BigDecimal quanScore;
// 定量得分(灰度)
@Column(name="QUAN_SCORE_G")
protected BigDecimal quanScoreGray;
// 定性得分 // 定性得分
@Column(name="QUAL_SCORE") @Column(name="QUAL_SCORE")
protected BigDecimal qualScore; protected BigDecimal qualScore;
// 定性得分(灰度)
@Column(name="QUAL_SCORE_G")
protected BigDecimal qualScoreGray;
// 模型得分 // 模型得分
@Column(name="MODEL_SCORE") @Column(name="MODEL_SCORE")
protected BigDecimal modelScore; protected BigDecimal modelScore;
// 模型得分(灰度)
@Column(name="MODEL_SCORE_G")
protected BigDecimal modelScoreGray;
// 初始级别 // 初始级别
@Column(name="INIT_LEVEL") @Column(name="INIT_LEVEL")
@Size(max=10) @Size(max=10)
@ -95,6 +107,11 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
@Size(max=10) @Size(max=10)
protected String adjLevel; protected String adjLevel;
// 调整项级别(灰度)
@Column(name="ADJ_LEVEL_G")
@Size(max=10)
protected String adjLevelGray;
// 评级推翻级别 // 评级推翻级别
@Column(name="SP_LEVEL") @Column(name="SP_LEVEL")
@Size(max=10) @Size(max=10)
@ -174,6 +191,21 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
@Size(max=100) @Size(max=100)
protected String modelName; protected String modelName;
// 评级模型ID(灰度)
@Column(name="MODEL_ID_G")
@Size(max=50)
protected String modelIdGray;
// 评级模型编号(灰度)
@Column(name="MODEL_CODE_G")
@Size(max=50)
protected String modelCodeGray;
// 评级模型名称(灰度)
@Column(name="MODEL_NAME_G")
@Size(max=100)
protected String modelNameGray;
// 评级配置ID // 评级配置ID
@Column(name="RATING_CFG_ID") @Column(name="RATING_CFG_ID")
@Size(max=50) @Size(max=50)
@ -194,6 +226,11 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
@Size(max=50) @Size(max=50)
protected String modelLevel; protected String modelLevel;
// 模型评级等级(灰度)
@Column(name="MODEL_LEVEL_G")
@Size(max=50)
protected String modelLevelGray;
// 当前评级步骤(页面位置) // 当前评级步骤(页面位置)
@Column(name="CURRENT_STEP") @Column(name="CURRENT_STEP")
@Size(max=50) @Size(max=50)
@ -213,6 +250,11 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
@Size(max=10) @Size(max=10)
protected String accessLevel; protected String accessLevel;
// 准入级别(灰度)
@Column(name="ACCESS_LEVEL_G")
@Size(max=10)
protected String accessLevelGray;
// 违约标识 // 违约标识
@Column(name="DEFAULT_IND") @Column(name="DEFAULT_IND")
@Size(max=10) @Size(max=10)
@ -272,10 +314,14 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
vo.setManagerOrgName(this.getManagerOrgName()); vo.setManagerOrgName(this.getManagerOrgName());
vo.setLaunchUser(this.getLaunchUser()); vo.setLaunchUser(this.getLaunchUser());
vo.setQuanScore(this.getQuanScore()); vo.setQuanScore(this.getQuanScore());
vo.setQuanScoreGray(this.getQuanScoreGray());
vo.setQualScore(this.getQualScore()); vo.setQualScore(this.getQualScore());
vo.setQualScoreGray(this.getQualScoreGray());
vo.setModelScore(this.getModelScore()); vo.setModelScore(this.getModelScore());
vo.setModelScoreGray(this.getModelScoreGray());
vo.setInitLevel(this.getInitLevel()); vo.setInitLevel(this.getInitLevel());
vo.setAdjLevel(this.getAdjLevel()); vo.setAdjLevel(this.getAdjLevel());
vo.setAdjLevelGray(this.getAdjLevelGray());
vo.setSpLevel(this.getSpLevel()); vo.setSpLevel(this.getSpLevel());
vo.setFinalLevel(this.getFinalLevel()); vo.setFinalLevel(this.getFinalLevel());
vo.setPd(this.getPd()); vo.setPd(this.getPd());
@ -292,14 +338,19 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
vo.setModelId(this.getModelId()); vo.setModelId(this.getModelId());
vo.setModelCode(this.getModelCode()); vo.setModelCode(this.getModelCode());
vo.setModelName(this.getModelName()); vo.setModelName(this.getModelName());
vo.setModelIdGray(this.getModelIdGray());
vo.setModelCodeGray(this.getModelCodeGray());
vo.setModelNameGray(this.getModelNameGray());
vo.setRatingCfgId(this.getRatingCfgId()); vo.setRatingCfgId(this.getRatingCfgId());
vo.setIsAdmit(this.getIsAdmit()); vo.setIsAdmit(this.getIsAdmit());
vo.setIsTrial(this.getIsTrial()); vo.setIsTrial(this.getIsTrial());
vo.setModelLevel(this.getModelLevel()); vo.setModelLevel(this.getModelLevel());
vo.setModelLevelGray(this.getModelLevelGray());
vo.setCurrentStep(this.getCurrentStep()); vo.setCurrentStep(this.getCurrentStep());
vo.setOverNum(this.getOverNum()); vo.setOverNum(this.getOverNum());
vo.setOutImageId(this.getOutImageId()); vo.setOutImageId(this.getOutImageId());
vo.setAccessLevel(this.getAccessLevel()); vo.setAccessLevel(this.getAccessLevel());
vo.setAccessLevelGray(this.getAccessLevelGray());
vo.setDefaultInd(this.getDefaultInd()); vo.setDefaultInd(this.getDefaultInd());
vo.setQualCalcCount(this.getQualCalcCount()); vo.setQualCalcCount(this.getQualCalcCount());
vo.setPwhCommitteeNum(this.getPwhCommitteeNum()); vo.setPwhCommitteeNum(this.getPwhCommitteeNum());
@ -562,6 +613,30 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
this.modelName = modelName; this.modelName = modelName;
} }
public String getModelIdGray() {
return modelIdGray;
}
public void setModelIdGray(String modelIdGray) {
this.modelIdGray = modelIdGray;
}
public String getModelCodeGray() {
return modelCodeGray;
}
public void setModelCodeGray(String modelCodeGray) {
this.modelCodeGray = modelCodeGray;
}
public String getModelNameGray() {
return modelNameGray;
}
public void setModelNameGray(String modelNameGray) {
this.modelNameGray = modelNameGray;
}
public String getRatingCfgId() { public String getRatingCfgId() {
return ratingCfgId; return ratingCfgId;
} }
@ -713,4 +788,52 @@ public class CompanyRating extends CorporationAuditorEntity<CompanyRatingVo> {
public void setCurrentAssignee(String currentAssignee) { public void setCurrentAssignee(String currentAssignee) {
this.currentAssignee = currentAssignee; this.currentAssignee = currentAssignee;
} }
public BigDecimal getQuanScoreGray() {
return quanScoreGray;
}
public void setQuanScoreGray(BigDecimal quanScoreGray) {
this.quanScoreGray = quanScoreGray;
}
public BigDecimal getQualScoreGray() {
return qualScoreGray;
}
public void setQualScoreGray(BigDecimal qualScoreGray) {
this.qualScoreGray = qualScoreGray;
}
public BigDecimal getModelScoreGray() {
return modelScoreGray;
}
public void setModelScoreGray(BigDecimal modelScoreGray) {
this.modelScoreGray = modelScoreGray;
}
public String getModelLevelGray() {
return modelLevelGray;
}
public void setModelLevelGray(String modelLevelGray) {
this.modelLevelGray = modelLevelGray;
}
public String getAccessLevelGray() {
return accessLevelGray;
}
public void setAccessLevelGray(String accessLevelGray) {
this.accessLevelGray = accessLevelGray;
}
public String getAdjLevelGray() {
return adjLevelGray;
}
public void setAdjLevelGray(String adjLevelGray) {
this.adjLevelGray = adjLevelGray;
}
} }

14
irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/entity/RatingIndex.java

@ -85,6 +85,10 @@ public class RatingIndex extends CorporationAuditorEntity<RatingIndexVo> {
@Column(name="INDEX_SCORE") @Column(name="INDEX_SCORE")
protected BigDecimal indexScore; protected BigDecimal indexScore;
// 指标得分(灰度)
@Column(name="INDEX_SCORE_G")
protected BigDecimal indexScoreGray;
@Transient @Transient
protected List<RatingSelectValuesConfig> options; protected List<RatingSelectValuesConfig> options;
@ -118,6 +122,7 @@ public class RatingIndex extends CorporationAuditorEntity<RatingIndexVo> {
index.setQualitativeContent(rs.getString("QUALITATIVE_CONTENT")); index.setQualitativeContent(rs.getString("QUALITATIVE_CONTENT"));
index.setQualitativeOptions(rs.getString("QUALITATIVE_OPTIONS")); index.setQualitativeOptions(rs.getString("QUALITATIVE_OPTIONS"));
index.setIndexScore(rs.getBigDecimal("INDEX_SCORE")); index.setIndexScore(rs.getBigDecimal("INDEX_SCORE"));
index.setIndexScoreGray(rs.getBigDecimal("INDEX_SCORE_G"));
return index; return index;
} }
} }
@ -141,6 +146,7 @@ public class RatingIndex extends CorporationAuditorEntity<RatingIndexVo> {
vo.setQualitativeContent(this.getQualitativeContent()); vo.setQualitativeContent(this.getQualitativeContent());
vo.setQualitativeOptions(this.getQualitativeOptions()); vo.setQualitativeOptions(this.getQualitativeOptions());
vo.setIndexScore(this.getIndexScore()); vo.setIndexScore(this.getIndexScore());
vo.setIndexScoreGray(this.getIndexScoreGray());
vo.setOptions(this.getOptions()); vo.setOptions(this.getOptions());
return vo; return vo;
} }
@ -265,6 +271,14 @@ public class RatingIndex extends CorporationAuditorEntity<RatingIndexVo> {
this.indexScore = indexScore; this.indexScore = indexScore;
} }
public BigDecimal getIndexScoreGray() {
return indexScoreGray;
}
public void setIndexScoreGray(BigDecimal indexScoreGray) {
this.indexScoreGray = indexScoreGray;
}
public List<RatingSelectValuesConfig> getOptions() { public List<RatingSelectValuesConfig> getOptions() {
return options; return options;
} }

104
irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/vo/CompanyRatingVo.java

@ -4,6 +4,8 @@ import io.sc.platform.orm.api.vo.CorporationAuditorVo;
import irbs.cust.rating.jpa.entity.RatingIndex; import irbs.cust.rating.jpa.entity.RatingIndex;
import irbs.cust.rating.jpa.entity.RatingOverturn; import irbs.cust.rating.jpa.entity.RatingOverturn;
import javax.persistence.Column;
import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -43,18 +45,31 @@ public class CompanyRatingVo extends CorporationAuditorVo {
// 定量得分 // 定量得分
private BigDecimal quanScore; private BigDecimal quanScore;
// 定量得分(灰度)
private BigDecimal quanScoreGray;
// 定性得分 // 定性得分
private BigDecimal qualScore; private BigDecimal qualScore;
// 定性得分(灰度)
private BigDecimal qualScoreGray;
// 模型得分 // 模型得分
private BigDecimal modelScore; private BigDecimal modelScore;
// 模型得分(灰度)
private BigDecimal modelScoreGray;
// 初始级别 // 初始级别
private String initLevel; private String initLevel;
// 调整项级别 // 调整项级别
private String adjLevel; private String adjLevel;
// 调整项级别(灰度)
private String adjLevelGray;
// 评级推翻级别 // 评级推翻级别
private String spLevel; private String spLevel;
@ -103,6 +118,15 @@ public class CompanyRatingVo extends CorporationAuditorVo {
// 评级模型名称 // 评级模型名称
private String modelName; private String modelName;
// 评级模型ID(灰度)
private String modelIdGray;
// 评级模型编号(灰度)
private String modelCodeGray;
// 评级模型名称(灰度)
private String modelNameGray;
// 评级配置ID // 评级配置ID
private String ratingCfgId; private String ratingCfgId;
@ -115,6 +139,9 @@ public class CompanyRatingVo extends CorporationAuditorVo {
// 模型评级等级 // 模型评级等级
private String modelLevel; private String modelLevel;
// 模型评级等级(灰度)
private String modelLevelGray;
// 当前评级步骤(页面位置) // 当前评级步骤(页面位置)
private String currentStep; private String currentStep;
@ -124,9 +151,12 @@ public class CompanyRatingVo extends CorporationAuditorVo {
// 外部数据授权标志 // 外部数据授权标志
private String outImageId; private String outImageId;
// 准入级别 // 准入级别(灰度)
private String accessLevel; private String accessLevel;
// 准入级别(灰度)
private String accessLevelGray;
// 违约标识 // 违约标识
private String defaultInd; private String defaultInd;
@ -404,6 +434,30 @@ public class CompanyRatingVo extends CorporationAuditorVo {
this.modelName = modelName; this.modelName = modelName;
} }
public String getModelIdGray() {
return modelIdGray;
}
public void setModelIdGray(String modelIdGray) {
this.modelIdGray = modelIdGray;
}
public String getModelCodeGray() {
return modelCodeGray;
}
public void setModelCodeGray(String modelCodeGray) {
this.modelCodeGray = modelCodeGray;
}
public String getModelNameGray() {
return modelNameGray;
}
public void setModelNameGray(String modelNameGray) {
this.modelNameGray = modelNameGray;
}
public String getRatingCfgId() { public String getRatingCfgId() {
return ratingCfgId; return ratingCfgId;
} }
@ -555,4 +609,52 @@ public class CompanyRatingVo extends CorporationAuditorVo {
public void setCurrentAssignee(String currentAssignee) { public void setCurrentAssignee(String currentAssignee) {
this.currentAssignee = currentAssignee; this.currentAssignee = currentAssignee;
} }
public BigDecimal getQuanScoreGray() {
return quanScoreGray;
}
public void setQuanScoreGray(BigDecimal quanScoreGray) {
this.quanScoreGray = quanScoreGray;
}
public BigDecimal getQualScoreGray() {
return qualScoreGray;
}
public void setQualScoreGray(BigDecimal qualScoreGray) {
this.qualScoreGray = qualScoreGray;
}
public BigDecimal getModelScoreGray() {
return modelScoreGray;
}
public void setModelScoreGray(BigDecimal modelScoreGray) {
this.modelScoreGray = modelScoreGray;
}
public String getModelLevelGray() {
return modelLevelGray;
}
public void setModelLevelGray(String modelLevelGray) {
this.modelLevelGray = modelLevelGray;
}
public String getAccessLevelGray() {
return accessLevelGray;
}
public void setAccessLevelGray(String accessLevelGray) {
this.accessLevelGray = accessLevelGray;
}
public String getAdjLevelGray() {
return adjLevelGray;
}
public void setAdjLevelGray(String adjLevelGray) {
this.adjLevelGray = adjLevelGray;
}
} }

12
irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/vo/RatingIndexVo.java

@ -3,6 +3,7 @@ package irbs.cust.rating.jpa.vo;
import io.sc.platform.orm.api.vo.CorporationAuditorVo; import io.sc.platform.orm.api.vo.CorporationAuditorVo;
import irbs.cust.rating.jpa.entity.RatingSelectValuesConfig; import irbs.cust.rating.jpa.entity.RatingSelectValuesConfig;
import javax.persistence.Column;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -53,6 +54,9 @@ public class RatingIndexVo extends CorporationAuditorVo {
// 指标得分 // 指标得分
private BigDecimal indexScore; private BigDecimal indexScore;
// 指标得分(灰度)
private BigDecimal indexScoreGray;
private List<RatingSelectValuesConfig> options; private List<RatingSelectValuesConfig> options;
public String getId() { public String getId() {
@ -175,6 +179,14 @@ public class RatingIndexVo extends CorporationAuditorVo {
this.indexScore = indexScore; this.indexScore = indexScore;
} }
public BigDecimal getIndexScoreGray() {
return indexScoreGray;
}
public void setIndexScoreGray(BigDecimal indexScoreGray) {
this.indexScoreGray = indexScoreGray;
}
public List<RatingSelectValuesConfig> getOptions() { public List<RatingSelectValuesConfig> getOptions() {
return options; return options;
} }

4
irbs.cust.rating/src/main/java/irbs/cust/rating/service/ModelLibService.java

@ -5,9 +5,9 @@ import irbs.cust.rating.jpa.entity.RatingCompanyCustomer;
public interface ModelLibService { public interface ModelLibService {
String getModelCode(RatingCompanyCustomer ratingCustomer) throws Exception; String getModelCode(RatingCompanyCustomer ratingCustomer,Boolean grayFlag) throws Exception;
ModelResource getModelResource(RatingCompanyCustomer ratingCompanyCustomer) throws Exception; ModelResource getModelResource(RatingCompanyCustomer ratingCompanyCustomer, Boolean grayFlag) throws Exception;
ModelResource getModelResource(String modelCode) throws Exception; ModelResource getModelResource(String modelCode) throws Exception;

1
irbs.cust.rating/src/main/java/irbs/cust/rating/service/RatingIndexService.java

@ -33,4 +33,5 @@ public interface RatingIndexService extends DaoService<RatingIndex, String, Rati
CompanyRating calculateModel(CompanyRating rating) throws Exception; CompanyRating calculateModel(CompanyRating rating) throws Exception;
public Map<String, Object> getScoreDetail(QueryParameter parameter) throws Exception; public Map<String, Object> getScoreDetail(QueryParameter parameter) throws Exception;
public Map<String, Object> getGrayScoreDetail(QueryParameter parameter) throws Exception;
} }

2
irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingProcessServiceImpl.java

@ -73,6 +73,8 @@ public class CompanyRatingProcessServiceImpl implements CompanyRatingProcessServ
transientVariables.put("submit", 1); transientVariables.put("submit", 1);
transientVariables.remove("goback"); transientVariables.remove("goback");
flag = true; flag = true;
} else {
transientVariables.put("submit", -999);
} }
processOperationService.completeTask(taskId, processProperties.getVariables(), transientVariables); processOperationService.completeTask(taskId, processProperties.getVariables(), transientVariables);

41
irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingServiceImpl.java

@ -1,5 +1,6 @@
package irbs.cust.rating.service.impl; package irbs.cust.rating.service.impl;
import io.sc.engine.rule.core.code.impl.support.ResourceResult;
import io.sc.engine.rule.core.po.resource.ModelResource; import io.sc.engine.rule.core.po.resource.ModelResource;
import io.sc.platform.core.util.StringUtil; import io.sc.platform.core.util.StringUtil;
import io.sc.platform.flowable.support.ProcessTaskWrapper; import io.sc.platform.flowable.support.ProcessTaskWrapper;
@ -133,7 +134,17 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
if(customer == null) { if(customer == null) {
customer = ratingCompanyCustomerService.findById(companyRating.getCustId()); customer = ratingCompanyCustomerService.findById(companyRating.getCustId());
} }
String modelCode = modelLibService.getModelCode(customer); String modelCode = modelLibService.getModelCode(customer, false);
// TODO 20240701 灰度模型
String grayModelEnable = systemParameterService.getParameter("parameter.irbs.params.gm.enable");
if ("1".equals(grayModelEnable)) {
String grayModelCode = modelLibService.getModelCode(customer, true);
ModelResource modelResource = modelLibService.getModelResource(grayModelCode);
companyRating.setModelIdGray(modelResource.getId());
companyRating.setModelCodeGray(modelResource.getCode());
companyRating.setModelNameGray(modelResource.getName());
}
// 生成步骤 // 生成步骤
ratingStepService.genAndSaveRatingSteps(companyRating); ratingStepService.genAndSaveRatingSteps(companyRating);
@ -181,7 +192,7 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
if(customer == null) { if(customer == null) {
customer = ratingCompanyCustomerService.findById(rating.getCustId()); customer = ratingCompanyCustomerService.findById(rating.getCustId());
} }
String modelCode = modelLibService.getModelCode(customer); String modelCode = modelLibService.getModelCode(customer, false);
// 生成步骤 // 生成步骤
ratingStepService.genAndSaveRatingSteps(rating); ratingStepService.genAndSaveRatingSteps(rating);
@ -260,7 +271,7 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
// 计算财报指标 // 计算财报指标
financeReportIndexService.calculateFinanceIndex(ratingCustomer); financeReportIndexService.calculateFinanceIndex(ratingCustomer);
// 获取模型资源 // 获取模型资源
ModelResource modelResource = modelCode==null?modelLibService.getModelResource(ratingCustomer):modelLibService.getModelResource(modelCode); ModelResource modelResource = modelCode==null?modelLibService.getModelResource(ratingCustomer, false):modelLibService.getModelResource(modelCode);
// 初始化评级步骤指标、调整项 // 初始化评级步骤指标、调整项
ratingStepService.genAndSaveStepIndices(companyRating, modelResource); ratingStepService.genAndSaveStepIndices(companyRating, modelResource);
// 启动流程 // 启动流程
@ -462,11 +473,17 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
RatingStep step = ratingStepService.findById(indices.get(0).getStepId()); RatingStep step = ratingStepService.findById(indices.get(0).getStepId());
CompanyRating rating = this.findById(step.getRatingId()); CompanyRating rating = this.findById(step.getRatingId());
ratingIndexService.getRepository().saveAll(indices); ratingIndexService.getRepository().saveAll(indices);
calcAdj(rating, indices); calcAdj(rating, indices, false);
// TODO 灰度
String grayModelEnable = systemParameterService.getParameter("parameter.irbs.params.gm.enable");
if ("1".equals(grayModelEnable)) {
calcAdj(rating, indices, true);
}
} }
private void calcAdj(CompanyRating rating, List<RatingIndex> indices){ private void calcAdj(CompanyRating rating, List<RatingIndex> indices, Boolean grayFlag){
int now = RatingLevelEnum.getLevel(rating.getModelLevel()); int now = RatingLevelEnum.getLevel(grayFlag ? rating.getModelLevelGray() : rating.getModelLevel());
int val = 0; int val = 0;
for(RatingIndex index:indices){ for(RatingIndex index:indices){
if(Integer.parseInt(index.getIndexValue())==999){ if(Integer.parseInt(index.getIndexValue())==999){
@ -477,9 +494,17 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
} }
int end = now + val; int end = now + val;
if(end>=RatingLevelEnum.D.getLevel()){ if(end>=RatingLevelEnum.D.getLevel()){
rating.setAdjLevel(RatingLevelEnum.C.getName()); if (grayFlag) {
rating.setAdjLevelGray(RatingLevelEnum.C.getName());
} else {
rating.setAdjLevel(RatingLevelEnum.C.getName());
}
}else{ }else{
rating.setAdjLevel(RatingLevelEnum.getName(end)); if (grayFlag) {
rating.setAdjLevelGray(RatingLevelEnum.getName(end));
} else {
rating.setAdjLevel(RatingLevelEnum.getName(end));
}
} }
getRepository().save(rating); getRepository().save(rating);
} }

15
irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/ModelLibServiceImpl.java

@ -38,7 +38,7 @@ public class ModelLibServiceImpl implements ModelLibService {
private SystemParameterService systemParameterService; private SystemParameterService systemParameterService;
@Override @Override
public String getModelCode(RatingCompanyCustomer ratingCustomer) throws Exception { public String getModelCode(RatingCompanyCustomer ratingCustomer, Boolean grayFlag) throws Exception {
//组装模型所需参数 //组装模型所需参数
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
//融资平台标志 //融资平台标志
@ -71,7 +71,14 @@ public class ModelLibServiceImpl implements ModelLibService {
// LoaderMode loaderMode = LoaderMode.valueOf(parameterMap.get("parameter.re.client.loaderMode")); // LoaderMode loaderMode = LoaderMode.valueOf(parameterMap.get("parameter.re.client.loaderMode"));
// String remoteApiUrl = parameterMap.get("parameter.re.client.remoteApiUrl"); // String remoteApiUrl = parameterMap.get("parameter.re.client.remoteApiUrl");
Executor executor = executorFactoryService.getExecutor(); Executor executor = executorFactoryService.getExecutor();
result = executor.executeByCode("M_Selector",null, params);
// TODO 灰度模型
if (grayFlag) {
String grayModelCode = systemParameterService.getParameter("parameter.irbs.params.gm.code");
result = executor.executeByCode(grayModelCode,null, params);
} else {
result = executor.executeByCode("M_Selector",null, params);
}
} catch (Exception e) { } catch (Exception e) {
System.out.println(e); System.out.println(e);
throw new Exception("调用评级模型选择计算出错," + e.getMessage()); throw new Exception("调用评级模型选择计算出错," + e.getMessage());
@ -92,8 +99,8 @@ public class ModelLibServiceImpl implements ModelLibService {
} }
@Override @Override
public ModelResource getModelResource(RatingCompanyCustomer ratingCompanyCustomer) throws Exception { public ModelResource getModelResource(RatingCompanyCustomer ratingCompanyCustomer, Boolean grayFlag) throws Exception {
String modelCode = getModelCode(ratingCompanyCustomer); String modelCode = getModelCode(ratingCompanyCustomer, grayFlag);
return getModelResource(modelCode); return getModelResource(modelCode);
} }

85
irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/RatingIndexServiceImpl.java

@ -253,22 +253,41 @@ public class RatingIndexServiceImpl extends DaoServiceImpl<RatingIndex, String,
// 调用模型引擎 // 调用模型引擎
Executor executor = executorFactoryService.getExecutor(); Executor executor = executorFactoryService.getExecutor();
ResourceResult result = executor.executeById(rating.getModelId(), ModelParamCode.DL.getCode(), kiMap); ResourceResult result = executor.executeById(rating.getModelId(), ModelParamCode.DL.getCode(), kiMap);
indexResultHandler(result, ratingIndexs, rating, false);
// TODO 灰度
String grayModelEnable = systemParameterService.getParameter("parameter.irbs.params.gm.enable");
if ("1".equals(grayModelEnable)) {
ResourceResult grayResult = executor.executeById(rating.getModelIdGray(), ModelParamCode.DL.getCode(), kiMap);
indexResultHandler(grayResult, ratingIndexs, rating, true);
}
getRepository().saveAll(ratingIndexs);
return rating;
}
public void indexResultHandler(ResourceResult result, List<RatingIndex> ratingIndexs, CompanyRating rating, Boolean grayFlag) throws Exception {
if(result != null && null!=result.getData() && result.getData().size() >0 && null!=ratingIndexs && ratingIndexs.size() >0) { if(result != null && null!=result.getData() && result.getData().size() >0 && null!=ratingIndexs && ratingIndexs.size() >0) {
List<ParameterResult> results = result.getData(); List<ParameterResult> results = result.getData();
for (ParameterResult parameterResult : results) { for (ParameterResult parameterResult : results) {
String code = parameterResult.getCode(); String code = parameterResult.getCode();
for(RatingIndex index:ratingIndexs){ for(RatingIndex index:ratingIndexs){
if(code.contains(index.getIndexCode())){ if(code.contains(index.getIndexCode())){
index.setIndexScore(CommonUtils.getBigDecimal(parameterResult.getValue())); if (grayFlag) {
index.setIndexScoreGray(CommonUtils.getBigDecimal(parameterResult.getValue()));
} else {
index.setIndexScore(CommonUtils.getBigDecimal(parameterResult.getValue()));
}
} }
} }
if(ModelReturnCode.DL_SCORE.getCode().equals(parameterResult.getCode())) { if(ModelReturnCode.DL_SCORE.getCode().equals(parameterResult.getCode())) {
rating.setQuanScore(CommonUtils.getBigDecimal(parameterResult.getValue())); if (grayFlag) {
rating.setQuanScoreGray(CommonUtils.getBigDecimal(parameterResult.getValue()));
} else {
rating.setQuanScore(CommonUtils.getBigDecimal(parameterResult.getValue()));
}
} }
} }
getRepository().saveAll(ratingIndexs);
} }
return rating;
} }
private void dealReportAndCreditIsNull(RatingCompanyCustomer customer, List<RatingIndex> ratingIndices) { private void dealReportAndCreditIsNull(RatingCompanyCustomer customer, List<RatingIndex> ratingIndices) {
@ -346,31 +365,63 @@ public class RatingIndexServiceImpl extends DaoServiceImpl<RatingIndex, String,
// 调用模型引擎 // 调用模型引擎
Executor executor = executorFactoryService.getExecutor(); Executor executor = executorFactoryService.getExecutor();
ResourceResult result = executor.executeById(rating.getModelId(),kiMap); ResourceResult result = executor.executeById(rating.getModelId(),kiMap);
qualIndexResultHandler(result, qualIndexs, rating, false);
// TODO 灰度
String grayModelEnable = systemParameterService.getParameter("parameter.irbs.params.gm.enable");
if ("1".equals(grayModelEnable)) {
ResourceResult grayResult = executor.executeById(rating.getModelIdGray(),kiMap);
qualIndexResultHandler(grayResult, qualIndexs, rating, true);
}
getRepository().saveAll(qualIndexs);
return rating;
}
public void qualIndexResultHandler(ResourceResult result, List<RatingIndex> qualIndexs, CompanyRating rating, Boolean grayFlag) throws Exception {
if(result != null && null!=result.getData() && result.getData().size() >0) { if(result != null && null!=result.getData() && result.getData().size() >0) {
List<ParameterResult> results = result.getData(); List<ParameterResult> results = result.getData();
for (ParameterResult parameterResult : results) { for (ParameterResult parameterResult : results) {
String code = parameterResult.getCode(); String code = parameterResult.getCode();
for(RatingIndex index:qualIndexs){ for(RatingIndex index:qualIndexs){
if(code.contains(index.getIndexCode())){ if(code.contains(index.getIndexCode())){
index.setIndexScore(CommonUtils.getBigDecimal(parameterResult.getValue())); if (grayFlag) {
index.setIndexScoreGray(CommonUtils.getBigDecimal(parameterResult.getValue()));
} else {
index.setIndexScore(CommonUtils.getBigDecimal(parameterResult.getValue()));
}
} }
} }
if(ModelReturnCode.DX_SCORE.getCode().equals(parameterResult.getCode())) { if(ModelReturnCode.DX_SCORE.getCode().equals(parameterResult.getCode())) {
rating.setQualScore(CommonUtils.getBigDecimal(parameterResult.getValue())); if (grayFlag) {
rating.setQualScoreGray(CommonUtils.getBigDecimal(parameterResult.getValue()));
} else {
rating.setQualScore(CommonUtils.getBigDecimal(parameterResult.getValue()));
}
} }
if(ModelReturnCode.SCORE.getCode().equals(parameterResult.getCode())) { if(ModelReturnCode.SCORE.getCode().equals(parameterResult.getCode())) {
rating.setModelScore(CommonUtils.getBigDecimal(parameterResult.getValue())); if (grayFlag) {
rating.setModelScoreGray(CommonUtils.getBigDecimal(parameterResult.getValue()));
} else {
rating.setModelScore(CommonUtils.getBigDecimal(parameterResult.getValue()));
}
} }
if(ModelReturnCode.GRADE.getCode().equals(parameterResult.getCode())){ if(ModelReturnCode.GRADE.getCode().equals(parameterResult.getCode())){
rating.setModelLevel(parameterResult.getValue()); if (grayFlag) {
rating.setModelLevelGray(parameterResult.getValue());
} else {
rating.setModelLevel(parameterResult.getValue());
}
} }
if(ModelReturnCode.ACCESS_LEVEL.getCode().equals(parameterResult.getCode())){ if(ModelReturnCode.ACCESS_LEVEL.getCode().equals(parameterResult.getCode())){
rating.setAccessLevel(parameterResult.getValue()); if (grayFlag) {
rating.setAccessLevelGray(parameterResult.getValue());
} else {
rating.setAccessLevel(parameterResult.getValue());
}
} }
} }
getRepository().saveAll(qualIndexs);
} }
return rating;
} }
@Override @Override
@ -384,4 +435,16 @@ public class RatingIndexServiceImpl extends DaoServiceImpl<RatingIndex, String,
fieldTypeMap.put("RATING_ID", java.lang.String.class); fieldTypeMap.put("RATING_ID", java.lang.String.class);
return jdbcTemplateService.listBySql(parameter, sql.toString(), fieldTypeMap); return jdbcTemplateService.listBySql(parameter, sql.toString(), fieldTypeMap);
} }
@Override
public Map<String, Object> getGrayScoreDetail(QueryParameter parameter) throws Exception {
StringBuffer sql = new StringBuffer("SELECT I.INDEX_TYPE,I.PARENT_ID,I.INDEX_CATEGORY,I.INDEX_ID,INDEX_NAME,INDEX_CODE,INDEX_VALUE,INDEX_SCORE_G,CV.TEXT ");
sql.append("FROM NS_RATING_INDEXES I ");
sql.append("JOIN NS_RATING_STEP S ON I.STEP_ID = S.ID_ ");
sql.append("JOIN NS_COMPANY_RATING R ON S.RATING_ID = R.ID_ ");
sql.append("LEFT JOIN NS_R_CFG_VALUES CV ON I.CONFIG_ID = CV.DEF_ID AND I.INDEX_VALUE = CV.DIS_VAL ");
Map<String, Class<?>> fieldTypeMap = new HashMap<>();
fieldTypeMap.put("RATING_ID", java.lang.String.class);
return jdbcTemplateService.listBySql(parameter, sql.toString(), fieldTypeMap);
}
} }

10
irbs.cust.rating/src/main/resources/liquibase/20240321_CUST_RATING_DDL.xml

@ -62,6 +62,15 @@
<column name="CORP_CODE_" type="java.sql.Types.NVARCHAR(255)" remarks="所属法人代码" defaultValue="_PRIMARY_"> <column name="CORP_CODE_" type="java.sql.Types.NVARCHAR(255)" remarks="所属法人代码" defaultValue="_PRIMARY_">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="MODEL_ID_G" type="java.sql.Types.NVARCHAR(50)" remarks="评级模型ID(灰度)"></column>
<column name="MODEL_CODE_G" type="java.sql.Types.NVARCHAR(50)" remarks="评级模型编号(灰度)"></column>
<column name="MODEL_NAME_G" type="java.sql.Types.NVARCHAR(100)" remarks="评级模型名称(灰度)"></column>
<column name="QUAN_SCORE_G" type="java.sql.Types.NUMERIC(24, 8)" remarks="定量得分(灰度)"></column>
<column name="QUAL_SCORE_G" type="java.sql.Types.NUMERIC(24, 8)" remarks="定性得分(灰度)"></column>
<column name="MODEL_SCORE_G" type="java.sql.Types.NUMERIC(24, 8)" remarks="模型得分(灰度)"></column>
<column name="MODEL_LEVEL_G" type="java.sql.Types.NVARCHAR(50)" remarks="模型评级等级(灰度)"></column>
<column name="ACCESS_LEVEL_G" type="java.sql.Types.NVARCHAR(10)" remarks="准入级别(灰度)"></column>
<column name="ADJ_LEVEL_G" type="java.sql.Types.NVARCHAR(10)" remarks="调整项级别(灰度)"></column>
</createTable> </createTable>
<!-- ESB客户基本信息表 --> <!-- ESB客户基本信息表 -->
@ -221,6 +230,7 @@
<column name="CORP_CODE_" type="java.sql.Types.NVARCHAR(255)" remarks="所属法人代码" defaultValue="_PRIMARY_"> <column name="CORP_CODE_" type="java.sql.Types.NVARCHAR(255)" remarks="所属法人代码" defaultValue="_PRIMARY_">
<constraints nullable="false"/> <constraints nullable="false"/>
</column> </column>
<column name="INDEX_SCORE_G" type="java.sql.Types.NUMERIC(20, 4)" remarks="指标得分(灰度)"/>
</createTable> </createTable>
<!-- 评级配置_候选值定义 --> <!-- 评级配置_候选值定义 -->

69
irbs.frontend/src/views/IrbsHome.vue

@ -89,7 +89,7 @@
</div> </div>
<div class="flex" style="height: calc(100% - 162px)"> <div class="flex" style="height: calc(100% - 162px)">
<div class="flex-none p-1.5 min-w-[300px] w-[800px] h-full"> <div class="grow p-1.5 min-w-[300px] w-[800px] max-w-[800px] h-full">
<q-card flat bordered class="h-full"> <q-card flat bordered class="h-full">
<q-card-section class="w-full h-full p-0"> <q-card-section class="w-full h-full p-0">
<q-splitter v-model="state.splitterModel" unit="px" horizontal disable class="w-full h-full"> <q-splitter v-model="state.splitterModel" unit="px" horizontal disable class="w-full h-full">
@ -174,8 +174,67 @@
></w-echarts> ></w-echarts>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="pjfb" class="h-full"> <q-tab-panel name="pjfb" class="w-full h-full p-0">
<div></div> <w-echarts
:option="{
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow',
},
},
grid: {
top: '15%',
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
dataZoom: [
{
type: 'slider',
show: true, //
borderColor: '#e3e3e3', //
showDetail: false, // detail
startValue: 0, //
endValue: 8, //
filterMode: 'empty',
width: '80%', //
height: 8, //
left: 'center', //
zoomLoxk: true, //
handleSize: 0, //
bottom: 0, //
},
{
type: 'inside',
zoomOnMouseWheel: false, //
moveOnMouseMove: true, //
moveOnMouseWheel: true, //
},
],
xAxis: {
type: 'category',
data: state.ckXAxisData,
axisTick: {
alignWithLabel: true,
},
},
yAxis: [
{
type: 'value',
},
],
series: [
{
name: '数量',
type: 'bar',
barWidth: '20%',
data: state.ckYAxisData,
},
],
}"
></w-echarts>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="wyqs" class="h-full"></q-tab-panel> <q-tab-panel name="wyqs" class="h-full"></q-tab-panel>
@ -185,7 +244,7 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>
<div class="grow p-1.5 min-w-[300px] h-full"> <div class="grow p-1.5 h-full">
<q-card flat bordered class="h-full"> <q-card flat bordered class="h-full">
<q-card-section class="w-full h-full p-0"> <q-card-section class="w-full h-full p-0">
<q-splitter v-model="state.splitterModel" unit="px" horizontal disable class="w-full h-full"> <q-splitter v-model="state.splitterModel" unit="px" horizontal disable class="w-full h-full">
@ -244,6 +303,8 @@ const state = reactive({
splitterModel: 50, splitterModel: 50,
ckXAxisData: [], ckXAxisData: [],
ckYAxisData: [], ckYAxisData: [],
pjXAxisData: [],
pjYAxisData: [],
}); });
const getRatingModelExposure = () => { const getRatingModelExposure = () => {

20
irbs.frontend/src/views/custRating/CustRating.ts

@ -2,16 +2,16 @@
* *
*/ */
export const RatingLevelOptions = [ export const RatingLevelOptions = [
{ label: 'AAA', value: 'AAA', numberValue: 10 }, { label: 'AAA', value: 'AAA', numberValue: 10, color: 'light-blue' },
{ label: 'AA', value: 'AA', numberValue: 9 }, { label: 'AA', value: 'AA', numberValue: 9, color: 'light-blue' },
{ label: 'A', value: 'A', numberValue: 8 }, { label: 'A', value: 'A', numberValue: 8, color: 'green' },
{ label: 'BBB', value: 'BBB', numberValue: 7 }, { label: 'BBB', value: 'BBB', numberValue: 7, color: 'green' },
{ label: 'BB', value: 'BB', numberValue: 6 }, { label: 'BB', value: 'BB', numberValue: 6, color: 'green' },
{ label: 'B', value: 'B', numberValue: 5 }, { label: 'B', value: 'B', numberValue: 5, color: 'red' },
{ label: 'CCC', value: 'CCC', numberValue: 4 }, { label: 'CCC', value: 'CCC', numberValue: 4, color: 'red' },
{ label: 'CC', value: 'CC', numberValue: 3 }, { label: 'CC', value: 'CC', numberValue: 3, color: 'red' },
{ label: 'C', value: 'C', numberValue: 2 }, { label: 'C', value: 'C', numberValue: 2, color: 'red' },
{ label: 'D', value: 'D', numberValue: 1 }, { label: 'D', value: 'D', numberValue: 1, color: 'red' },
]; ];
/** /**

49
irbs.frontend/src/views/custRating/CustRating.vue

@ -16,25 +16,29 @@
operator: 'equals', operator: 'equals',
value: 'INDEPENDENT', value: 'INDEPENDENT',
}" }"
:sort-by="['-lastModifyDate']" :sort-by="['-createDate']"
></w-grid> ></w-grid>
<LaunchRatingDialog ref="launchRatingdialogRef" :dictionary="dictionary" @refresh="refreshTable"></LaunchRatingDialog> <LaunchRatingDialog ref="launchRatingdialogRef" :dictionary="dictionary" @refresh="refreshTable"></LaunchRatingDialog>
<RatingDialog ref="ratingdialogRef" @refresh="refreshTable"></RatingDialog> <RatingDialog ref="ratingdialogRef" @refresh="refreshTable"></RatingDialog>
<GrayModelDialog ref="grayDialogRef" @refresh="refreshTable"></GrayModelDialog>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref } from 'vue';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { Environment, EnumTools, DictionaryTools, Options, Formater, axios, NotifyManager } from 'platform-core'; import { Environment, EnumTools, DictionaryTools, Options, Formater, axios, NotifyManager, Tools } from 'platform-core';
import LaunchRatingDialog from './LaunchRatingDialog.vue'; import LaunchRatingDialog from './LaunchRatingDialog.vue';
import RatingDialog from './RatingDialog.vue'; import RatingDialog from './RatingDialog.vue';
import { RatingLevelOptions, RatingProcessStatus } from './CustRating.ts'; import GrayModelDialog from './GrayModelDialog.vue';
import { RatingLevelOptions, RatingProcessStatus, Round } from './CustRating.ts';
import RatingLevel from './RatingLevel.vue';
const $q = useQuasar(); const $q = useQuasar();
const companyRatingGridRef = ref(); const companyRatingGridRef = ref();
const launchRatingdialogRef = ref(); const launchRatingdialogRef = ref();
const ratingdialogRef = ref(); const ratingdialogRef = ref();
const grayDialogRef = ref();
const RatingStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingStatus'); const RatingStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingStatus');
const RatingProcessStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingProcessStatus'); const RatingProcessStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingProcessStatus');
@ -85,12 +89,21 @@ const companyRatingGrid = {
// label: '', // label: '',
// click: () => {}, // click: () => {},
// }, // },
'separator',
{ {
extend: 'view', extend: 'view',
click: (args) => { click: (args) => {
ratingdialogRef.value.show(args.selected, true); ratingdialogRef.value.show(args.selected, true);
}, },
}, },
{
name: 'viewGray',
extend: 'view',
label: '查看灰度模型结果',
click: (args) => {
grayDialogRef.value.show(args.selected);
},
},
'separator', 'separator',
], ],
queryFormFields: [ queryFormFields: [
@ -107,7 +120,7 @@ const companyRatingGrid = {
{ label: '评级状态', name: 'ratingStatus', type: 'select', options: Options.enum(RatingStatusEnum) }, { label: '评级状态', name: 'ratingStatus', type: 'select', options: Options.enum(RatingStatusEnum) },
], ],
columns: [ columns: [
{ name: 'id', label: '申请编号', align: 'center' }, { name: 'id', label: '申请编号', align: 'center', width: 150 },
{ name: 'custNo', label: '客户号', align: 'center' }, { name: 'custNo', label: '客户号', align: 'center' },
{ name: 'custName', label: '客户名称' }, { name: 'custName', label: '客户名称' },
{ name: 'industryTypeName', label: '行业类型' }, { name: 'industryTypeName', label: '行业类型' },
@ -115,8 +128,32 @@ const companyRatingGrid = {
{ name: 'modelLevel', label: '模型等级' }, { name: 'modelLevel', label: '模型等级' },
{ name: 'adjLevel', label: '调整后等级' }, { name: 'adjLevel', label: '调整后等级' },
{ name: 'initLevel', label: '初评等级' }, { name: 'initLevel', label: '初评等级' },
{ name: 'finalLevel', label: '认定等级' }, {
{ name: 'pd', label: '违约概率' }, name: 'finalLevel',
label: '认定等级',
format: (val) => {
if (!Tools.isEmpty(val)) {
return {
componentType: RatingLevel,
attrs: {
level: val,
dense: true,
},
};
}
return val;
},
},
{
name: 'pd',
label: '违约概率',
format: (val) => {
if (val && typeof val === 'number') {
return Round(val * 100, 2) + '%';
}
return val;
},
},
{ name: 'effectiveTime', label: '评级生效日', format: Formater.dateOnly() }, { name: 'effectiveTime', label: '评级生效日', format: Formater.dateOnly() },
{ name: 'matureTime', label: '评级失效日', format: Formater.dateOnly() }, { name: 'matureTime', label: '评级失效日', format: Formater.dateOnly() },
{ name: 'ratingStatus', label: '评级状态', format: Formater.enum(RatingStatusEnum) }, { name: 'ratingStatus', label: '评级状态', format: Formater.enum(RatingStatusEnum) },

342
irbs.frontend/src/views/custRating/GrayModelDialog.vue

@ -0,0 +1,342 @@
<template>
<w-dialog ref="dialogRef" :title="state.dialogTitle" width="80%" height="80%" body-padding="0px 0px 0px 0px" :maximized="true" :buttons="[]">
<div>
<div class="p-[10px]">
<span class="text-3xl text-amber-600">{{ state.custInfoObj['custName'] }}<q-badge color="red" align="top">上市</q-badge></span>
<div class="flex pt-2">
<div class="flex-1 text-center">
<div>客户号</div>
<div class="text-blue-500">
{{ state.custInfoObj['custNo'] }}
</div>
</div>
<div class="flex-1 text-center">
<div>企业规模</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictCustomerSize)(state.custInfoObj['customerSize']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>企业类型</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictRegisteredType)(state.custInfoObj['registeredType']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>融资平台标志</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictGoverFinanceSign)(state.custInfoObj['goverFinanceSign']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>融资平台类型</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictGoverFinanceType)(state.custInfoObj['goverFinanceType']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>所在国家地区</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictNationCd)(state.custInfoObj['nation']) }}
</div>
</div>
</div>
<div class="pt-3"></div>
<div class="flex">
<div class="flex-1 text-center">
<div>注册所在地</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictRegistrationCd)(state.custInfoObj['registration']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>是否集团客户</div>
<div class="text-blue-500">
{{ state.custInfoObj['groupCustInd'] === '1' ? '是' : '否' }}
</div>
</div>
<div class="flex-1 text-center">
<div>成员类别</div>
<div class="text-blue-500">
{{ Formater.dictionary(dictMemberTypeCd)(state.custInfoObj['memberType']) }}
</div>
</div>
<div class="flex-1 text-center">
<div>行业类型国标</div>
<div class="text-blue-500">
{{ state.custInfoObj['industryTypeName'] }}
</div>
</div>
<div class="flex-1 text-center">
<div>成立日期</div>
<div class="text-blue-500">
{{ state.custInfoObj['buildDate'] }}
</div>
</div>
<div class="flex-1 text-center"></div>
</div>
</div>
<q-separator />
<div class="pt-[10px]">
<q-card flat bordered>
<q-item dense class="pl-[8px]">
<q-item-section>
<q-item-label>灰度模型结果</q-item-label>
</q-item-section>
</q-item>
<q-separator />
<q-card-section class="p-[10px]">
<div class="pt-[8px]">
<w-info-panel :dense="state.dense" :info="state.reportCustRatingInfo" :column-num="3"></w-info-panel>
</div>
</q-card-section>
</q-card>
<div class="pt-[8px]">
<q-list bordered class="rounded-borders">
<q-expansion-item default-opened expand-separator icon="bubble_chart" label="得分详情">
<q-separator />
<q-splitter v-model="state.splitterModel">
<template #before>
<div>
<div class="text-center">
<q-chip outline color="orange" text-color="white" :clickable="false" :ripple="false"> 定量得分详情 </q-chip>
</div>
<q-list v-if="state.reportQuantitativeScoreDtl" padding>
<template v-for="(values, key, a) in state.reportQuantitativeScoreDtl" :key="a">
<q-item-label header>{{ key }}</q-item-label>
<template v-for="(dtl, index) in values" :key="index">
<q-item>
<q-item-section>
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['INDEX_VALUE'] }} </q-item-label>
</q-item-section>
<q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE_G'])" side>
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ Round(dtl['INDEX_SCORE_G'], 2) }} </q-chip>
</q-item-section>
</q-item>
</template>
<q-separator />
</template>
</q-list>
</div>
</template>
<template #after>
<q-splitter v-model="state.afterSplitterModel">
<template #before>
<div>
<div class="text-center">
<q-chip outline color="light-blue" text-color="white" :clickable="false" :ripple="false"> 定性得分详情 </q-chip>
</div>
<q-list v-if="state.reportQualitativeScoreDtl" padding>
<template v-for="(values, key, a) in state.reportQualitativeScoreDtl" :key="a">
<q-item-label header>{{ key }}</q-item-label>
<template v-for="(dtl, index) in values" :key="index">
<q-item>
<q-item-section>
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label>
</q-item-section>
<q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE_G'])" side>
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ Round(dtl['INDEX_SCORE_G'], 2) }} </q-chip>
</q-item-section>
</q-item>
</template>
<q-separator />
</template>
</q-list>
</div>
</template>
<template #after>
<div>
<div class="text-center">
<q-chip outline color="lime" text-color="white" :clickable="false" :ripple="false"> 评级调整项详情 </q-chip>
</div>
<q-list v-if="state.reportAdjustScoreDtl" padding>
<template v-for="(values, key, a) in state.reportAdjustScoreDtl" :key="a">
<q-item-label header>{{ key }}</q-item-label>
<template v-for="(dtl, index) in values" :key="index">
<q-item>
<q-item-section>
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label>
</q-item-section>
</q-item>
</template>
<q-separator />
</template>
</q-list>
</div>
</template>
</q-splitter>
</template>
</q-splitter>
</q-expansion-item>
</q-list>
</div>
</div>
</div>
</w-dialog>
</template>
<script setup lang="ts">
import { DictionaryTools, Environment, Formater, axios, Tools } from 'platform-core';
import { nextTick, reactive, ref } from 'vue';
import { RatingStep, Round } from './CustRating.ts';
import RatingLevel from './RatingLevel.vue';
const dialogRef = ref();
const state = reactive({
splitterModel: 30,
afterSplitterModel: 50,
rating: {},
dialogTitle: '灰度模型结果',
dense: false,
custInfoObj: {},
reportCustRatingInfo: <any>[],
reportQuantitativeScoreDtl: <any>null,
reportQualitativeScoreDtl: <any>null,
reportAdjustScoreDtl: <any>null,
});
//
const loadCustInfo = async () => {
//
let customerType = '';
await axios.get(Environment.apiContextPath('api/irbs/ratingCompanyCustomer/' + state.rating['custId'])).then((resp) => {
if (resp && resp.data) {
customerType = resp.data['customerType'];
state.custInfoObj = {};
state.custInfoObj['custNo'] = resp.data['custNo'];
state.custInfoObj['custName'] = resp.data['custName'];
state.custInfoObj['certificateType'] = resp.data['certificateType'];
state.custInfoObj['certificateNum'] = resp.data['certificateNum'];
state.custInfoObj['customerType'] = resp.data['customerType'];
state.custInfoObj['customerSize'] = resp.data['customerSize'];
state.custInfoObj['registeredType'] = resp.data['registeredType'];
state.custInfoObj['goverFinanceSign'] = resp.data['goverFinanceSign'];
state.custInfoObj['goverFinanceType'] = resp.data['goverFinanceType'];
state.custInfoObj['registration'] = resp.data['registration'];
state.custInfoObj['nation'] = resp.data['nation'];
state.custInfoObj['memberType'] = resp.data['memberType'];
state.custInfoObj['groupCustInd'] = resp.data['groupCustInd'];
state.custInfoObj['marketEnterprisesInd'] = resp.data['marketEnterprisesInd'];
state.custInfoObj['industryType'] = resp.data['industryType'];
state.custInfoObj['industryTypeName'] = resp.data['industryTypeName'];
state.custInfoObj['buildDate'] = resp.data['buildDate'];
state.custInfoObj['customerManagerNo'] = resp.data['customerManagerNo'];
state.custInfoObj['customerManagerName'] = resp.data['customerManagerName'];
state.custInfoObj['handleOrgId'] = resp.data['handleOrgId'];
state.custInfoObj['handleTime'] = resp.data['handleTime'];
}
});
};
const groupByProperties = (list, propName) => {
const map = {};
list.forEach((item, index, arr) => {
if (!map[item[propName]]) {
map[item[propName]] = arr.filter((a) => a[propName] == item[propName]);
}
});
return map;
};
const loadRatingReport = async () => {
//
state.reportCustRatingInfo = [];
await axios
.get(Environment.apiContextPath('api/irbs/companyRating/stepRatingReport'), { params: { ratingId: state.rating['id'] } })
.then((resp) => {
if (resp && resp.data) {
state.rating = resp.data;
state.reportCustRatingInfo.push({ label: '模型名称', value: resp.data.modelNameGray });
state.reportCustRatingInfo.push({ label: '定量得分', value: Round(resp.data.quanScoreGray, 2) });
state.reportCustRatingInfo.push({ label: '定性得分', value: Round(resp.data.qualScoreGray, 2) });
state.reportCustRatingInfo.push({ label: '模型得分', value: Round(resp.data.modelScoreGray, 2) });
state.reportCustRatingInfo.push({
label: '模型级别',
value: resp.data.modelLevelGray,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.modelLevelGray,
dense: true,
},
};
},
});
state.reportCustRatingInfo.push({
label: '调整项级别',
value: resp.data.adjLevelGray,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.adjLevelGray,
dense: true,
},
};
},
});
}
})
.catch((error) => {
console.info('error====', error);
});
//
const urlSearchParams = new URLSearchParams({ sortBy: ['INDEX_TYPE', 'INDEX_CATEGORY'] });
urlSearchParams.append('pageable', 'false');
const criteria = {
fieldName: 'RATING_ID',
operator: 'equals',
value: state.rating['id'],
};
urlSearchParams.append('criteria', JSON.stringify(criteria));
await axios
.get(Environment.apiContextPath('api/irbs/ratingIndex/getGrayScoreDetail'), { params: urlSearchParams })
.then((resp) => {
if (resp?.data?.content) {
const groupMap = groupByProperties(resp.data.content, 'INDEX_TYPE');
state.reportQuantitativeScoreDtl = groupByProperties(groupMap[RatingStep.DLFX], 'INDEX_CATEGORY');
state.reportQualitativeScoreDtl = groupByProperties(groupMap[RatingStep.DXFX], 'INDEX_CATEGORY');
state.reportAdjustScoreDtl = groupByProperties(groupMap[RatingStep.PJTZX], 'INDEX_CATEGORY');
}
})
.catch((error) => {
console.info('error====', error);
});
};
const show = async (data: any) => {
dialogRef.value.show();
state.rating = data;
state.dialogTitle = `公司客户灰度评级结果(客户:` + data['custName'] + ``;
loadCustInfo();
await loadRatingReport();
};
const hide = () => {
dialogRef.value.hide();
};
defineExpose({
show,
hide,
});
const dictCustomerSize = await DictionaryTools.fetch('CustomerSizeCd');
const dictRegisteredType = await DictionaryTools.fetch('REGISTERED_TYPE');
const dictGoverFinanceType = await DictionaryTools.fetch('GOVER_FINANCE_TYPE');
const dictGoverFinanceSign = await DictionaryTools.fetch('GOVER_FINANCE_SIGN');
const dictRegistrationCd = await DictionaryTools.fetch('REGISTRATION_CD');
const dictNationCd = await DictionaryTools.fetch('NATION_CD');
const dictMemberTypeCd = await DictionaryTools.fetch('MEMBER_TYPE_CD');
</script>
<style scoped lang="css"></style>

183
irbs.frontend/src/views/custRating/RatingDialog.vue

@ -103,11 +103,11 @@
:config-button="false" :config-button="false"
:columns="[ :columns="[
{ name: 'endDate', label: '财报日期', format: Formater.dateOnly() }, { name: 'endDate', label: '财报日期', format: Formater.dateOnly() },
{ name: 'type', label: '报表类型' }, { name: 'type', label: '报表类型', format: Formater.dictionary(dictFinanceTypeCd) },
{ name: 'sort', label: '报表类别' }, { name: 'sort', label: '报表类别', format: Formater.dictionary(dictFinanceSortTypeCd) },
{ name: 'auditedInd', label: '是否审计' }, { name: 'auditedInd', label: '是否审计', format: Formater.dictionary(dictFinanceStatusCd) },
{ name: 'caliber', label: '报表口径' }, { name: 'caliber', label: '报表口径', format: Formater.dictionary(dictCaliberCd) },
{ name: 'currency', label: '报表币种' }, { name: 'currency', label: '报表币种', format: Formater.dictionary(dictCurrencyTypeCd) },
{ name: 'userNo', label: '经办人' }, { name: 'userNo', label: '经办人' },
{ name: 'remarks', label: '备注' }, { name: 'remarks', label: '备注' },
{ {
@ -148,7 +148,7 @@
<q-splitter v-model="state.finReportDetailSplitterModel" disable style="height: 100%"> <q-splitter v-model="state.finReportDetailSplitterModel" disable style="height: 100%">
<template #before> <template #before>
<q-tabs v-model="state.finReportDetailTab" vertical indicator-color="amber" active-color="amber"> <q-tabs v-model="state.finReportDetailTab" vertical indicator-color="amber" active-color="amber">
<q-tab name="fz" icon="message" label="报表附注信息" /> <q-tab name="fz" icon="message" label="报表基本信息" />
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylzcfz" icon="currency_yen" label="企业类资产负债表" /> <q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylzcfz" icon="currency_yen" label="企业类资产负债表" />
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylxjl" icon="money" label="企业类现金流量表" /> <q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylxjl" icon="money" label="企业类现金流量表" />
<q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylsy" icon="remove_circle_outline" label="企业类损益表" /> <q-tab v-if="state.finReportType === FinanceReportType.QYL" name="qylsy" icon="remove_circle_outline" label="企业类损益表" />
@ -513,6 +513,7 @@
() => { () => {
state.otherDone = true; state.otherDone = true;
state.step = RatingStep.PJBG; state.step = RatingStep.PJBG;
stepClick(RatingStep.PJBG);
} }
" "
> >
@ -663,8 +664,10 @@
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> <q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['INDEX_VALUE'] }} </q-item-label> <q-item-label caption> {{ dtl['INDEX_VALUE'] }} </q-item-label>
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE'])" side>
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip> <q-chip :clickable="false" :ripple="false" color="green" text-color="white">
{{ Round(dtl['INDEX_SCORE'], 2) }}
</q-chip>
</q-item-section> </q-item-section>
</q-item> </q-item>
</template> </template>
@ -691,8 +694,10 @@
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> <q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> <q-item-label caption> {{ dtl['TEXT'] }} </q-item-label>
</q-item-section> </q-item-section>
<q-item-section side> <q-item-section v-if="!Tools.isEmpty(dtl['INDEX_SCORE'])" side>
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip> <q-chip :clickable="false" :ripple="false" color="green" text-color="white">
{{ Round(dtl['INDEX_SCORE'], 2) }}
</q-chip>
</q-item-section> </q-item-section>
</q-item> </q-item>
</template> </template>
@ -705,7 +710,7 @@
<template #after> <template #after>
<div> <div>
<div class="text-center"> <div class="text-center">
<q-chip outline color="lime" text-color="white" :clickable="false" :ripple="false"> 评级调整项得分详情 </q-chip> <q-chip outline color="lime" text-color="white" :clickable="false" :ripple="false"> 评级调整项详情 </q-chip>
</div> </div>
<q-list v-if="state.reportAdjustScoreDtl" padding> <q-list v-if="state.reportAdjustScoreDtl" padding>
<template v-for="(values, key, a) in state.reportAdjustScoreDtl" :key="a"> <template v-for="(values, key, a) in state.reportAdjustScoreDtl" :key="a">
@ -717,9 +722,6 @@
<q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label> <q-item-label>{{ dtl['INDEX_NAME'] }}</q-item-label>
<q-item-label caption> {{ dtl['TEXT'] }} </q-item-label> <q-item-label caption> {{ dtl['TEXT'] }} </q-item-label>
</q-item-section> </q-item-section>
<q-item-section side>
<q-chip :clickable="false" :ripple="false" color="green" text-color="white"> {{ dtl['INDEX_SCORE'] }} </q-chip>
</q-item-section>
</q-item> </q-item>
</template> </template>
<q-separator /> <q-separator />
@ -928,6 +930,7 @@ import {
FinanceReportProjectType, FinanceReportProjectType,
Round, Round,
} from './CustRating.ts'; } from './CustRating.ts';
import RatingLevel from './RatingLevel.vue';
const $q = useQuasar(); const $q = useQuasar();
const gc = Environment.getConfigure(); const gc = Environment.getConfigure();
@ -1044,10 +1047,10 @@ const opFormat = (value, row) => {
financeReportDetailDialogRef.value.show(); financeReportDetailDialogRef.value.show();
state.finReportFz = []; state.finReportFz = [];
state.finReportFz.push({ label: '财务报表截至日期', value: row['endDate'] }); state.finReportFz.push({ label: '财务报表截至日期', value: row['endDate'] });
state.finReportFz.push({ label: '是否经过审计', value: row['auditedInd'] }); state.finReportFz.push({ label: '是否经过审计', value: row['auditedInd'], format: Formater.dictionary(dictFinanceStatusCd) });
state.finReportFz.push({ label: '财务报表类别', value: row['sort'] }); state.finReportFz.push({ label: '财务报表类别', value: row['sort'], format: Formater.dictionary(dictFinanceTypeCd) });
state.finReportFz.push({ label: '财务报表口径', value: row['caliber'] }); state.finReportFz.push({ label: '财务报表口径', value: row['caliber'], format: Formater.dictionary(dictCaliberCd) });
state.finReportFz.push({ label: '财务报表币种', value: row['currency'] }); state.finReportFz.push({ label: '财务报表币种', value: row['currency'], format: Formater.dictionary(dictCurrencyTypeCd) });
nextTick(() => { nextTick(() => {
state.finReportDetailDialogContentHeight = financeReportDetailDialogRef.value.getContent().offsetHeight - 33; state.finReportDetailDialogContentHeight = financeReportDetailDialogRef.value.getContent().offsetHeight - 33;
}); });
@ -1261,7 +1264,19 @@ const loadFirstResult = () => {
state.qualitativeShowInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); state.qualitativeShowInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) });
state.qualitativeShowInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); state.qualitativeShowInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) });
state.qualitativeShowInfo.push({ label: '得分', value: Round(res.data.modelScore, 2) }); state.qualitativeShowInfo.push({ label: '得分', value: Round(res.data.modelScore, 2) });
state.qualitativeShowInfo.push({ label: '等级', value: res.data.modelLevel }); state.qualitativeShowInfo.push({
label: '等级',
value: res.data.modelLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: res.data.modelLevel,
dense: true,
},
};
},
});
} }
}) })
.catch((error) => { .catch((error) => {
@ -1375,9 +1390,36 @@ const loadRatingOverturn = () => {
state.otherInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) }); state.otherInfo.push({ label: '定量得分', value: Round(res.data.quanScore, 2) });
state.otherInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) }); state.otherInfo.push({ label: '定性得分', value: Round(res.data.qualScore, 2) });
state.otherInfo.push({ label: '模型得分', value: Round(res.data.modelScore, 2) }); state.otherInfo.push({ label: '模型得分', value: Round(res.data.modelScore, 2) });
state.otherInfo.push({ label: '模型等级', value: res.data.modelLevel }); state.otherInfo.push({
state.otherInfo.push({ label: '调整后等级', value: res.data.adjLevel }); label: '模型等级',
state.otherInfo.push({ label: '准入建议', value: res.data.accessLevel }); value: res.data.modelLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: res.data.modelLevel,
dense: true,
},
};
},
});
state.otherInfo.push({
label: '调整后等级',
value: res.data.adjLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: res.data.adjLevel,
dense: true,
},
};
},
});
state.otherInfo.push({
label: '准入建议',
value: res.data.accessLevel,
});
state.otherInfoAdjLevel = res.data.adjLevel; state.otherInfoAdjLevel = res.data.adjLevel;
} }
}) })
@ -1420,11 +1462,59 @@ const loadRatingReport = async () => {
state.reportCustRatingInfo.push({ label: '定量得分', value: Round(resp.data.quanScore, 2) }); state.reportCustRatingInfo.push({ label: '定量得分', value: Round(resp.data.quanScore, 2) });
state.reportCustRatingInfo.push({ label: '定性得分', value: Round(resp.data.qualScore, 2) }); state.reportCustRatingInfo.push({ label: '定性得分', value: Round(resp.data.qualScore, 2) });
state.reportCustRatingInfo.push({ label: '模型得分', value: Round(resp.data.modelScore, 2) }); state.reportCustRatingInfo.push({ label: '模型得分', value: Round(resp.data.modelScore, 2) });
state.reportCustRatingInfo.push({ label: '模型级别', value: resp.data.modelLevel }); state.reportCustRatingInfo.push({
state.reportCustRatingInfo.push({ label: '调整项级别', value: resp.data.adjLevel }); label: '模型级别',
state.reportCustRatingInfo.push({ label: '初始级别', value: resp.data.initLevel }); value: resp.data.modelLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.modelLevel,
dense: true,
},
};
},
});
state.reportCustRatingInfo.push({
label: '调整项级别',
value: resp.data.adjLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.adjLevel,
dense: true,
},
};
},
});
state.reportCustRatingInfo.push({
label: '初始级别',
value: resp.data.initLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.initLevel,
dense: true,
},
};
},
});
state.reportCustRatingInfo.push({ label: '上一次建议级别', value: resp.data.spLevel }); state.reportCustRatingInfo.push({ label: '上一次建议级别', value: resp.data.spLevel });
state.reportCustRatingInfo.push({ label: '最终认定级别', value: resp.data.finalLevel }); state.reportCustRatingInfo.push({
label: '最终认定级别',
value: resp.data.finalLevel,
format: () => {
return {
componentType: RatingLevel,
attrs: {
level: resp.data.finalLevel,
dense: true,
},
};
},
});
state.reportCustRatingInfo.push({ label: '违约概率', value: resp.data.pd ? resp.data.pd + '%' : '' }); state.reportCustRatingInfo.push({ label: '违约概率', value: resp.data.pd ? resp.data.pd + '%' : '' });
state.reportCustRatingInfo.push({ label: '客户经理', value: resp.data.managerName }); state.reportCustRatingInfo.push({ label: '客户经理', value: resp.data.managerName });
state.reportCustRatingInfo.push({ label: '评级发起日期', value: resp.data.startTime }); state.reportCustRatingInfo.push({ label: '评级发起日期', value: resp.data.startTime });
@ -1614,18 +1704,39 @@ defineExpose({
hide, hide,
}); });
const dictOverturnType = await DictionaryTools.fetch('OVERTURN_TYPE'); const dictionaryArr = await DictionaryTools.fetch([
'OVERTURN_TYPE',
'CustomerSizeCd',
'REGISTERED_TYPE',
'GOVER_FINANCE_TYPE',
'GOVER_FINANCE_SIGN',
'REGISTRATION_CD',
'NATION_CD',
'MEMBER_TYPE_CD',
'FinanceTypeCd',
'FinanceSortTypeCd',
'FinanceStatusCd',
'CaliberCd',
'CurrencyTypeCd',
]);
const dictOverturnType = dictionaryArr['OVERTURN_TYPE'];
const optionsOverturnType = Options.dictionary(dictOverturnType); const optionsOverturnType = Options.dictionary(dictOverturnType);
const dictCustomerSize = await DictionaryTools.fetch('CustomerSizeCd'); const dictCustomerSize = dictionaryArr['CustomerSizeCd'];
const dictRegisteredType = await DictionaryTools.fetch('REGISTERED_TYPE'); const dictRegisteredType = dictionaryArr['REGISTERED_TYPE'];
const dictGoverFinanceType = await DictionaryTools.fetch('GOVER_FINANCE_TYPE'); const dictGoverFinanceType = dictionaryArr['GOVER_FINANCE_TYPE'];
const dictGoverFinanceSign = await DictionaryTools.fetch('GOVER_FINANCE_SIGN'); const dictGoverFinanceSign = dictionaryArr['GOVER_FINANCE_SIGN'];
const dictRegistrationCd = await DictionaryTools.fetch('REGISTRATION_CD'); const dictRegistrationCd = dictionaryArr['REGISTRATION_CD'];
const dictNationCd = await DictionaryTools.fetch('NATION_CD'); const dictNationCd = dictionaryArr['NATION_CD'];
const dictMemberTypeCd = await DictionaryTools.fetch('MEMBER_TYPE_CD'); const dictMemberTypeCd = dictionaryArr['MEMBER_TYPE_CD'];
const dictFinanceTypeCd = dictionaryArr['FinanceTypeCd'];
const dictFinanceSortTypeCd = dictionaryArr['FinanceSortTypeCd'];
const dictFinanceStatusCd = dictionaryArr['FinanceStatusCd'];
const dictCaliberCd = dictionaryArr['CaliberCd'];
const dictCurrencyTypeCd = dictionaryArr['CurrencyTypeCd'];
const RatingStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingStatus'); const enumArr = await EnumTools.fetch(['irbs.cust.rating.enums.RatingStatus', 'irbs.cust.rating.enums.RatingProcessStatus']);
const RatingProcessStatusEnum = await EnumTools.fetch('irbs.cust.rating.enums.RatingProcessStatus'); const RatingStatusEnum = enumArr['irbs.cust.rating.enums.RatingStatus'];
const RatingProcessStatusEnum = enumArr['irbs.cust.rating.enums.RatingProcessStatus'];
</script> </script>
<style scoped lang="css"> <style scoped lang="css">

30
irbs.frontend/src/views/custRating/RatingLevel.vue

@ -0,0 +1,30 @@
<template>
<div>
<q-knob v-model="value" :min="1" :max="10" readonly show-value size="md" :color="color" track-color="grey-3" v-bind="attrs">
<span>{{ props.level }}</span>
</q-knob>
</div>
</template>
<script setup lang="ts">
import { ref, useAttrs } from 'vue';
import { RatingLevelOptions } from './CustRating.ts';
const attrs = useAttrs();
const props = defineProps({
level: { type: String, default: '' },
});
const value = ref(0);
const color = ref('teal');
const ratingLevel = RatingLevelOptions.find((item) => {
return item['value'] === props.level;
});
if (ratingLevel) {
value.value = ratingLevel.numberValue;
color.value = ratingLevel.color;
}
</script>
<style scoped lang="css"></style>
Loading…
Cancel
Save