风控中台对接-评分结果处理保存

This commit is contained in:
zhanglei 2023-08-24 19:31:11 +08:00
parent 1e82d0596b
commit 2c1d168224
5 changed files with 215 additions and 25 deletions

View File

@ -809,13 +809,10 @@
<attribute name="score_result_id" label="唯一标识" type="STRING" length="32" />
<attribute name="project_no" label="业务申请编号" type="STRING" length="32" />
<attribute name="flow_no" label="流程编号" type="STRING" length="32"/>
<attribute name="result_type" label="推送结果类型:评分结果1反欺诈2" type="STRING" length="32"/>
<attribute name="result_data" label="评分结果" type="STRING" length="2000"/>
<attribute name="result_type" label="推送结果类型:评分结果 score, 反欺诈 fraud" type="STRING" length="32"/>
<attribute name="result_data" label="结果" type="STRING" length="2000"/>
<attribute name="result_status" label="结果状态" type="STRING" length="32"/>
<attribute name="result_status_value" label="结果状态描述" type="STRING" length="32"/>
<attribute name="fraud_alert_code" label="反欺诈预警结果H、S、C" type="STRING" length="32"/>
<attribute name="fraud_taken_code" label="反欺诈判定结果F、K、S、空" type="STRING" length="32"/>
<attribute name="score_result_code" label="评分结果 AA RR RD DD" type="STRING" length="32"/>
<attribute name="input_time" label="登记时间" type="STRING" length="32"/>
</attributes>
<manager>

View File

@ -129,7 +129,14 @@
<param-value>als</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>ScoreResultServlet</servlet-name>
<servlet-class>com.ample.esb.server.ScoreResultServlet</servlet-class>
<init-param>
<param-name>DataSource</param-name>
<param-value>als</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>RewriteRunJavaMethodServlet</servlet-name>
<servlet-class>com.tenwa.workflow.RewriteRunJavaMethodServlet</servlet-class>
@ -311,7 +318,10 @@
<servlet-name>SmsRptServlet</servlet-name>
<url-pattern>/smsRpt</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ScoreResultServlet</servlet-name>
<url-pattern>/scoreResult</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DocDownloadZipServlet</servlet-name>
<url-pattern>/servlet/view/docDownloadZipServlet</url-pattern>

View File

@ -0,0 +1,44 @@
package com.ample.esb.server;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.ARE;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* 评分结果推送接收接口
*/
public class ScoreResultServlet extends HttpServlet {
public ScoreResultServlet() {
}
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("application/xml;charset:utf-8");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0L);
response.setCharacterEncoding("utf-8");
BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream()));
StringBuilder stb = new StringBuilder();
String xmlHead = "";
String xmlContent = "";
String line = null;
while ((line = in.readLine()) != null) {
stb.append(line);
}
ARE.getLog().info("接收到Rpt记录" + stb.toString());
String userid = request.getParameter("userid");
JSONObject resultJson = new JSONObject();
resultJson.put("cmd","RPT_RESP");
PrintWriter out = response.getWriter();
ARE.getLog().info("接收到Rpt记录" + 1 + "");
resultJson.put("status","200");
resultJson.put("result","success");
out.print(resultJson.toJSONString());
out.close();
}
}

View File

