Browse Source

客户表新增实际控制人从业年限字段

main
likunming 7 months ago
parent
commit
38318ee2fc
  1. 8
      app.irbs/src/main/resources/META-INF/platform/plugins/liquibase.json
  2. 2
      gradle.properties
  3. 18
      irbs.cust.rating/src/main/java/irbs/cust/rating/controller/CompanyRatingController.java
  4. 3
      irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/repository/CompanyRatingRepository.java
  5. 4
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/CompanyRatingService.java
  6. 1
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyCustomerServiceImpl.java
  7. 2
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingProcessServiceImpl.java
  8. 45
      irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyRatingServiceImpl.java
  9. 10
      irbs.cust.rating/src/main/resources/META-INF/platform/plugins/liquibase.json
  10. 24
      irbs.cust.rating/src/main/resources/META-INF/platform/plugins/parameters.json
  11. 4
      irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages.properties
  12. 4
      irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages_tw_CN.properties
  13. 4
      irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages_zh_CN.properties
  14. 8
      irbs.cust.rating/src/main/resources/liquibase/RE_1.0.0_20220515__SN IRS Database Schema DDL.xml
  15. 8
      irbs.defaultManager/src/main/java/irbs/defaultManager/jpa/entity/RatingEntity.java
  16. 4
      irbs.defaultManager/src/main/java/irbs/defaultManager/service/impl/DefaultRebirthServiceImpl.java
  17. 6
      irbs.defaultManager/src/main/resources/META-INF/platform/plugins/liquibase.json
  18. 2
      irbs.deptRating/src/main/resources/META-INF/platform/plugins/liquibase.json
  19. 4
      irbs.feature/src/main/resources/META-INF/platform/plugins/liquibase.json
  20. 60
      irbs.feature/src/main/resources/liquibase/20240630_FEATURE_DDL.xml
  21. 2
      irbs.financialTemplate/src/main/resources/META-INF/platform/plugins/liquibase.json
  22. 2
      irbs.frontend/package.json
  23. 18
      irbs.frontend/src/views/custRating/CustRating.vue
  24. 80
      irbs.frontend/src/views/custRating/LaunchRatingDialog.vue
  25. 148
      irbs.frontend/src/views/custRating/RatingDialog.vue
  26. 9
      irbs.frontend/src/views/default/RebirthApply.vue
  27. 4
      irbs.frontend/src/views/report/RptRatingModelFocusDist.vue
  28. 4
      irbs.riskExposure/src/main/resources/META-INF/platform/plugins/liquibase.json
  29. 4
      irbs.shrcb.poc/src/main/java/irbs/shrcb/poc/ns3/impl/RatingServiceImpl.java
  30. 2
      irbs.shrcb.poc/src/main/resources/META-INF/platform/plugins/liquibase.json

8
app.irbs/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -16,9 +16,9 @@
"order" : 9000,
"description":"授权与认证相关数据库表结构",
"locations":[
"liquibase/20240326_ALL_TABLES_DDL.xml",
"liquibase/20240401_REPORTS_TABLES_DDL.xml",
"liquibase/20240401_REPORTS_VIEW.xml"
"classpath:/liquibase/20240326_ALL_TABLES_DDL.xml",
"classpath:/liquibase/20240401_REPORTS_TABLES_DDL.xml",
"classpath:/liquibase/20240401_REPORTS_VIEW.xml"
]
},
{
@ -26,7 +26,7 @@
"order" : 999999999,
"description":"所有表的初始化数据",
"locations":[
"liquibase/IRBS_20240627_DATA.xml"
"classpath:/liquibase/IRBS_20240627_DATA.xml"
]
}
]

2
gradle.properties

@ -38,7 +38,7 @@ application_version=1.0.1
platform_group=io.sc
platform_version=8.1.44
platform_plugin_version=8.1.44
platform_core_frontend_version=8.1.279
platform_core_frontend_version=8.1.281
###########################################################
# product dependencies version

18
irbs.cust.rating/src/main/java/irbs/cust/rating/controller/CompanyRatingController.java

