|
|
|
@ -252,7 +252,10 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
if (client != null && StringUtils.isNotBlank(realOrderIds)) {
|
|
|
|
|
String[] orderIdArray = realOrderIds.trim().split(",");
|
|
|
|
|
JSONObject orderInfo = new JSONObject();
|
|
|
|
|
// 获取订单信息
|
|
|
|
|
/**
|
|
|
|
|
* 获取订单信息
|
|
|
|
|
* 通用号调单与其他类型的调单,订单格式不一样,所以区分
|
|
|
|
|
*/
|
|
|
|
|
if (riskEvent.getIntValue("order_type") == 3) {
|
|
|
|
|
for (int i = 0; i < orderIdArray.length; i++) {
|
|
|
|
|
orderInfo = tradeLogService.getOrderDetail(new JSONObject(), riskEvent.getString("client_moniker"), orderIdArray[i], null);
|
|
|
|
@ -320,6 +323,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
}
|
|
|
|
|
return params;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 添加风控事件
|
|
|
|
|
* 更新risk_orders表
|
|
|
|
|
* 记录风控日志
|
|
|
|
|
* @param params
|
|
|
|
|
* @param manager
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void addRiskEvent(JSONObject params, JSONObject manager) {
|
|
|
|
|
params = getEvent(params);
|
|
|
|
@ -357,6 +368,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
setRiskOrders(params);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 下载审核材料
|
|
|
|
|
* @param riskId
|
|
|
|
|
* @param response
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void downloadAuditMaterialZiP(String riskId, HttpServletResponse response) {
|
|
|
|
|
|
|
|
|
@ -371,9 +387,9 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
response.setContentType("application/octet-stream");
|
|
|
|
|
response.setHeader("Content-Disposition", "attachment;filename=" + downloadFilename);
|
|
|
|
|
ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
|
|
|
|
|
for(int i=1;i<=6;i++){
|
|
|
|
|
if(riskMaterial.containsKey("file"+i)){
|
|
|
|
|
List<String> fileList= (List<String>)riskMaterial.get("file"+i);
|
|
|
|
|
for(int i = 1; i <= 6; i++){
|
|
|
|
|
if(riskMaterial.containsKey("file" + i)){
|
|
|
|
|
List<String> fileList= (List<String>) riskMaterial.get("file"+i);
|
|
|
|
|
for(String fileUrl : fileList){
|
|
|
|
|
zos.putNextEntry(new ZipEntry("file" + i+fileUrl.substring(fileUrl.lastIndexOf("/"))));
|
|
|
|
|
InputStream inputStream = new URL(fileUrl).openConnection().getInputStream();
|
|
|
|
@ -393,6 +409,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送邮件
|
|
|
|
|
* 更新事件信息
|
|
|
|
|
* 记录风控日志
|
|
|
|
|
* App推送消息
|
|
|
|
|
* @param riskId
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void sendUploadEmail(String riskId) throws IOException {
|
|
|
|
|
JSONObject event = getRiskEventDetail(riskId);
|
|
|
|
@ -433,6 +457,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* App推送消息
|
|
|
|
|
* 推送类型risk
|
|
|
|
|
* @param event
|
|
|
|
|
*/
|
|
|
|
|
private void sendAppRiskMessage(JSONObject event){
|
|
|
|
|
JSONObject client = clientMapper.findClientByMoniker(event.getString("client_moniker"));
|
|
|
|
|
logger.debug("sendRiskAppMessage-" + client.getString("client_moniker") + "-" + "risk_id:"+event.getString("risk_id"));
|
|
|
|
@ -477,6 +506,15 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 记录消息推送日志
|
|
|
|
|
* @param dev_id
|
|
|
|
|
* @param client_id
|
|
|
|
|
* @param messageType
|
|
|
|
|
* @param dev_token
|
|
|
|
|
* @param remark
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private JSONObject saveAppMessageLog(String dev_id, int client_id, String messageType, String dev_token, String remark) {
|
|
|
|
|
JSONObject log = new JSONObject();
|
|
|
|
|
log.put("dev_id", dev_id);
|
|
|
|
@ -490,6 +528,15 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送拒绝邮件
|
|
|
|
|
* 判断当前事件处理状态是否合理
|
|
|
|
|
* 更新事件
|
|
|
|
|
* 记录风控日志
|
|
|
|
|
* @param riskId
|
|
|
|
|
* @param refuseDescription 拒绝说明
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Transactional
|
|
|
|
|
@Override
|
|
|
|
|
public void sendRefuseEmail(String riskId, String refuseDescription) throws IOException {
|
|
|
|
@ -518,7 +565,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
event.put("result_type",RiskResultTypeEnum.MATERIAL_NOT_PASS.getResultType());
|
|
|
|
|
event.put("submit_url",uploadUrl);
|
|
|
|
|
riskEventMapper.update(event);
|
|
|
|
|
// 日志记录
|
|
|
|
|
riskProcessLogService.addRiskProcessLog(riskId,
|
|
|
|
|
event.getString("fillin_id"),
|
|
|
|
|
event.getString("fillin_person"),
|
|
|
|
@ -531,6 +577,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 发送催促邮件
|
|
|
|
|
* @param riskId
|
|
|
|
|
* @throws IOException
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void sendUrgeEmail(String riskId) throws IOException {
|
|
|
|
|
JSONObject event = getRiskEventDetail(riskId);
|
|
|
|
@ -614,14 +665,47 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
List<JSONObject> orders = new ArrayList();
|
|
|
|
|
int isSendClient = event.getIntValue("is_send_client");
|
|
|
|
|
ctx.setVariable("emailsTos", bdEmails);
|
|
|
|
|
|
|
|
|
|
// 内部调单需要密送的人
|
|
|
|
|
List<String> emailsBccs = new ArrayList<>(Arrays.asList(
|
|
|
|
|
"locky@royalpay.com.au ", "leo.huang@royalpay.com.au",
|
|
|
|
|
"mona.zhang@royalpay.com.au", "weixinfengkong@royalpay.com.au", "thomas.li@royalpay.com.au"
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 如果发送给商户,则商户为收件人
|
|
|
|
|
* 如果不是内部调单,抄送bd;
|
|
|
|
|
* 如果是内部调单,密送bd与上面定义的‘emailsBccs’
|
|
|
|
|
* 如果没有勾选发送商户
|
|
|
|
|
* 如果不是内部调单,直接发送商户;
|
|
|
|
|
* 如果是内部调单,则自定义“"18852852189@163.com"为收件人,密送同上
|
|
|
|
|
*
|
|
|
|
|
* Arrays.asList("18852852189@139.com", "1370256381@qq.com")为本地debug模式的测试邮箱
|
|
|
|
|
*/
|
|
|
|
|
if (isSendClient == 1) {
|
|
|
|
|
ctx.setVariable("emailsTos", clientEmails);
|
|
|
|
|
ctx.setVariable("emailsCcs", bdEmails);
|
|
|
|
|
if (orderType == RiskOrderTypeEnum.ROYALPAY_ORDER.getOrderType().intValue()) {
|
|
|
|
|
ctx.setVariable("emailsBccs", Arrays.asList(
|
|
|
|
|
// "locky@royalpay.com.au ", "zoe.tao@royalpay.com.au", "leo.huang@royalpay.com.au",
|
|
|
|
|
// "mona.zhang@royalpay.com.au", "weixinfengkong@royalpay.com.au", "thomas.li@royalpay.com.au"
|
|
|
|
|
"18852852189@139.com", "1370256381@qq.com"
|
|
|
|
|
ctx.setVariable("emailsCcs", null);
|
|
|
|
|
if (PlatformEnvironment.getEnv().isDebug()) {
|
|
|
|
|
emailsBccs = new ArrayList<>(Arrays.asList(
|
|
|
|
|
"18852852189@139.com", "1370256381@qq.com"
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
emailsBccs.addAll(bdEmails);
|
|
|
|
|
ctx.setVariable("emailsBccs", emailsBccs);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (orderType == RiskOrderTypeEnum.ROYALPAY_ORDER.getOrderType().intValue()) {
|
|
|
|
|
if (PlatformEnvironment.getEnv().isDebug()) {
|
|
|
|
|
emailsBccs = new ArrayList<>(Arrays.asList(
|
|
|
|
|
"18852852189@139.com", "1370256381@qq.com"
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
emailsBccs.addAll(bdEmails);
|
|
|
|
|
ctx.setVariable("emailsBccs", emailsBccs);
|
|
|
|
|
ctx.setVariable("emailsTos", Arrays.asList(
|
|
|
|
|
"18852852189@163.com"
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -672,6 +756,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
return UPLOAD_MAIL_PREFIX + codeKey;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取风控事件上传的材料
|
|
|
|
|
* @param param
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public JSONObject getRiskMaterial(JSONObject param) {
|
|
|
|
|
List<JSONObject> riskMaterialList = riskMaterialMapper.findAllMaterials(param.getString("risk_id"));
|
|
|
|
@ -680,14 +769,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
List<JSONObject> files = riskFileMapper.findAllFiles(fileNew.getString("material_id"));
|
|
|
|
|
for(JSONObject file : files){
|
|
|
|
|
int fileType = file.getIntValue("file_type");
|
|
|
|
|
if(!fileNew.containsKey("file"+fileType)){
|
|
|
|
|
if(!fileNew.containsKey("file" + fileType)){
|
|
|
|
|
List<String> fileList = new ArrayList<>();
|
|
|
|
|
fileList.add(file.getString("file_url"));
|
|
|
|
|
fileNew.put("file"+fileType,fileList);
|
|
|
|
|
fileNew.put("file" + fileType, fileList);
|
|
|
|
|
}else{
|
|
|
|
|
List<String> fileList = (List<String>)fileNew.get("file"+fileType);
|
|
|
|
|
List<String> fileList = (List<String>) fileNew.get("file"+fileType);
|
|
|
|
|
fileList.add(file.getString("file_url"));
|
|
|
|
|
fileNew.put("file"+fileType,fileList);
|
|
|
|
|
fileNew.put("file" + fileType, fileList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return fileNew;
|
|
|
|
@ -696,6 +785,12 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 由于之前误把system_transaction_id当做order_id,
|
|
|
|
|
* 所以新增real_order_id作为order_id,
|
|
|
|
|
* 对已经建立的风控事件,补全real_order_id字段
|
|
|
|
|
* 后面查找订单时会根据client_id与real_order_id查找
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional
|
|
|
|
|
public void completeEventRealOrderIds() {
|
|
|
|
@ -847,12 +942,17 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检查是否有需要的调单事件待处理,由前端弹框提醒
|
|
|
|
|
* @param manager
|
|
|
|
|
* @param notices
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void checkTodo(JSONObject manager, List<TodoNotice> notices) {
|
|
|
|
|
/**
|
|
|
|
|
* 1、判断登录的角色是不是BD
|
|
|
|
|
* 2、列出BD管理的商户
|
|
|
|
|
* 3、
|
|
|
|
|
* 3、遍历商户,如果有调单事件退出循环,noticeFlag设为true
|
|
|
|
|
*/
|
|
|
|
|
if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) {
|
|
|
|
|
JSONObject params = new JSONObject();
|
|
|
|
@ -889,6 +989,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
riskEventMapper.deleteRiskEvent(riskId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 某个商户是否存在调单事件
|
|
|
|
|
* @param clientId
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public JSONObject getNoticeInfo(int clientId) {
|
|
|
|
|
|
|
|
|
@ -912,6 +1017,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 调单事件需要上传的材料说明
|
|
|
|
|
* 微信调单与内部调单是固定的
|
|
|
|
|
* 支付宝调单由风控人员录入
|
|
|
|
|
* @param riskId
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public JSONObject getRiskEventMaterialsRemark(String riskId) {
|
|
|
|
|
JSONObject riskEvent = riskEventMapper.findById(riskId);
|
|
|
|
@ -1015,11 +1127,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
|
|
|
|
|
return event;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* risk_orders表补全数据
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void completeOrderAmount() {
|
|
|
|
|
List<JSONObject> riskEventList = getRiskEvents(null);
|
|
|
|
|
for(JSONObject riskEvent:riskEventList){
|
|
|
|
|
if(riskEvent.getIntValue("order_type")==4 || StringUtils.isBlank(riskEvent.getString("real_order_ids"))){
|
|
|
|
|
if(riskEvent.getIntValue("order_type") == 4 || StringUtils.isBlank(riskEvent.getString("real_order_ids"))){
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
String[] order_ids=riskEvent.getString("real_order_ids").split(",");
|
|
|
|
|