@ -0,0 +1,157 @@
package com.ample.esb.server;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.jbo.BizObject;
import com.amarsoft.are.jbo.BizObjectManager;
import com.amarsoft.are.jbo.JBOException;
import com.amarsoft.are.jbo.JBOFactory;
import com.ample.sms.FileUtil;
import com.tenwa.httpclient.pboc.PbocXmlUtils;
import com.tenwa.reckon.util.UUIDUtil;
import jbo.app.tenwa.customer.CUSTOMER_FAMILY_TEMP;
import jbo.app.tenwa.customer.CUSTOMER_PERSON;
import jbo.app.tenwa.customer.CUSTOMER_PERSON_TEMP;
import jbo.com.tenwa.lease.comm.LB_GUARANTEE_UNIT_TEMP;
import jbo.com.tenwa.lease.comm.LB_PROJECT_INFO_TEMP;
import jbo.com.tenwa.lease.comm.LB_SMS_NOTICE_TASKS;
import jbo.oti.RC_SCORE_RESULT;
import jbo.oti.RC_SCORE_RESULT_DETAIL;
import jbo.oti.RC_SCORE_RESULT_LOG;
import jbo.oti.SMS_RPT;
import org.apache.commons.collections.CollectionUtils;
import org.dom4j.DocumentException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
public class WriteScoreResultThread extends Thread{
public static LinkedBlockingQueue<String> scoreResultQueue = new LinkedBlockingQueue<>();
private static boolean STOP = false;
private static Thread rptThread = new WriteScoreResultThread();
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private WriteScoreResultThread() {
}
public void run() {
STOP = false;
try {
while(!STOP) {
String rptXmlStr = scoreResultQueue.take();
saveSmsRpt(rptXmlStr);
}
} catch (Exception var5) {
var5.printStackTrace();
STOP = true;
rptThread = null;
}
}
public static boolean rptIsAlive() {
return rptThread.isAlive();
}
public static Thread getRptthread() {
if (rptThread == null) {
rptThread = new WriteScoreResultThread();
}
return rptThread;
}
public void saveSmsRpt(String rptXmlStr) throws JBOException, DocumentException {
JSONObject resJson = PbocXmlUtils.toJson(rptXmlStr);
}
/**
* 保存数据到实体
* @param type 处理类型评分结果 score, 反欺诈 fraud
* @param resJson 结果
*/
private void saveUpdateScoreResult(String type, JSONObject resJson) throws JBOException {
String projectNo = resJson.getString("APPLICATION_NUMBER");//申请号
// TODO: 2023-8-24 解析结果
BizObjectManager rcScoreResult = JBOFactory.getBizObjectManager(RC_SCORE_RESULT.CLASS_NAME);
BizObject rcScoreResultBizObject = rcScoreResult.createQuery("project_no=:project_no").setParameter("project_no", projectNo).getSingleResult(true);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //日期格式
String date = sdf.format(new Date()); //将系统时间转换成上方指定类型
String resultId = UUIDUtil.getUUID();
if(null == rcScoreResultBizObject){
rcScoreResultBizObject = rcScoreResult.newObject();
rcScoreResultBizObject.setAttributeValue("score_result_id", resultId);
rcScoreResultBizObject.setAttributeValue("project_no", projectNo);
rcScoreResultBizObject.setAttributeValue("input_time", date);
}else {
resultId = rcScoreResultBizObject.getAttribute("score_result_id").toString();
}
JSONObject blazeResultJson = resJson.getJSONObject("BLAZERESULT");//评分结果项
String resultCode = blazeResultJson.getString("RESULT_CODE");// 评分结果状态 1000为成功其他失败
String result = blazeResultJson.getString("RESULT");//评分结果 AA RR RD DD
JSONObject fraudResultJson = resJson.getJSONObject("FRAUD_RESULT");// 反欺诈结果
String fraudAlert = fraudResultJson.getString("FRAUD_ALERT");// 反欺诈预警结果HSC
String actionTaken = fraudResultJson.getString("ACTION_TAKEN");// 反欺诈判定结果FKS
rcScoreResultBizObject.setAttributeValue("score_result_code", result);// 评分结果 AA RR RD DD
rcScoreResultBizObject.setAttributeValue("fraud_alert_code", fraudAlert);// 反欺诈预警结果HSC
rcScoreResultBizObject.setAttributeValue("fraud_taken_code", actionTaken);// 反欺诈判定结果FKS
rcScoreResultBizObject.setAttributeValue("update_time", date);
if("score".equals(type)){
rcScoreResultBizObject.setAttributeValue("score_result_data", resJson.toJSONString());
rcScoreResultBizObject.setAttributeValue("score_result_status", resultCode);
rcScoreResultBizObject.setAttributeValue("score_result_status_value", "失败");
if("1000".equals(resultCode)){
rcScoreResultBizObject.setAttributeValue("score_result_status_value", "成功");
}
}else {
rcScoreResultBizObject.setAttributeValue("fraud_result_data", resJson.toJSONString());
rcScoreResultBizObject.setAttributeValue("fraud_result_status", resultCode);
rcScoreResultBizObject.setAttributeValue("fraud_result_status_value", "失败");
if("1000".equals(resultCode)){
rcScoreResultBizObject.setAttributeValue("fraud_result_status_value", "成功");
}
rcScoreResultBizObject.setAttributeValue("fraud_result_status", resultCode);
}
rcScoreResult.saveObject(rcScoreResultBizObject);
if("score".equals(type)){
BizObjectManager rcScoreResultDetail = JBOFactory.getBizObjectManager(RC_SCORE_RESULT_DETAIL.CLASS_NAME);
BizObjectManager lbProjectInfo = JBOFactory.getBizObjectManager(LB_PROJECT_INFO_TEMP.CLASS_NAME);// 项目信息
BizObjectManager customerPerson = JBOFactory.getBizObjectManager(CUSTOMER_PERSON_TEMP.CLASS_NAME);// 承租人
BizObjectManager customerFamily = JBOFactory.getBizObjectManager(CUSTOMER_FAMILY_TEMP.CLASS_NAME);// 共同申请人
BizObjectManager lbGuaranteeUnit = JBOFactory.getBizObjectManager(LB_GUARANTEE_UNIT_TEMP.CLASS_NAME);// 担保人
List<BizObject> rcScoreResultDetailBizObjectList = rcScoreResultDetail.createQuery("project_no=:project_no").setParameter("project_no", projectNo).getResultList(true);
if(CollectionUtils.isEmpty(rcScoreResultDetailBizObjectList)){
rcScoreResultDetailBizObjectList = new ArrayList<>();
JSONArray personList = resJson.getJSONArray("NCIICS");//实名认证列表
JSONArray scoreResults = resJson.getJSONArray("SCORERESULTS");//评分列表
if(personList.size() >= scoreResults.size()){
}
BizObject bizObject = rcScoreResultDetail.newObject();
}
}
BizObjectManager rcScoreResultLog = JBOFactory.getBizObjectManager(RC_SCORE_RESULT_LOG.CLASS_NAME);
BizObject rcScoreResultLogBizObject = rcScoreResultLog.newObject();
rcScoreResultLogBizObject.setAttributeValue("score_result_id", resultId);
rcScoreResultLogBizObject.setAttributeValue("project_no", projectNo);
rcScoreResultLogBizObject.setAttributeValue("score_result_data", resJson.toJSONString());
rcScoreResultLogBizObject.setAttributeValue("result_status", resultCode);
rcScoreResultLogBizObject.setAttributeValue("result_status_value", "失败");
if("1000".equals(resultCode)){
rcScoreResultLogBizObject.setAttributeValue("result_status_value", "成功");
}
rcScoreResultLogBizObject.setAttributeValue("input_time", date);
rcScoreResultLog.saveObject(rcScoreResultLogBizObject);
// bo.setAttributeValue(key,rptJsn.getString(key));
}
}

View File

@ -51,24 +51,6 @@ public interface RC_SCORE_RESULT_LOG {
public static final String result_status_value = "result_status_value";
/**
* 反欺诈预警结果HSC
*/
public static final String fraud_alert_code = "fraud_alert_code";
/**
* 反欺诈判定结果FKS
*/
public static final String fraud_taken_code = "fraud_taken_code";
/**
* 评分结果 AA RR RD DD
*/
public static final String score_result_code = "score_result_code";
/**
* 登记时间
*/