@ -30,6 +30,17 @@ public class CompanyRatingController extends RestCrudController<CompanyRatingVo,
return service.pageQuery(queryParameter);
}
/**
* 查询客户是否当月已达到评级次数上限及达到上限后的策略
* @param custNo
* @throws Exception
*/
@RequestMapping(value="getMonthRatingLimit/{custNo}",method= RequestMethod.POST)
@ResponseBody
public Map<String, Object> getMonthRatingLimit(@PathVariable(name="custNo") String custNo) throws Exception {
return service.isOverMonthLimit(custNo);
}
/**
* 生成评级数据
* @param custNo
@ -75,11 +86,12 @@ public class CompanyRatingController extends RestCrudController<CompanyRatingVo,
/**
* 定性保存指标
* @param flag 试算下一步
* @param indices 指标列表
*/
@PostMapping("qualSaveIndices")
public String qualSaveIndices(@RequestBody List<RatingIndex> indices) throws Exception {
return service.qualSaveIndices(indices);
@RequestMapping(value="qualSaveIndices/{flag}",method= RequestMethod.POST)
public Map<String, Object> qualSaveIndices(@PathVariable(name="flag") String flag, @RequestBody List<RatingIndex> indices) throws Exception {
return service.qualSaveIndices(flag, indices);
}
/**

3
irbs.cust.rating/src/main/java/irbs/cust/rating/jpa/repository/CompanyRatingRepository.java

@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.Date;
import java.util.List;
public interface CompanyRatingRepository extends DaoRepository<CompanyRating, String> {
@ -19,4 +20,6 @@ public interface CompanyRatingRepository extends DaoRepository<CompanyRating, St
List<CompanyRating> findByCustNoAndRatingStatus(String custNo, String ratingStatus);
List<CompanyRating> findByCustNoAndProcessStatusOrderByEffectiveTimeAsc(String custNo, String ratingStatus);
List<CompanyRating> findByCustNoAndCreateDateBetween(String custNo,Date startDt, Date endDt);
}

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

@ -29,7 +29,7 @@ public interface CompanyRatingService extends DaoService<CompanyRating, String,
public CompanyRating stepQual(String ratingId, String page) throws Exception;
public String qualSaveIndices(List<RatingIndex> indices) throws Exception;
public Map<String, Object> qualSaveIndices(String flag, List<RatingIndex> indices) throws Exception;
public CompanyRating stepInitRating(String ratingId, String page) throws Exception;
@ -56,4 +56,6 @@ public interface CompanyRatingService extends DaoService<CompanyRating, String,
public Map<String, String> getSystemParameters(String[] codes) throws Exception;
public String removeRatingAndProcess(String ratingId) throws Exception;
public Map<String, Object> isOverMonthLimit(String custNo) throws Exception;
}

1
irbs.cust.rating/src/main/java/irbs/cust/rating/service/impl/CompanyCustomerServiceImpl.java

@ -2,6 +2,7 @@ package irbs.cust.rating.service.impl;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.util.EntityVoUtil;
import irbs.cust.rating.jpa.entity.CompanyCustomer;
import irbs.cust.rating.jpa.entity.Industry;

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

@ -109,6 +109,8 @@ public class CompanyRatingProcessServiceImpl implements CompanyRatingProcessServ
}
} else if(opaVal < 0){
companyRatingService.backStart(instance.getBusinessKey(), processProperties.getData());
} else if(opaVal == RatingGoBackType.APPROVE.code()) {
companyRatingService.approve(instance.getBusinessKey(), processProperties.getData());
} else {
companyRatingService.submit(instance.getBusinessKey(), processProperties.getData());
}

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

@ -359,13 +359,35 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
if(msg != null) {
throw new RuntimeException(msg);
}
// // 检查是否超过本月限定次数
// 检查是否超过本月限定次数
// msg = isOverMonthLimit(custNo);
// if(msg != null) {
// throw new ServiceException(msg);
// throw new RuntimeException(msg);
// }
}
@Override
public Map<String, Object> isOverMonthLimit(String custNo) throws Exception {
Map<String, Object> map = new HashMap<>();
Calendar start = Calendar.getInstance();
start.set(Calendar.DAY_OF_MONTH,1);
start.set(Calendar.HOUR_OF_DAY,0);
start.set(Calendar.MINUTE,0);
start.set(Calendar.SECOND,0);
Calendar end = Calendar.getInstance();
List<CompanyRating> list = repository.findByCustNoAndCreateDateBetween(custNo, start.getTime(), end.getTime());
int num = Integer.parseInt(systemParameterService.getParameter("parameter.irbs.params.monthRatingNum"));
Boolean result = false;
if(list!=null && list.size() >= num) {
result = true;
String tactics = systemParameterService.getParameter("parameter.irbs.params.monthRatingNum.tactics");
map.put("tactics", tactics);
map.put("num", num);
}
map.put("result", result);
return map;
}
private String isCustomerDefault(String custNo) throws Exception {
Integer num = defaultCognizanceService.getDefaultNum(custNo);
if(num > 0) {
@ -403,7 +425,8 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
}
@Override
public String qualSaveIndices(List<RatingIndex> indices) throws Exception {
public Map<String, Object> qualSaveIndices(String flag, List<RatingIndex> indices) throws Exception {
Map<String, Object> map = new HashMap<>();
boolean tag = false;
if(null!=indices && indices.size()>0){
List<String> ids = indices.stream().map(RatingIndex::getId).collect(Collectors.toList());
@ -419,21 +442,27 @@ public class CompanyRatingServiceImpl extends DaoServiceImpl<CompanyRating, Stri
}
}
}
if(tag){
if(tag || flag.equals("next")){
String stepId = indices.get(0).getStepId();
RatingStep step = ratingStepService.findById(stepId);
CompanyRating rating = this.findById(step.getRatingId());
if(rating.getQualCalcCount() == null || rating.getQualCalcCount() < 5) {
Integer calcNum = Integer.parseInt(systemParameterService.getParameter("parameter.irbs.params.qual.calc.num"));
if(rating.getQualCalcCount() == null || rating.getQualCalcCount() <= calcNum || flag.equals("next")) {
ratingIndexService.getRepository().saveAll(indices);
rating = ratingIndexService.calculateModel(rating);
rating.setQualCalcCount(rating.getQualCalcCount() == null ? 0+1 : rating.getQualCalcCount() + 1);
getRepository().save(rating);
return "success";
map.put("success", true);
map.put("qualScore", rating.getQualScore());
}else{
return "定性计算次数已满";
map.put("success", false);
map.put("errorMsg", "定性试算次数已满");
}
} else {
map.put("success", false);
map.put("errorMsg", "无选项修改");
}
return "无选项修改";
return map;
}
@Override

10
irbs.cust.rating/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -30,11 +30,11 @@
"order" : 8000,
"description":"评级相关表结构",
"locations":[
"liquibase/20240321_CUST_RATING_DDL.xml",
"liquibase/20240326_INDUSTRY_DDL.xml",
"liquibase/20240327_FINANCE_REPORT_DDL.xml",
"liquibase/RE_1.0.0_20220515__SN IRS Database Schema DDL.xml",
"liquibase/20240720_MAINSCALEVERSION_DDL.xml"
"classpath:/liquibase/20240321_CUST_RATING_DDL.xml",
"classpath:/liquibase/20240326_INDUSTRY_DDL.xml",
"classpath:/liquibase/20240327_FINANCE_REPORT_DDL.xml",
"classpath:/liquibase/RE_1.0.0_20220515__SN IRS Database Schema DDL.xml",
"classpath:/liquibase/20240720_MAINSCALEVERSION_DDL.xml"
]
}
]

24
irbs.cust.rating/src/main/resources/META-INF/platform/plugins/parameters.json

@ -60,6 +60,30 @@
},
"order" : 400
},
/*//*/
{
"id" : "parameter.irbs.params.qual.calc.num",
"parentId" : "parameter.irbs.params.ratingProcess",
"code" : "parameter.irbs.params.qual.calc.num",
"defaultValue" : 5,
"order" : 500
},
/*//*/
{
"id" : "parameter.irbs.params.overturn.level.up",
"parentId" : "parameter.irbs.params.ratingProcess",
"code" : "parameter.irbs.params.overturn.level.up",
"defaultValue" : 3,
"order" : 600
},
/*//*/
{
"id" : "parameter.irbs.params.overturn.level.down",
"parentId" : "parameter.irbs.params.ratingProcess",
"code" : "parameter.irbs.params.overturn.level.down",
"defaultValue" : 3,
"order" : 700
},
/*/*/
{
"id" : "parameter.irbs.params.ratingUI",

4
irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages.properties

@ -26,6 +26,10 @@ parameter.irbs.params.ratingProcess = \u5BA2\u6237\u8BC4\u7EA7\u6D41\u7A0B
parameter.irbs.params.ratingLevel = \u9700\u603B\u884C\u5BA1\u6279\u7684\u8BC4\u7EA7\u7B49\u7EA7
parameter.irbs.params.overturnLevel = \u8BC4\u7EA7\u5411\u4E0A\u63A8\u7FFB\u51E0\u7EA7\u9700\u603B\u884C\u5BA1\u6279
parameter.irbs.params.monthRatingNum = \u5BA2\u6237\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u8BC4\u7EA7\u6B21\u6570
parameter.irbs.params.monthRatingNum.tactics = \u8D85\u8FC7\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u7684\u8BC4\u7EA7\u6B21\u6570\u7B56\u7565
parameter.irbs.params.qual.calc.num = \u5B9A\u6027\u8BD5\u7B97\u6B21\u6570
parameter.irbs.params.overturn.level.up = \u5411\u4E0A\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.overturn.level.down = \u5411\u4E0B\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.ratingUI = \u8BC4\u7EA7\u9875\u9762\u5C55\u793A
parameter.irbs.params.ratingUI.totalScore = \u662F\u5426\u5C55\u793A\u5B9A\u91CF\u5B9A\u6027\u603B\u5206

4
irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages_tw_CN.properties

@ -26,6 +26,10 @@ parameter.irbs.params.ratingProcess = \u5BA2\u6237\u8BC4\u7EA7\u6D41\u7A0B
parameter.irbs.params.ratingLevel = \u9700\u603B\u884C\u5BA1\u6279\u7684\u8BC4\u7EA7\u7B49\u7EA7
parameter.irbs.params.overturnLevel = \u8BC4\u7EA7\u5411\u4E0A\u63A8\u7FFB\u51E0\u7EA7\u9700\u603B\u884C\u5BA1\u6279
parameter.irbs.params.monthRatingNum = \u5BA2\u6237\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u8BC4\u7EA7\u6B21\u6570
parameter.irbs.params.monthRatingNum.tactics = \u8D85\u8FC7\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u7684\u8BC4\u7EA7\u6B21\u6570\u7B56\u7565
parameter.irbs.params.qual.calc.num = \u5B9A\u6027\u8BD5\u7B97\u6B21\u6570
parameter.irbs.params.overturn.level.up = \u5411\u4E0A\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.overturn.level.down = \u5411\u4E0B\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.ratingUI = \u8BC4\u7EA7\u9875\u9762\u5C55\u793A
parameter.irbs.params.ratingUI.totalScore = \u662F\u5426\u5C55\u793A\u5B9A\u91CF\u5B9A\u6027\u603B\u5206

4
irbs.cust.rating/src/main/resources/irbs/cust/rating/i18n/messages_zh_CN.properties

@ -26,6 +26,10 @@ parameter.irbs.params.ratingProcess = \u5BA2\u6237\u8BC4\u7EA7\u6D41\u7A0B
parameter.irbs.params.ratingLevel = \u9700\u603B\u884C\u5BA1\u6279\u7684\u8BC4\u7EA7\u7B49\u7EA7
parameter.irbs.params.overturnLevel = \u8BC4\u7EA7\u5411\u4E0A\u63A8\u7FFB\u51E0\u7EA7\u9700\u603B\u884C\u5BA1\u6279
parameter.irbs.params.monthRatingNum = \u5BA2\u6237\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u8BC4\u7EA7\u6B21\u6570
parameter.irbs.params.monthRatingNum.tactics = \u8D85\u8FC7\u4E00\u4E2A\u6708\u5185\u5141\u8BB8\u53D1\u8D77\u7684\u8BC4\u7EA7\u6B21\u6570\u7B56\u7565
parameter.irbs.params.qual.calc.num = \u5B9A\u6027\u8BD5\u7B97\u6B21\u6570
parameter.irbs.params.overturn.level.up = \u5411\u4E0A\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.overturn.level.down = \u5411\u4E0B\u63A8\u7FFB\u7B49\u7EA7\u9650\u5236
parameter.irbs.params.ratingUI = \u8BC4\u7EA7\u9875\u9762\u5C55\u793A
parameter.irbs.params.ratingUI.totalScore = \u662F\u5426\u5C55\u793A\u5B9A\u91CF\u5B9A\u6027\u603B\u5206

8
irbs.cust.rating/src/main/resources/liquibase/RE_1.0.0_20220515__SN IRS Database Schema DDL.xml

@ -48,7 +48,7 @@
<column name="objectno" type="NVARCHAR(32)" remarks="关联对象编号"/>
<column name="reportscope" type="NVARCHAR(18)" remarks="报表口径"/>
<column name="modelno" type="NVARCHAR(32)" remarks="模型编号"/>
<column name="reportname" type="NVARCHAR(80)" remarks="报表名称"/>
<column name="reportname" type="NVARCHAR(200)" remarks="报表名称"/>
<column name="reportdate" type="NVARCHAR(10)" remarks="报表日期"/>
<column name="recordno" type="NVARCHAR(32)" remarks="记录编号"/>
<column name="inputtime" type="NVARCHAR(20)" remarks="创建时间"/>
@ -62,7 +62,7 @@
<createTable tableName="REPORT_DATA" remarks="财报数据">
<column name="reportno" type="NVARCHAR(40)" remarks="报表编号"/>
<column name="rowno" type="NVARCHAR(32)" remarks="行编号"/>
<column name="rowname" type="NVARCHAR(80)" remarks="行名称"/>
<column name="rowname" type="NVARCHAR(200)" remarks="行名称"/>
<column name="rowsubject" type="NVARCHAR(32)" remarks="对应科目"/>
<column name="displayorder" type="NVARCHAR(32)" remarks="显示次序"/>
<column name="rowdimtype" type="NVARCHAR(18)" remarks="行量纲类型"/>
@ -87,8 +87,8 @@
<column name="reportflag" type="NVARCHAR(1)" remarks="报表标志"/>
<column name="reportopinion" type="NVARCHAR(200)" remarks="reportopinion"/>
<column name="auditflag" type="NVARCHAR(1)" remarks="审计标志"/>
<column name="auditoffice" type="NVARCHAR(80)" remarks="审计单位"/>
<column name="auditopinion" type="NVARCHAR(80)" remarks="审计意见"/>
<column name="auditoffice" type="NVARCHAR(200)" remarks="审计单位"/>
<column name="auditopinion" type="NVARCHAR(200)" remarks="审计意见"/>
<column name="inputdate" type="NVARCHAR(20)" remarks="创建时间"/>
<column name="orgid" type="NVARCHAR(32)" remarks="登记机构"/>
<column name="userid" type="NVARCHAR(32)" remarks="登记人"/>

8
irbs.defaultManager/src/main/java/irbs/defaultManager/jpa/entity/RatingEntity.java

@ -33,13 +33,13 @@ public class RatingEntity extends CorporationAuditorEntity<RatingEntityVo> {
protected String custId;
// 客户编号
@Column(name="CUST_NO")
@Size(max=100)
@Column(name="CUSTOMER_ID")
@Size(max=12)
protected String custNo;
// 客户中文名称
@Column(name="CUST_NAME")
@Size(max=200)
@Column(name="CUSTOMER_CHINESE_NAME")
@Size(max=90)
protected String custName;
// 客户类别(1:一般公司客户;2:金融机构及发债企业客户)

4
irbs.defaultManager/src/main/java/irbs/defaultManager/service/impl/DefaultRebirthServiceImpl.java

@ -180,8 +180,10 @@ public class DefaultRebirthServiceImpl extends DaoServiceImpl<DefaultRebirth, St
public Map<String, Object> queryCognizanceList(QueryParameter queryParameter) throws Exception {
Map<String, Class<?>> fieldTypeMap = new HashMap<>();
fieldTypeMap.put("VALID", java.lang.String.class);
fieldTypeMap.put("CUST_NO", java.lang.String.class);
fieldTypeMap.put("CUST_NAME", java.lang.String.class);
StringBuffer sql = new StringBuffer();
sql.append("select T1.* from P_IRS_DEFAULT_COGNIZANCE T1 JOIN IRBS_CUST_CP_INFO T2 on T1.CUST_NO=T2.CUST_NO ");
sql.append("select T1.* from P_IRS_DEFAULT_COGNIZANCE T1 JOIN IRBS_CUST_CP_INFO T2 on T1.CUST_NO=T2.CUSTOMER_ID ");
Condition condition = jdbcTemplateService.buildCondition(fieldTypeMap, queryParameter);
String conditionSql = " where 1=1 ";
if (null!=condition.getWhere() && !"".equals(condition.getWhere())) {

6
irbs.defaultManager/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -29,9 +29,9 @@
"order" : 9000,
"description":"违约管理相关表结构",
"locations":[
"liquibase/20240327_DEFAULT_DDL.xml",
"liquibase/20240622_DEFAULT_DDL.xml",
"liquibase/20240722_DEFAULT_DDL.xml"
"classpath:/liquibase/20240327_DEFAULT_DDL.xml",
"classpath:/liquibase/20240622_DEFAULT_DDL.xml",
"classpath:/liquibase/20240722_DEFAULT_DDL.xml"
]
}
]

2
irbs.deptRating/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -29,7 +29,7 @@
"order" : 110000,
"description":"风险暴露分类",
"locations":[
"liquibase/20240427_DEBTRATING_DDL.xml"
"classpath:/liquibase/20240427_DEBTRATING_DDL.xml"
//"liquibase/20240711_DEBTRATING_DDL.xml"
]
}

4
irbs.feature/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -17,8 +17,8 @@
"order" : 999999,
"description":"客户特征变量结果相关表",
"locations":[
"liquibase/20240630_FEATURE_DDL.xml",
"liquibase/20240702_FEATURE_DDL.xml"
"classpath:/liquibase/20240630_FEATURE_DDL.xml",
"classpath:/liquibase/20240702_FEATURE_DDL.xml"
]
}
]

60
irbs.feature/src/main/resources/liquibase/20240630_FEATURE_DDL.xml

@ -9,16 +9,16 @@
<changeSet id="20240630_FEATURE_DDL" author="platform">
<!-- 客户信息表 -->
<createTable tableName="P_IRS_CUST_INFO" remarks="客户信息表">
<column name="ID" type="java.sql.Types.VARCHAR(50)" remarks="主键ID">
<column name="ID" type="java.sql.Types.NVARCHAR(50)" remarks="主键ID">
<constraints primaryKey="true"/>
</column>
<column name="DATA_DT" type="java.sql.Types.VARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.VARCHAR(60)" remarks="客户编号"/>
<column name="CUST_NAME" type="java.sql.Types.VARCHAR(200)" remarks="客户名称"/>
<column name="CUST_TYPE" type="java.sql.Types.VARCHAR(30)" remarks="客户类型"/>
<column name="MANAGER_CODE" type="java.sql.Types.VARCHAR(60)" remarks="客户经理编号"/>
<column name="MANAGER_NAME" type="java.sql.Types.VARCHAR(200)" remarks="客户经理名称"/>
<column name="MGER_ORG_NM" type="java.sql.Types.VARCHAR(200)" remarks="所属机构"/>
<column name="DATA_DT" type="java.sql.Types.NVARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.NVARCHAR(60)" remarks="客户编号"/>
<column name="CUST_NAME" type="java.sql.Types.NVARCHAR(200)" remarks="客户名称"/>
<column name="CUST_TYPE" type="java.sql.Types.NVARCHAR(30)" remarks="客户类型"/>
<column name="MANAGER_CODE" type="java.sql.Types.NVARCHAR(60)" remarks="客户经理编号"/>
<column name="MANAGER_NAME" type="java.sql.Types.NVARCHAR(200)" remarks="客户经理名称"/>
<column name="MGER_ORG_NM" type="java.sql.Types.NVARCHAR(200)" remarks="所属机构"/>
<column name="DATA_COME_FROM_" type="java.sql.Types.NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)" defaultValue="INPUT"/>
<column name="CREATOR_" type="java.sql.Types.NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
@ -31,18 +31,18 @@
<!-- 客户财报信息表 -->
<createTable tableName="P_IRS_CUST_FIN_RPT" remarks="客户财报信息表">
<column name="ID" type="java.sql.Types.VARCHAR(50)" remarks="主键ID">
<column name="ID" type="java.sql.Types.NVARCHAR(50)" remarks="主键ID">
<constraints primaryKey="true"/>
</column>
<column name="DATA_DT" type="java.sql.Types.VARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.VARCHAR(60)" remarks="客户编号"/>
<column name="RPT_DT" type="java.sql.Types.VARCHAR(20)" remarks="财报日期"/>
<column name="RPT_TEMPLATE_TYPE" type="java.sql.Types.VARCHAR(20)" remarks="财报模板类型"/>
<column name="RPT_PERIOD" type="java.sql.Types.VARCHAR(20)" remarks="财报周期(10-月报,20-季报,30-年报)"/>
<column name="RPT_CALIBER" type="java.sql.Types.VARCHAR(20)" remarks="财报口径(10-本部,20-合并)"/>
<column name="CCY" type="java.sql.Types.VARCHAR(10)" remarks="币种"/>
<column name="AUDITED_FLAG" type="java.sql.Types.VARCHAR(5)" remarks="是否审计"/>
<column name="AUDITED_ORG" type="java.sql.Types.VARCHAR(200)" remarks="审计机构"/>
<column name="DATA_DT" type="java.sql.Types.NVARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.NVARCHAR(60)" remarks="客户编号"/>
<column name="RPT_DT" type="java.sql.Types.NVARCHAR(20)" remarks="财报日期"/>
<column name="RPT_TEMPLATE_TYPE" type="java.sql.Types.NVARCHAR(100)" remarks="财报模板类型"/>
<column name="RPT_PERIOD" type="java.sql.Types.NVARCHAR(20)" remarks="财报周期(10-月报,20-季报,30-年报)"/>
<column name="RPT_CALIBER" type="java.sql.Types.NVARCHAR(20)" remarks="财报口径(10-本部,20-合并)"/>
<column name="CCY" type="java.sql.Types.NVARCHAR(10)" remarks="币种"/>
<column name="AUDITED_FLAG" type="java.sql.Types.NVARCHAR(5)" remarks="是否审计"/>
<column name="AUDITED_ORG" type="java.sql.Types.NVARCHAR(200)" remarks="审计机构"/>
<column name="DATA_COME_FROM_" type="java.sql.Types.NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)" defaultValue="INPUT"/>
<column name="CREATOR_" type="java.sql.Types.NVARCHAR(255)" remarks="创建人"/>
<column name="CREATE_DATE_" type="DATETIME" remarks="创建日期"/>
@ -55,14 +55,14 @@
<!-- 客户财报科目信息表 -->
<createTable tableName="P_IRS_CUST_FIN_RPT_ITEM" remarks="客户财报科目信息表">
<column name="ID" type="java.sql.Types.VARCHAR(50)" remarks="主键ID">
<column name="ID" type="java.sql.Types.NVARCHAR(50)" remarks="主键ID">
<constraints primaryKey="true"/>
</column>
<column name="DATA_DT" type="java.sql.Types.VARCHAR(20)" remarks="数据日期"/>
<column name="RPT_ID" type="java.sql.Types.VARCHAR(60)" remarks="客户财报信息表ID"/>
<column name="RPT_TAB_TYPE" type="java.sql.Types.VARCHAR(20)" remarks="财报报表类型"/>
<column name="ITEM_CODE" type="java.sql.Types.VARCHAR(60)" remarks="科目编号"/>
<column name="ITEM_NAME" type="java.sql.Types.VARCHAR(1000)" remarks="科目名称"/>
<column name="DATA_DT" type="java.sql.Types.NVARCHAR(20)" remarks="数据日期"/>
<column name="RPT_ID" type="java.sql.Types.NVARCHAR(60)" remarks="客户财报信息表ID"/>
<column name="RPT_TAB_TYPE" type="java.sql.Types.NVARCHAR(20)" remarks="财报报表类型"/>
<column name="ITEM_CODE" type="java.sql.Types.NVARCHAR(60)" remarks="科目编号"/>
<column name="ITEM_NAME" type="java.sql.Types.NVARCHAR(1000)" remarks="科目名称"/>
<column name="BEGIN_VAL" type="java.sql.Types.DECIMAL(30,6)" remarks="期初值"/>
<column name="END_VAL" type="java.sql.Types.DECIMAL(30,6)" remarks="期末值"/>
<column name="DATA_COME_FROM_" type="java.sql.Types.NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)" defaultValue="INPUT"/>
@ -77,14 +77,14 @@
<!-- 客户特征变量结果表 -->
<createTable tableName="P_IRS_CUST_FEATURE_RET" remarks="客户特征变量结果表">
<column name="ID" type="java.sql.Types.VARCHAR(50)" remarks="主键ID">
<column name="ID" type="java.sql.Types.NVARCHAR(50)" remarks="主键ID">
<constraints primaryKey="true"/>
</column>
<column name="DATA_DT" type="java.sql.Types.VARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.VARCHAR(60)" remarks="客户编号"/>
<column name="FEATURE_TYPE" type="java.sql.Types.VARCHAR(100)" remarks="特征变量分类"/>
<column name="FEATURE_CODE" type="java.sql.Types.VARCHAR(100)" remarks="特征变量代码"/>
<column name="FEATURE_NAME" type="java.sql.Types.VARCHAR(1000)" remarks="特征变量名称"/>
<column name="DATA_DT" type="java.sql.Types.NVARCHAR(20)" remarks="数据日期"/>
<column name="CUST_NO" type="java.sql.Types.NVARCHAR(60)" remarks="客户编号"/>
<column name="FEATURE_TYPE" type="java.sql.Types.NVARCHAR(100)" remarks="特征变量分类"/>
<column name="FEATURE_CODE" type="java.sql.Types.NVARCHAR(100)" remarks="特征变量代码"/>
<column name="FEATURE_NAME" type="java.sql.Types.NVARCHAR(1000)" remarks="特征变量名称"/>
<column name="FEATURE_VALUE" type="java.sql.Types.DECIMAL(30,6)" remarks="特征变量值"/>
<column name="DATA_COME_FROM_" type="java.sql.Types.NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)" defaultValue="INPUT"/>
<column name="CREATOR_" type="java.sql.Types.NVARCHAR(255)" remarks="创建人"/>

2
irbs.financialTemplate/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -17,7 +17,7 @@
"order" : 100010,
"description":"授权与认证相关数据库表结构",
"locations":[
"liquibase/20240712_FINANCIALTEMPLATE_DDL.xml"
"classpath:/liquibase/20240712_FINANCIALTEMPLATE_DDL.xml"
]
}
]

2
irbs.frontend/package.json

@ -78,7 +78,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.279",
"platform-core": "8.1.281",
"quasar": "2.15.4",
"tailwindcss": "3.4.4",
"vue": "3.4.31",

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

@ -12,9 +12,19 @@
:columns="companyRatingGrid.columns"
:toolbar-actions="companyRatingGrid.buttons"
:query-criteria="{
fieldName: 'triggerType',
operator: 'equals',
value: 'INDEPENDENT',
operator: 'and',
criteria: [
{
fieldName: 'triggerType',
operator: 'equals',
value: 'INDEPENDENT',
},
{
fieldName: 'launchUser',
operator: 'equals',
value: SessionManager.getUser().loginName,
},
],
}"
:sort-by="['-createDate']"
></w-grid>
@ -27,7 +37,7 @@
<script setup lang="ts">
import { ref, shallowRef } from 'vue';
import { useQuasar } from 'quasar';
import { Environment, EnumTools, DictionaryTools, Options, Formater, axios, NotifyManager, Tools } from 'platform-core';
import { Environment, EnumTools, DictionaryTools, Options, Formater, axios, NotifyManager, Tools, SessionManager } from 'platform-core';
import LaunchRatingDialog from './LaunchRatingDialog.vue';
import RatingDialog from './RatingDialog.vue';
import GrayModelDialog from './GrayModelDialog.vue';

80
irbs.frontend/src/views/custRating/LaunchRatingDialog.vue

@ -14,6 +14,11 @@
:columns="customerGrid.columns"
:toolbar-actions="customerGrid.buttons"
:sort-by="['-lastModifyDate']"
:query-criteria="{
fieldName: 'mgerNo',
operator: 'equals',
value: SessionManager.getUser().loginName,
}"
></w-grid>
</div>
</w-dialog>
@ -23,7 +28,7 @@
import { ref, reactive } from 'vue';
import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { axios, noErrorAxios, Environment, NotifyManager, Formater, Tools } from 'platform-core';
import { axios, noErrorAxios, Environment, NotifyManager, Formater, Tools, SessionManager } from 'platform-core';
import { SelectCustomerFlag } from './CustRating.ts';
const { t } = useI18n();
@ -45,6 +50,35 @@ const state = reactive({
flag: SelectCustomerFlag.RATING, //
});
const generateRating = (rows) => {
showLoading();
const requestParams = {
method: 'POST',
headers: { 'content-type': 'application/json;charset=utf-8;' },
url: Environment.apiContextPath('api/irbs/companyRating/generateRating/' + rows[0]['custNo']),
};
noErrorAxios(requestParams)
.then((resp) => {
hideLoading();
emit('refresh');
dialogRef.value.hide();
NotifyManager.info('发起成功');
})
.catch((error) => {
const response = error?.response;
const status = response?.status;
const data = response?.data;
//
if (status === 500 && data.exception === 'java.lang.RuntimeException' && !Tools.isEmpty(data.errorMessage)) {
NotifyManager.error(data.errorMessage);
} else if (status === 500) {
NotifyManager.error(t(data?.errorMessageI18nKey));
} else {
NotifyManager.error(t(status));
}
});
};
const dialogButtons = [
{
label: '确定',
@ -56,33 +90,25 @@ const dialogButtons = [
return;
}
if (state.flag === SelectCustomerFlag.RATING) {
//
showLoading();
const requestParams = {
method: 'POST',
headers: { 'content-type': 'application/json;charset=utf-8;' },
url: Environment.apiContextPath('api/irbs/companyRating/generateRating/' + rows[0]['custNo']),
};
noErrorAxios(requestParams)
.then((resp) => {
hideLoading();
emit('refresh');
dialogRef.value.hide();
NotifyManager.info('发起成功');
})
.catch((error) => {
const response = error?.response;
const status = response?.status;
const data = response?.data;
//
if (status === 500 && data.exception === 'java.lang.RuntimeException' && !Tools.isEmpty(data.errorMessage)) {
NotifyManager.error(data.errorMessage);
} else if (status === 500) {
NotifyManager.error(t(data?.errorMessageI18nKey));
} else {
NotifyManager.error(t(status));
}
//
const monthLimit = await axios.post(Environment.apiContextPath('api/irbs/companyRating/getMonthRatingLimit/' + rows[0]['custNo']));
console.info('monthLimit====', monthLimit);
if (monthLimit?.data?.result === true && monthLimit?.data?.tactics === '1') {
NotifyManager.warn('该客户当月已达评级次数上限(' + monthLimit?.data?.num + '次),无法再次发起评级');
return;
} else if (monthLimit?.data?.result === true && monthLimit?.data?.tactics === '2') {
$q.dialog({
title: '询问',
message: '该客户当月已发起评级次数超过:' + monthLimit?.data?.num + '次,是否继续发起?',
cancel: { noCaps: true },
ok: { noCaps: true },
persistent: true,
}).onOk(() => {
generateRating(rows);
});
} else {
generateRating(rows);
}
} else if (state.flag === SelectCustomerFlag.COGNIZANCE) {
//
const resp = await axios

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

@ -446,7 +446,24 @@
}
"
/>
<q-btn color="primary" label="下一步" @click="qualitativeEditNext" />
<q-btn
color="primary"
label="定性试算"
@click="
() => {
qualitativeEditNext('test');
}
"
/>
<q-btn
color="primary"
label="下一步"
@click="
() => {
qualitativeEditNext('next');
}
"
/>
</q-stepper-navigation>
</template>
</q-splitter>
@ -477,7 +494,24 @@
}
"
/>
<q-btn color="primary" label="下一步" @click="qualitativeEditNext" />
<q-btn
color="primary"
label="定性试算"
@click="
() => {
qualitativeEditNext('test');
}
"
/>
<q-btn
color="primary"
label="下一步"
@click="
() => {
qualitativeEditNext('next');
}
"
/>
</q-stepper-navigation>
</template>
</q-step>
@ -1220,18 +1254,18 @@ const opFormat = (value, row) => {
};
const RatingLevelOptionsComputed = computed(() => {
if (systemParameter.overturnLevel) {
const adjLevel = RatingLevelOptions.filter((item) => {
return item['value'] === state.otherInfoAdjLevel;
});
if (adjLevel.length > 0) {
const filterResult = RatingLevelOptions.filter((item) => {
return item['numberValue'] <= adjLevel[0]['numberValue'] + systemParameter.overturnLevel;
});
return filterResult;
}
}
return [];
// if (systemParameter.overturnLevel) {
// const adjLevel = RatingLevelOptions.filter((item) => {
// return item['value'] === state.otherInfoAdjLevel;
// });
// if (adjLevel.length > 0) {
// const filterResult = RatingLevelOptions.filter((item) => {
// return item['numberValue'] <= adjLevel[0]['numberValue'] + systemParameter.overturnLevel;
// });
// return filterResult;
// }
// }
return RatingLevelOptions;
});
//
@ -1392,7 +1426,7 @@ const quantitativeNext = async () => {
});
};
//
const qualitativeEditNext = () => {
const qualitativeEditNext = async (op) => {
//
const formData = qualitativeFormRef.value.getData();
const submitData = <any>[];
@ -1430,45 +1464,65 @@ const qualitativeEditNext = () => {
});
return;
}
$q.dialog({
title: '询问',
message: '请检查所选数据的正确性,提交并计算结果后无法再次修改,确定要提交吗?',
cancel: true,
persistent: true,
}).onOk(async () => {
if (op === 'test') {
showLoading('正在计算定性得分,请稍等...');
const resp = await axios.post(Environment.apiContextPath('api/irbs/companyRating/qualSaveIndices'), submitData).catch((error) => {
const resp = await axios.post(Environment.apiContextPath('api/irbs/companyRating/qualSaveIndices/' + op), submitData).catch((error) => {
hideLoading();
NotifyManager.error('计算出错,请联系管理员');
console.info('error====', error);
});
if (resp && resp.data) {
loadFirstResult();
hideLoading();
if (resp?.data?.success === true) {
$q.dialog({
title: '消息',
message: '本次试算定性得分为:' + Round(resp.data.qualScore, 2),
cancel: false,
persistent: true,
});
} else if (resp?.data?.success === false && !Tools.isEmpty(resp.data.errorMsg)) {
NotifyManager.error(resp.data.errorMsg);
}
} else {
$q.dialog({
title: '询问',
message: '请检查所选数据的正确性,提交并计算结果后无法再次修改,确定要提交吗?',
cancel: true,
persistent: true,
}).onOk(async () => {
showLoading('正在计算定性得分,请稍等...');
const resp = await axios.post(Environment.apiContextPath('api/irbs/companyRating/qualSaveIndices/' + op), submitData).catch((error) => {
hideLoading();
NotifyManager.error('计算出错,请联系管理员');
console.info('error====', error);
});
if (resp?.data?.success === true) {
loadFirstResult();
axios
.get(Environment.apiContextPath('api/irbs/companyRating/stepAdj'), {
params: { ratingId: state.rating['id'], page: state.viewFlag ? 'detail' : 'apply' },
})
.then((resp) => {
if (resp && resp.data && resp.data.indices) {
state.adjustItemInfo = [];
for (let i = 0; i < resp.data.indices.length; i++) {
let index = resp.data.indices[i];
state.adjustItemObj[index.indexCode] = [i + 1 + '、' + index.indexName, index];
state.adjustItemInfo.push({
value: index.indexValue !== '0' && !Tools.isEmpty(index.indexValue) ? true : false,
indexCode: index.indexCode,
adjustItemName: index.indexName,
});
axios
.get(Environment.apiContextPath('api/irbs/companyRating/stepAdj'), {
params: { ratingId: state.rating['id'], page: state.viewFlag ? 'detail' : 'apply' },
})
.then((resp) => {
if (resp && resp.data && resp.data.indices) {
state.adjustItemInfo = [];
for (let i = 0; i < resp.data.indices.length; i++) {
let index = resp.data.indices[i];
state.adjustItemObj[index.indexCode] = [i + 1 + '、' + index.indexName, index];
state.adjustItemInfo.push({
value: index.indexValue !== '0' && !Tools.isEmpty(index.indexValue) ? true : false,
indexCode: index.indexCode,
adjustItemName: index.indexName,
});
}
adjustItemGridRef.value.setLocalData(state.adjustItemInfo);
}
adjustItemGridRef.value.setLocalData(state.adjustItemInfo);
}
})
.catch((error) => {
console.info('error====', error);
});
}
});
})
.catch((error) => {
console.info('error====', error);
});
}
});
}
};
const loadFirstResult = async () => {
state.qualitativeShowInfo = [];

9
irbs.frontend/src/views/default/RebirthApply.vue

@ -40,11 +40,15 @@
:config-button="false"
:query-form-fields="[
{ name: 'CUST_NO', label: '客户号', type: 'text' },
{ name: 'CUST_NO', label: '客户名称', type: 'text' },
{ name: 'CUST_NAME', label: '客户名称', type: 'text' },
]"
:pagination="{
reqPageStart: 1,
rowsPerPage: 10,
}"
:columns="[
{ name: 'CUST_NO', label: '客户号' },
{ name: 'CUST_NO', label: '客户名称' },
{ name: 'CUST_NAME', label: '客户名称' },
{ name: 'EFFECTIVE_DATE', label: '违约日期', format: Formater.dateOnly() },
{
name: 'defaultProcessStatus',
@ -63,6 +67,7 @@
operator: 'equals',
value: '1',
}"
:sort-by="['-EFFECTIVE_DATE']"
></w-grid>
</w-dialog>
<RebirthDialog ref="rebirthDialogRef" @refresh="refreshTable"></RebirthDialog>

4
irbs.frontend/src/views/report/RptRatingModelFocusDist.vue

@ -127,7 +127,7 @@
},
},
legend: {
data: state.ratioSeriesData,
data: state.ratioLegendData,
},
dataZoom: [
{
@ -214,10 +214,12 @@ const state = reactive({
});
const afterRequestData = (data) => {
console.info('data=======', data);
if (data && data.length > 0) {
state.xData = [];
state.seriesData = [];
state.legendData = [];
state.ratioLegendData = [];
state.ratioSeriesData = [];
const ratingLevel = <any>[];
const totalData = {};

4
irbs.riskExposure/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -29,8 +29,8 @@
"order" : 100000,
"description":"风险暴露分类",
"locations":[
"liquibase/20240327_RISKEXPOSURE_DDL.xml",
"liquibase/20240417_UPDATE_RISKEXPOSURE_DDL.xml"
"classpath:/liquibase/20240327_RISKEXPOSURE_DDL.xml",
"classpath:/liquibase/20240417_UPDATE_RISKEXPOSURE_DDL.xml"
]
}
]

4
irbs.shrcb.poc/src/main/java/irbs/shrcb/poc/ns3/impl/RatingServiceImpl.java

@ -199,7 +199,7 @@ public class RatingServiceImpl implements RatingService {
public RatingCompanyCustomer saveEsbCustomer(CustomerBaseInfo reqCust) throws Exception {
// 清空客户
String sql="delete ESB_RATING_CUSTOMER where CUST_NO=:custNo";
String sql="delete ESB_RATING_CUSTOMER where CUSTOMER_ID=:custNo";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("custNo", reqCust.getCustomerNo());
namedParameterJdbcTemplate.update(sql, paramMap);
@ -271,7 +271,7 @@ public class RatingServiceImpl implements RatingService {
public void saveIrbsCustomer(CustomerBaseInfo reqCust) throws Exception {
// 清空客户
String sql="delete IRBS_CUST_CP_INFO where CUST_NO=:custNo";
String sql="delete IRBS_CUST_CP_INFO where CUSTOMER_ID=:custNo";
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("custNo", reqCust.getCustomerNo());
namedParameterJdbcTemplate.update(sql, paramMap);

2
irbs.shrcb.poc/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -30,7 +30,7 @@
"order" : 1000,
"description":"上农商POC相关表结构",
"locations":[
"liquibase/20240717_SHRCB_POC_ESB_DDL.xml"
"classpath:/liquibase/20240717_SHRCB_POC_ESB_DDL.xml"
]
}
]

Loading…
Cancel
Save