@ -6,15 +6,21 @@ import au.com.royalpay.payment.core.exceptions.OrderNotExistsException;
import au.com.royalpay.payment.core.exceptions.OrderNotMatchException ;
import au.com.royalpay.payment.core.exceptions.OrderNotMatchException ;
import au.com.royalpay.payment.manage.mappers.log.AppMessageLogMapper ;
import au.com.royalpay.payment.manage.mappers.log.AppMessageLogMapper ;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper ;
import au.com.royalpay.payment.manage.mappers.payment.OrderMapper ;
import au.com.royalpay.payment.manage.mappers.payment.TransactionMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskEventMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskEventMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskFileMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskFileMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper ;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskOrdersMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientDeviceTokenMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper ;
import au.com.royalpay.payment.manage.mappers.system.ClientBDMapper ;
import au.com.royalpay.payment.manage.notice.core.MailService ;
import au.com.royalpay.payment.manage.notice.core.MailService ;
import au.com.royalpay.payment.manage.pushMessage.APNSMessageHelper ;
import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder ;
import au.com.royalpay.payment.manage.pushMessage.bean.AppManagerMessageBuilder ;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService ;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService ;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskMaterialService ;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskProcessLogService ;
import au.com.royalpay.payment.manage.riskbusiness.enums.RiskEmailStatusEnum ;
import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum ;
import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum ;
import au.com.royalpay.payment.manage.signin.beans.TodoNotice ;
import au.com.royalpay.payment.manage.signin.beans.TodoNotice ;
import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider ;
import au.com.royalpay.payment.manage.signin.core.ManagerTodoNoticeProvider ;
@ -29,6 +35,7 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.exceptions.ServerErrorException ;
import au.com.royalpay.payment.tools.exceptions.ServerErrorException ;
import au.com.royalpay.payment.tools.threadpool.RoyalThreadPoolExecutor ;
import au.com.royalpay.payment.tools.threadpool.RoyalThreadPoolExecutor ;
import au.com.royalpay.payment.tools.utils.PageListUtils ;
import au.com.royalpay.payment.tools.utils.PageListUtils ;
import com.alibaba.fastjson.JSON ;
import com.alibaba.fastjson.JSONObject ;
import com.alibaba.fastjson.JSONObject ;
import com.github.miemiedev.mybatis.paginator.domain.Order ;
import com.github.miemiedev.mybatis.paginator.domain.Order ;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds ;
import com.github.miemiedev.mybatis.paginator.domain.PageBounds ;
@ -42,15 +49,16 @@ import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook ;
import org.apache.poi.xssf.usermodel.XSSFWorkbook ;
import org.slf4j.Logger ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
import org.slf4j.LoggerFactory ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.data.redis.core.StringRedisTemplate ;
import org.springframework.data.redis.core.StringRedisTemplate ;
import org.springframework.stereotype.Service ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
import org.thymeleaf.context.Context ;
import org.thymeleaf.context.Context ;
import org.thymeleaf.spring4.SpringTemplateEngine ;
import org.thymeleaf.spring4.SpringTemplateEngine ;
import javax.servlet.http.HttpServletResponse ;
import javax.servlet.http.HttpServletResponse ;
import java.io.* ;
import java.io.* ;
import java.net.URL ;
import java.net.URL ;
import java.text.ParseException ;
import java.util.* ;
import java.util.* ;
import javax.annotation.Resource ;
import javax.annotation.Resource ;
import java.util.concurrent.LinkedBlockingQueue ;
import java.util.concurrent.LinkedBlockingQueue ;
@ -77,6 +85,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Resource
@Resource
private OrderMapper orderMapper ;
private OrderMapper orderMapper ;
@Resource
@Resource
private TransactionMapper transactionMapper ;
@Resource
private StringRedisTemplate stringRedisTemplate ;
private StringRedisTemplate stringRedisTemplate ;
@Resource
@Resource
private SpringTemplateEngine thymeleaf ;
private SpringTemplateEngine thymeleaf ;
@ -88,17 +98,32 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
private RoyalThreadPoolExecutor royalThreadPoolExecutor ;
private RoyalThreadPoolExecutor royalThreadPoolExecutor ;
private final String UPLOAD_MAIL_PREFIX = "UPLOAD_MAIL" ;
private final String UPLOAD_MAIL_PREFIX = "UPLOAD_MAIL" ;
@Resource
private RiskProcessLogService riskProcessLogService ;
@Resource
@Resource
private RiskMaterialMapper riskMaterialMapper ;
private RiskMaterialMapper riskMaterialMapper ;
@Resource
@Resource
private RiskMaterialService riskMaterialService ;
@Resource
private RiskFileMapper riskFileMapper ;
private RiskFileMapper riskFileMapper ;
@Resource
@Resource
private RiskOrdersMapper riskOrdersMapper ;
@Resource
private ClientDeviceTokenMapper clientDeviceTokenMapper ;
private ClientDeviceTokenMapper clientDeviceTokenMapper ;
@Resource
@Resource
private AppMessageLogMapper appMessageLogMapper ;
private AppMessageLogMapper appMessageLogMapper ;
private Map < String , AppMsgSender > senderMap = new HashMap < > ( ) ;
private Map < String , AppMsgSender > senderMap = new HashMap < > ( ) ;
@Resource
private APNSMessageHelper apnsMessageHelper ;
@Resource
public void setAppMsgSenders ( AppMsgSender [ ] senders ) {
Arrays . stream ( senders ) . forEach ( appMsgSender - > senderMap . put ( appMsgSender . devType ( ) , appMsgSender ) ) ;
}
private ThreadPoolExecutor sendingAppleMsgPool = new ThreadPoolExecutor ( 10 , 30 , 5 , TimeUnit . SECONDS , new LinkedBlockingQueue < Runnable > ( ) ) ;
private ThreadPoolExecutor sendingAppleMsgPool = new ThreadPoolExecutor ( 10 , 30 , 5 , TimeUnit . SECONDS , new LinkedBlockingQueue < Runnable > ( ) ) ;
@Override
@Override
@ -110,7 +135,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
public JSONObject getRiskEventsByPage ( JSONObject params , JSONObject manager ) {
public JSONObject getRiskEventsByPage ( JSONObject params , JSONObject manager ) {
// 如果登录的角色是BD, 添加查询条件result_type为1,2,3,4, order_type为1或者2
// 如果登录的角色是BD, 添加查询条件result_type为1,2,3,4, order_type为1或者2
if ( ManagerRole. BD_USER . hasRole ( manager . getIntValue ( "role" ) ) ) {
if ( manager ! = null & & ManagerRole. BD_USER . hasRole ( manager . getIntValue ( "role" ) ) ) {
params . put ( "bd_id" , manager . getString ( "manager_id" ) ) ;
params . put ( "bd_id" , manager . getString ( "manager_id" ) ) ;
List < Integer > orderTypes = Arrays . asList ( RiskOrderTypeEnum . WECHAT_ORDER . getOrderType ( ) ,
List < Integer > orderTypes = Arrays . asList ( RiskOrderTypeEnum . WECHAT_ORDER . getOrderType ( ) ,
RiskOrderTypeEnum . ALIPAY_ORDER . getOrderType ( ) ) ;
RiskOrderTypeEnum . ALIPAY_ORDER . getOrderType ( ) ) ;
@ -124,9 +149,82 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
}
}
PageList < JSONObject > riskEvents = riskEventMapper . listRisksByPage ( params , new PageBounds ( params . getInteger ( "page" ) , 10 , Order . formString ( "create_time.desc" ) ) ) ;
PageList < JSONObject > riskEvents = riskEventMapper . listRisksByPage ( params , new PageBounds ( params . getInteger ( "page" ) , 10 , Order . formString ( "create_time.desc" ) ) ) ;
/ * *
* 以 下 为 判 断 调 单 事 件 是 否 过 期
* 微 信 调 单 、 支 付 宝 调 单 、 royalpay 调 单
* 未 处 理 、 已 发 送 、 待 审 核 、 打 回
* /
Date currentDate = new Date ( ) , replyDate ;
Integer resultType , orderType ;
boolean isPassTimeout = false ;
for ( JSONObject riskEvent : riskEvents ) {
try {
replyDate = DateUtils . parseDate ( riskEvent . getString ( "reply_email_date" ) , "yyyy-MM-dd" ) ;
} catch ( ParseException e ) {
replyDate = currentDate ;
e . printStackTrace ( ) ;
}
resultType = riskEvent . getInteger ( "result_type" ) ;
orderType = riskEvent . getInteger ( "order_type" ) ;
isPassTimeout = ( currentDate . after ( replyDate ) ) & &
( ! resultType . equals ( RiskResultTypeEnum . MATERIAL_AUDIT_PASS . getResultType ( ) ) ) & &
( ! resultType . equals ( RiskResultTypeEnum . ALREADY_HANDLED . getResultType ( ) ) ) & &
( ! orderType . equals ( RiskOrderTypeEnum . WARNING_ORDER . getOrderType ( ) ) ) & &
( ! orderType . equals ( RiskOrderTypeEnum . GENERAL_ORDER . getOrderType ( ) ) ) ;
riskEvent . put ( "pass_timeout" , isPassTimeout ) ;
// 材料拒绝说明
List < JSONObject > materialList = riskMaterialMapper . findAllMaterials ( riskEvent . getString ( "risk_id" ) ) ;
if ( ! materialList . isEmpty ( ) ) {
riskEvent . put ( "refuse_description" , materialList . get ( 0 ) . getString ( "refuse_description" ) ) ;
}
}
return PageListUtils . buildPageListResult ( riskEvents ) ;
return PageListUtils . buildPageListResult ( riskEvents ) ;
}
}
@Override
public List < JSONObject > analysisByIndustry ( JSONObject params , JSONObject manager ) {
List < JSONObject > industryAnalysis = riskEventMapper . analysisByIndustry ( params ) ;
for ( JSONObject industry : industryAnalysis ) {
if ( StringUtils . isBlank ( industry . getString ( "industry" ) ) ) {
industry . put ( "industry" , "未知行业" ) ;
}
}
return industryAnalysis ;
}
private List < String > industryArray ( ) {
List < String > industryArray = new ArrayList < > ( ) ;
industryArray . add ( "鞋包服饰" ) ;
industryArray . add ( "机票行业" ) ;
industryArray . add ( "软件服务" ) ;
industryArray . add ( "旅游票务" ) ;
industryArray . add ( "国际租车" ) ;
industryArray . add ( "医疗服务(出国)" ) ;
industryArray . add ( "医疗服务(不出国)" ) ;
industryArray . add ( "留学教育(网络教育)" ) ;
industryArray . add ( "留学教育(一年及以下)" ) ;
industryArray . add ( "其它货物贸易行业" ) ;
industryArray . add ( "文具/办公用品" ) ;
industryArray . add ( "综合商城" ) ;
industryArray . add ( "酒店行业" ) ;
industryArray . add ( "教育行业" ) ;
industryArray . add ( "国际物流" ) ;
industryArray . add ( "数码电器" ) ;
industryArray . add ( "母婴" ) ;
industryArray . add ( "化妆品" ) ;
industryArray . add ( "食品" ) ;
industryArray . add ( "留学教育(一年以上)" ) ;
industryArray . add ( "其它服务行业" ) ;
industryArray . add ( "未知行业" ) ;
return industryArray ;
}
@Override
public List < JSONObject > analysisByAmount ( JSONObject params , JSONObject manager ) {
return riskEventMapper . analysisByAmount ( params ) ;
}
@Override
@Override
public JSONObject getRiskEventDetail ( String riskId ) {
public JSONObject getRiskEventDetail ( String riskId ) {
@ -146,18 +244,18 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Override
@Override
public List < JSONObject > getRiskEventOrderList ( JSONObject riskEvent ) {
public List < JSONObject > getRiskEventOrderList ( JSONObject riskEvent ) {
String orderIds = riskEvent . getString ( "order_ids" ) ;
//String orderIds = riskEvent.getString("order_ids");
String realOrderIds = riskEvent . getString ( "real_order_ids" ) ;
JSONObject client = clientMapper . findClientByMonikerAll ( riskEvent . getString ( "client_moniker" ) ) ;
JSONObject client = clientMapper . findClientByMonikerAll ( riskEvent . getString ( "client_moniker" ) ) ;
List < JSONObject > tradeLogs = new ArrayList < > ( ) ;
List < JSONObject > tradeLogs = new ArrayList < > ( ) ;
if ( StringUtils . isNotBlank ( orderIds ) ) {
// 通用号调单会有client为空的情况, 所以无法查到订单信息
String [ ] orderIdArray = orderIds . trim ( ) . split ( "," ) ;
if ( client ! = null & & StringUtils . isNotBlank ( realOrderIds ) ) {
String [ ] orderIdArray = realOrderIds . trim ( ) . split ( "," ) ;
JSONObject orderInfo = new JSONObject ( ) ;
JSONObject orderInfo = new JSONObject ( ) ;
String realOrderId = "" ;
// 获取订单信息
// 获取订单信息
if ( riskEvent . getIntValue ( "order_type" ) = = 3 ) {
if ( riskEvent . getIntValue ( "order_type" ) = = 3 ) {
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
realOrderId = orderMapper . findOrderById ( orderIdArray [ i ] , client . getIntValue ( "client_id" ) ) . getString ( "order_id" ) ;
orderInfo = tradeLogService . getOrderDetail ( new JSONObject ( ) , riskEvent . getString ( "client_moniker" ) , orderIdArray [ i ] , null ) ;
orderInfo = tradeLogService . getOrderDetail ( new JSONObject ( ) , riskEvent . getString ( "client_moniker" ) , realOrderId , null ) ;
tradeLogs . add ( orderInfo ) ;
tradeLogs . add ( orderInfo ) ;
}
}
} else {
} else {
@ -170,8 +268,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
return tradeLogs ;
return tradeLogs ;
}
}
@Override
private JSONObject getEvent ( JSONObject params ) {
public void addRiskEvent ( JSONObject params , JSONObject manager ) {
// 通用号调单不需要填写client_moniker
// 通用号调单不需要填写client_moniker
JSONObject client = null ;
JSONObject client = null ;
String clientMoniker = params . getString ( "client_moniker" ) ;
String clientMoniker = params . getString ( "client_moniker" ) ;
@ -182,8 +279,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
}
}
}
}
params . put ( "fillin_id" , manager . getString ( "manager_id" ) ) ;
params . put ( "fillin_person" , manager . getString ( "display_name" ) ) ;
String orderIds = params . getString ( "order_ids" ) ;
String orderIds = params . getString ( "order_ids" ) ;
if ( StringUtils . isNotBlank ( orderIds ) ) {
if ( StringUtils . isNotBlank ( orderIds ) ) {
// 去除所有空格与中文逗号', '
// 去除所有空格与中文逗号', '
@ -192,26 +287,74 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
params . put ( "order_ids" , orderIds ) ;
params . put ( "order_ids" , orderIds ) ;
String [ ] orderIdArray = orderIds . split ( "," ) ;
String [ ] orderIdArray = orderIds . split ( "," ) ;
List < String > orderAmountList = new ArrayList < > ( ) ;
List < String > orderAmountList = new ArrayList < > ( ) ;
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
List < String > realOrderIdList = new ArrayList < > ( ) ;
JSONObject orderInfo = orderMapper . findOrderById ( orderIdArray [ i ] , client . getIntValue ( "client_id" ) ) ;
/ * *
// 判断该笔订单是否存在,是否属于该商户
* 通 用 号 调 单 的 时 候 , 是 不 用 填 写 client_moniker 的 , 但 是 系 统 需 要 client_id 关 联 查 询 订 单 信 息 ,
if ( orderInfo = = null )
* 所 以 当 client 为 空 的 时 候 , 就 不 去 校 验 订 单 的 信 息 了 , 从 而 order_amounts 字 段 为 空
throw new OrderNotExistsException ( ) ;
* 带 来 的 影 响 是 前 台 根 据 金 额 字 段 查 询 对 该 风 控 事 件 就 不 起 作 用 了 。
else {
* /
if ( ! clientMoniker . equals ( orderInfo . getString ( "partner_code" ) ) ) {
if ( client ! = null ) {
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
PageList < JSONObject > transactionList = transactionMapper . findByClientIdAndSystemTransactionId ( client . getIntValue ( "client_id" ) , orderIdArray [ i ] , new PageBounds ( Order . formString ( "transaction_time.desc" ) ) ) ;
// 判断该笔订单是否存在,是否属于该商户
// 由于查询订单时已经关联商户了,所以只会抛出订单不匹配的异常
if ( transactionList = = null | | transactionList . size ( ) < = 0 )
throw new OrderNotMatchException ( ) ;
throw new OrderNotMatchException ( ) ;
/ *
else {
if ( ! clientMoniker . equals ( orderInfo . getString ( "client_moniker" ) ) ) {
throw new OrderNotMatchException ( ) ;
}
orderAmountList . add ( orderInfo . getString ( "total_amount" ) ) ;
}
}
orderAmountList . add ( orderInfo . getString ( "total_amount" ) ) ;
* /
// 将订单order_id存入数据库方便后面快速查询
JSONObject orderInfo = transactionList . get ( 0 ) ;
realOrderIdList . add ( orderInfo . getString ( "order_id" ) ) ;
orderAmountList . add ( orderInfo . getString ( "clearing_amount" ) ) ;
}
}
params . put ( "order_amounts" , StringUtils . join ( orderAmountList , "," ) ) ;
params . put ( "real_order_ids" , StringUtils . join ( realOrderIdList , "," ) ) ;
}
}
params . put ( "order_amounts" , StringUtils . join ( orderAmountList , "," ) ) ;
}
}
return params ;
}
@Override
public void addRiskEvent ( JSONObject params , JSONObject manager ) {
params = getEvent ( params ) ;
riskEventMapper . save ( params ) ;
riskEventMapper . save ( params ) ;
setRiskOrders ( params ) ;
params = riskEventMapper . findAll ( params ) . get ( 0 ) ;
riskProcessLogService . addRiskProcessLog ( params . getString ( "risk_id" ) ,
params . getString ( "fillin_id" ) ,
params . getString ( "fillin_person" ) ,
RiskResultTypeEnum . NOT_HANDLED . getRemark ( ) ,
RiskResultTypeEnum . NOT_HANDLED . getResultType ( ) ,
RiskResultTypeEnum . NOT_HANDLED . getResultType ( ) ) ;
}
private void setRiskOrders ( JSONObject params ) {
if ( StringUtils . isNotBlank ( params . getString ( "order_ids" ) ) ) {
String riskId = params . getString ( "risk_id" ) ;
String orderIds = params . getString ( "real_order_ids" ) ;
for ( String orderId : orderIds . split ( "," ) ) {
JSONObject order = transactionMapper . findByOrderId ( orderId ) ;
JSONObject riskOrder = new JSONObject ( ) ;
riskOrder . put ( "risk_id" , riskId ) ;
riskOrder . put ( "order_id" , orderId ) ;
riskOrder . put ( "clearing_amount" , order . getString ( "clearing_amount" ) ) ;
riskOrdersMapper . save ( riskOrder ) ;
}
}
}
}
@Override
@Override
public void updateRiskEvent ( JSONObject params ) {
public void updateRiskEvent ( JSONObject params ) {
params = getEvent ( params ) ;
riskEventMapper . update ( params ) ;
riskEventMapper . update ( params ) ;
riskOrdersMapper . clearOrders ( params . getString ( "risk_id" ) ) ;
setRiskOrders ( params ) ;
}
}
@Override
@Override
@ -256,51 +399,61 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
Context ctx = getMailContext ( event ) ;
Context ctx = getMailContext ( event ) ;
final List < String > emailsTos = ( List < String > ) ctx . getVariable ( "emailsTos" ) ;
final List < String > emailsTos = ( List < String > ) ctx . getVariable ( "emailsTos" ) ;
final List < String > emailsCcs = ctx . getVariable ( "emailsCcs" ) = = null ? new ArrayList < > ( ) : ( List < String > ) ctx . getVariable ( "emailsCcs" ) ;
final List < String > emailsCcs = ctx . getVariable ( "emailsCcs" ) = = null ? new ArrayList < > ( ) : ( List < String > ) ctx . getVariable ( "emailsCcs" ) ;
final List < String > emailsBccs = ctx . getVariable ( "emailsBccs" ) = = null ? new ArrayList < > ( ) : ( List < String > ) ctx . getVariable ( "emailsBccs" ) ;
final String title = ( String ) ctx . getVariable ( "title" ) ;
final String title = ( String ) ctx . getVariable ( "title" ) ;
final String content = thymeleaf . process ( "mail/risk_upload_mail.html" , ctx ) ;
final String content = thymeleaf . process ( "mail/risk_upload_mail.html" , ctx ) ;
final String uploadUrl = ( String ) ctx . getVariable ( "uploadUrl" ) ;
final String uploadUrl = ( String ) ctx . getVariable ( "uploadUrl" ) ;
royalThreadPoolExecutor . execute ( ( ) - > {
royalThreadPoolExecutor . execute ( ( ) - > {
try {
try {
String emailId = mailService . sendRiskEmail ( title , emailsTos . isEmpty ( ) ? "" : StringUtils . join ( emailsTos , "," ) ,
String emailId = mailService . sendRiskEmail ( title ,
emailsCcs . isEmpty ( ) ? "" : StringUtils . join ( emailsCcs , "," ) , "" , content , null , event . getIntValue ( "order_type" ) ) ;
emailsTos . isEmpty ( ) ? "" : StringUtils . join ( emailsTos , "," ) ,
event . put ( "email_status" , 1 ) ;
emailsCcs . isEmpty ( ) ? "" : StringUtils . join ( emailsCcs , "," ) ,
emailsBccs . isEmpty ( ) ? "" : StringUtils . join ( emailsBccs , "," ) ,
content , null , event . getIntValue ( "order_type" ) ) ;
event . put ( "email_status" , RiskEmailStatusEnum . ALREADY_SEND . getEmailStatus ( ) ) ;
event . put ( "result_type" , RiskResultTypeEnum . SEND_EMAIL_TO_BD . getResultType ( ) ) ;
event . put ( "result_type" , RiskResultTypeEnum . SEND_EMAIL_TO_BD . getResultType ( ) ) ;
event . put ( "submit_url" , uploadUrl ) ;
event . put ( "submit_url" , uploadUrl ) ;
Integer orderType = event . getInteger ( "order_type" ) ;
Integer orderType = event . getInteger ( "order_type" ) ;
if ( orderType = = RiskOrderTypeEnum . WARNING_ORDER . getOrderType ( ) ) {
if ( orderType . equals ( RiskOrderTypeEnum . WARNING_ORDER . getOrderType ( ) ) ) {
event . put ( "result_type" , RiskResultTypeEnum . ALREADY_HANDLED . getResultType ( ) ) ;
event . put ( "result_type" , RiskResultTypeEnum . ALREADY_HANDLED . getResultType ( ) ) ;
}
}
riskEventMapper . update ( event ) ;
riskEventMapper . update ( event ) ;
riskProcessLogService . addRiskProcessLog ( event . getString ( "risk_id" ) ,
event . getString ( "fillin_id" ) ,
event . getString ( "fillin_person" ) ,
RiskResultTypeEnum . SEND_EMAIL_TO_BD . getRemark ( ) ,
RiskResultTypeEnum . NOT_HANDLED . getResultType ( ) ,
RiskResultTypeEnum . SEND_EMAIL_TO_BD . getResultType ( ) ) ;
if ( event . getIntValue ( "is_send_client" ) = = 1 ) {
sendAppRiskMessage ( event ) ;
}
} catch ( Exception e ) {
} catch ( Exception e ) {
throw new EmailException ( "Email Sending Failed" , e ) ;
throw new EmailException ( "Email Sending Failed" , e ) ;
}
}
} ) ;
} ) ;
if ( event . getIntValue ( "order_type" ) = = 3 ) {
sendAppRiskMessage ( event ) ;
}
}
}
private void sendAppRiskMessage ( JSONObject event ) {
private void sendAppRiskMessage ( JSONObject event ) {
JSONObject client = clientMapper . findClientByMoniker ( event . getString ( "client_moniker" ) ) ;
JSONObject client = clientMapper . findClientByMoniker ( event . getString ( "client_moniker" ) ) ;
logger . debug ( "sendRiskAppMessage-" + client . getString ( "client_moniker" ) + "-" + "risk_id:" + event . getString ( "risk_id" ) ) ;
logger . debug ( "sendRiskAppMessage-" + client . getString ( "client_moniker" ) + "-" + "risk_id:" + event . getString ( "risk_id" ) ) ;
List < JSONObject > tokens = clientDeviceTokenMapper . listTokensByClient_id ( client . getIntValue ( "client_id" ) ) ;
List < JSONObject > tokens = clientDeviceTokenMapper . listTokensByClient_id ( client . getIntValue ( "client_id" ) ) ;
for ( final JSONObject devToken : tokens ) {
for ( JSONObject devToken : tokens ) {
Runnable task = ( ) - > {
Runnable task = ( ) - > {
String token = devToken . getString ( "token" ) ;
String token = devToken . getString ( "token" ) ;
if ( token = = null ) {
if ( token = = null | | devToken . getString ( "client_type" ) = = null ) {
return ;
return ;
}
}
JSONObject log = saveAppMessageLog ( devToken . getString ( "dev_id" ) , devToken . getIntValue ( "client_id" ) , "risk" , token ,
JSONObject log = saveAppMessageLog ( devToken . getString ( "dev_id" ) , devToken . getIntValue ( "client_id" ) , "risk" + devToken . getString ( "client_type" ) , token ,
event . getString ( "risk_id" ) ) ;
event . getString ( "risk_id" ) ) ;
try {
try {
event . put ( "send_type" , "risk" ) ;
JSONObject type = new JSONObject ( ) ;
JSONObject type = new JSONObject ( ) ;
type . put ( "send_type" , "risk" ) ;
type . put ( "send_type" , "risk" ) ;
type . put ( "id" , event . getString ( "risk_id" ) ) ;
type . put ( "id" , event . getString ( "risk_id" ) ) ;
// apnsMessageHelper.sendAppleMessageDetail(
// LocaleSupport.localeMessage("app.message.title.risk"), LocaleSupport.localeMessage("app.message.body.risk"),
// token, event, type);
AppMsgSender sender = senderMap . get ( devToken . getString ( "client_type" ) ) ;
AppMsgSender sender = senderMap . get ( devToken . getString ( "client_type" ) ) ;
if ( token = = null | | sender = = null ) {
if ( StringUtils. isBlank ( token ) | | sender = = null ) {
return ;
return ;
}
}
JSONObject managerMsg = new JSONObject ( ) ;
JSONObject managerMsg = new JSONObject ( ) ;
@ -308,7 +461,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
managerMsg . put ( "body" ,
managerMsg . put ( "body" ,
LocaleSupport . localeMessage ( "app.message.body.risk" ) ) ;
LocaleSupport . localeMessage ( "app.message.body.risk" ) ) ;
managerMsg . put ( "type" , type ) ;
managerMsg . put ( "type" , type ) ;
managerMsg . put ( "data" , event ) ;
managerMsg . put ( "data" , new JSONObject ( ) ) ;
managerMsg . put ( "msgType" , "risk" ) ;
managerMsg . put ( "msgType" , "risk" ) ;
AppMessage appMessage = new AppManagerMessageBuilder ( managerMsg ) . buildMessage ( ) ;
AppMessage appMessage = new AppManagerMessageBuilder ( managerMsg ) . buildMessage ( ) ;
sender . sendMessage ( appMessage , devToken ) ;
sender . sendMessage ( appMessage , devToken ) ;
@ -317,7 +470,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
} catch ( Exception e ) {
} catch ( Exception e ) {
logger . error ( "出错了:" + e . getMessage ( ) ) ;
logger . error ( "出错了:" + e . getMessage ( ) ) ;
appMessageLogMapper . updateStatus ( log . getString ( "send_id" ) , 1 , e . getMessage ( ) ) ;
appMessageLogMapper . updateStatus ( log . getString ( "send_id" ) , 1 , e . getMessage ( ) ) ;
throw new ServerErrorException ( "Send App " + devToken . getString ( "client_type" ) + " Failed" , e ) ;
throw new ServerErrorException ( "Send App " + devToken . getString ( "client_type" ) + " Failed" + ",token" + token , e ) ;
}
}
} ;
} ;
sendingAppleMsgPool . execute ( task ) ;
sendingAppleMsgPool . execute ( task ) ;
@ -337,11 +490,17 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
}
}
@Transactional
@Override
@Override
public void sendRefuseEmail ( String riskId ) throws IOException {
public void sendRefuseEmail ( String riskId , String refuseDescription ) throws IOException {
JSONObject event = getRiskEventDetail ( riskId ) ;
JSONObject event = getRiskEventDetail ( riskId ) ;
if ( RiskResultTypeEnum . MATERIAL_NOT_PASS . getResultType ( ) . intValue ( ) = = event . getIntValue ( "result_type" ) ) {
throw new BadRequestException ( "Refused Already!" ) ;
}
riskMaterialService . updateRiskMaterial ( riskId , refuseDescription ) ;
Context ctx = getMailContext ( event ) ;
Context ctx = getMailContext ( event ) ;
ctx . setVariable ( "refuse" , true ) ;
ctx . setVariable ( "refuse" , true ) ;
ctx . setVariable ( "refuse_description" , riskMaterialMapper . findAllMaterials ( riskId ) . get ( 0 ) . getString ( "refuse_description" ) ) ;
final List < String > emailsTos = ( List < String > ) ctx . getVariable ( "emailsTos" ) ;
final List < String > emailsTos = ( List < String > ) ctx . getVariable ( "emailsTos" ) ;
final List < String > emailsCcs = ctx . getVariable ( "emailsCcs" ) = = null ? new ArrayList < > ( ) : ( List < String > ) ctx . getVariable ( "emailsCcs" ) ;
final List < String > emailsCcs = ctx . getVariable ( "emailsCcs" ) = = null ? new ArrayList < > ( ) : ( List < String > ) ctx . getVariable ( "emailsCcs" ) ;
final String uploadUrl = ( String ) ctx . getVariable ( "uploadUrl" ) ;
final String uploadUrl = ( String ) ctx . getVariable ( "uploadUrl" ) ;
@ -350,10 +509,17 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
try {
try {
String emailId = mailService . sendRiskEmail ( "You need to resubmit risk materials" , emailsTos . isEmpty ( ) ? "" : StringUtils . join ( emailsTos , "," ) ,
String emailId = mailService . sendRiskEmail ( "You need to resubmit risk materials" , emailsTos . isEmpty ( ) ? "" : StringUtils . join ( emailsTos , "," ) ,
emailsCcs . isEmpty ( ) ? "" : StringUtils . join ( emailsCcs , "," ) , "" , content , null , event . getIntValue ( "order_type" ) ) ;
emailsCcs . isEmpty ( ) ? "" : StringUtils . join ( emailsCcs , "," ) , "" , content , null , event . getIntValue ( "order_type" ) ) ;
event . put ( "email_status" , 2 ) ;
event . put ( "email_status" , RiskEmailStatusEnum . BACK_AND_SEND . getEmailStatus ( ) ) ;
event . put ( "result_type" , RiskResultTypeEnum . MATERIAL_NOT_PASS . getResultType ( ) ) ;
event . put ( "result_type" , RiskResultTypeEnum . MATERIAL_NOT_PASS . getResultType ( ) ) ;
event . put ( "submit_url" , uploadUrl ) ;
event . put ( "submit_url" , uploadUrl ) ;
riskEventMapper . update ( event ) ;
riskEventMapper . update ( event ) ;
// 日志记录
riskProcessLogService . addRiskProcessLog ( riskId ,
event . getString ( "fillin_id" ) ,
event . getString ( "fillin_person" ) ,
RiskResultTypeEnum . MATERIAL_NOT_PASS . getRemark ( ) ,
RiskResultTypeEnum . WAIT_FOR_AUDIT . getResultType ( ) ,
RiskResultTypeEnum . MATERIAL_NOT_PASS . getResultType ( ) ) ;
} catch ( Exception e ) {
} catch ( Exception e ) {
throw new EmailException ( "Email Sending Failed" , e ) ;
throw new EmailException ( "Email Sending Failed" , e ) ;
}
}
@ -396,14 +562,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
expireDay = "3" ;
expireDay = "3" ;
}
}
) * /
) * /
// 原来设定的过期时间是7天 ,现在改成一个月
// 原来设定的过期时间是7天
String expireDay = "3 0";
String expireDay = "3 65 0";
stringRedisTemplate . boundValueOps ( getRiskUploadKey ( codeKey ) ) . set ( codeKeyValue , Long . parseLong ( expireDay ) , TimeUnit . DAYS ) ;
stringRedisTemplate . boundValueOps ( getRiskUploadKey ( codeKey ) ) . set ( codeKeyValue , Long . parseLong ( expireDay ) , TimeUnit . DAYS ) ;
String uploadUrl = PlatformEnvironment . getEnv ( ) . concatUrl ( "/risk/upload/" ) + event . getString ( "risk_id" ) + "/" + codeKey ;
String uploadUrl = PlatformEnvironment . getEnv ( ) . concatUrl ( "/risk/upload/" ) + event . getString ( "risk_id" ) + "/" + codeKey ;
int orderType = event . getIntValue ( "order_type" ) ;
int orderType = event . getIntValue ( "order_type" ) ;
if ( orderType = = 1 | | orderType = = 2 )
if ( orderType = = 1 | | orderType = = 2 )
uploadUrl = PlatformEnvironment . getEnv ( ) . concatUrl ( "/manage.html#/analysis/monitoring/" ) + event . getString ( "risk_id" ) + "/bd/detail?codeKey=" + codeKey ;
uploadUrl = PlatformEnvironment . getEnv ( ) . concatUrl ( "/manage.html#/analysis/monitoring/" ) + event . getString ( "risk_id" ) + "/bd/detail?codeKey=" + codeKey ;
//uploadUrl = "localhost:9009" + "/manage.html#/analysis/monitoring/" + event.getString("risk_id") + "/bd/detail";
List < JSONObject > bds = clientBDMapper . listClientBDInfoAvailable ( client . getIntValue ( "client_id" ) , new Date ( ) ) ;
List < JSONObject > bds = clientBDMapper . listClientBDInfoAvailable ( client . getIntValue ( "client_id" ) , new Date ( ) ) ;
List < String > bdNames = new ArrayList < > ( ) ;
List < String > bdNames = new ArrayList < > ( ) ;
List < String > bdEmails = new ArrayList < > ( ) ;
List < String > bdEmails = new ArrayList < > ( ) ;
@ -434,27 +599,44 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
ctx . setVariable ( "uploadUrl" , uploadUrl ) ;
ctx . setVariable ( "uploadUrl" , uploadUrl ) ;
ctx . setVariable ( "royalpay_order_type" , event . getIntValue ( "royalpay_order_type" ) ) ;
ctx . setVariable ( "royalpay_order_type" , event . getIntValue ( "royalpay_order_type" ) ) ;
ctx . setVariable ( "warning_order_type" , event . getIntValue ( "warning_order_type" ) ) ;
ctx . setVariable ( "warning_order_type" , event . getIntValue ( "warning_order_type" ) ) ;
String [ ] orderIds = event . getString ( "order_ids" ) . split ( "," ) ;
ctx . setVariable ( "description" , event . getString ( "description" ) ) ;
ctx . setVariable ( "is_send_client" , event . getIntValue ( "is_send_client" ) ) ;
String realOrderIdsStr = event . getString ( "real_order_ids" ) ;
String [ ] realOrderIds = { } ;
if ( StringUtils . isNotBlank ( realOrderIdsStr ) ) {
realOrderIds = event . getString ( "real_order_ids" ) . split ( "," ) ;
}
List < JSONObject > orders = new ArrayList ( ) ;
List < JSONObject > orders = new ArrayList ( ) ;
int isSendClient = event . getIntValue ( "is_send_client" ) ;
ctx . setVariable ( "emailsTos" , bdEmails ) ;
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"
) ) ;
}
}
switch ( event . getIntValue ( "order_type" ) ) {
switch ( event . getIntValue ( "order_type" ) ) {
case 1 :
case 1 :
case 2 :
case 2 :
for ( String orderId : orderIds ) {
for ( String orderId : realO rderIds) {
JSONObject order = orderMapper . findOrderById ( orderId , client . getIntValue ( "client_id" ) ) ;
JSONObject order = orderMapper . findOrderById ( orderId , client . getIntValue ( "client_id" ) ) ;
if ( order = = null ) {
if ( order = = null ) {
throw new BadRequestException ( "Order: " + orderId + " not exists" ) ;
throw new BadRequestException ( "Order: " + orderId + " not exists" ) ;
}
}
orders . add ( order ) ;
orders . add ( order ) ;
}
}
ctx . setVariable ( "orders" , orders ) ;
ctx . setVariable ( "orders" , orders ) ;
ctx . setVariable ( "title" , "Your merchants needs to submit risk materials" ) ;
ctx . setVariable ( "title" , "Your merchants needs to submit risk materials" ) ;
ctx . setVariable ( "emailsTos" , bdEmails ) ;
break ;
break ;
case 3 :
case 3 :
String realOrderId = "" ;
for ( String orderId : realOrderIds ) {
for ( String orderId : orderIds ) {
JSONObject order = tradeLogService . getOrderDetail ( new JSONObject ( ) , clientMoniker , orderId , null ) ;
realOrderId = orderMapper . findOrderById ( orderId , client . getIntValue ( "client_id" ) ) . getString ( "order_id" ) ;
JSONObject order = tradeLogService . getOrderDetail ( new JSONObject ( ) , clientMoniker , realOrderId , null ) ;
if ( order = = null ) {
if ( order = = null ) {
throw new BadRequestException ( "Order: " + orderId + " not exists" ) ;
throw new BadRequestException ( "Order: " + orderId + " not exists" ) ;
}
}
@ -477,8 +659,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
// ctx.setVariable("files",attachList);
// ctx.setVariable("files",attachList);
case 4 :
case 4 :
ctx . setVariable ( "title" , "RoyalPay风控调查 — " + client . getString ( "short_name" ) ) ;
ctx . setVariable ( "title" , "RoyalPay风控调查 — " + client . getString ( "short_name" ) ) ;
ctx . setVariable ( "emailsCcs" , bdEmails ) ;
ctx . setVariable ( "emailsTos" , clientEmails ) ;
break ;
break ;
}
}
return ctx ;
return ctx ;
@ -491,9 +671,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
public JSONObject getRiskMaterial ( JSONObject param ) {
public JSONObject getRiskMaterial ( JSONObject param ) {
List < JSONObject > riskMaterialList = riskMaterialMapper . findAllMaterials ( param . getString ( "risk_id" ) ) ;
List < JSONObject > riskMaterialList = riskMaterialMapper . findAllMaterials ( param . getString ( "risk_id" ) ) ;
if ( riskMaterialList ! = null & & riskMaterialList . size ( ) > 0 ) {
if ( riskMaterialList ! = null & & riskMaterialList . size ( ) > 0 ) {
List < JSONObject > files = riskFileMapper . findAllFiles ( riskMaterialList . get ( 0 ) . getString ( "material_id" ) ) ;
JSONObject fileNew = riskMaterialList . get ( 0 ) ;
JSONObject fileNew = new JSONObject ( ) ;
List < JSONObject > files = riskFileMapper . findAllFiles ( fileNew . getString ( "material_id" ) ) ;
fileNew . put ( "description" , riskMaterialList . get ( 0 ) . getString ( "description" ) ) ;
for ( JSONObject file : files ) {
for ( JSONObject file : files ) {
int fileType = file . getIntValue ( "file_type" ) ;
int fileType = file . getIntValue ( "file_type" ) ;
if ( ! fileNew . containsKey ( "file" + fileType ) ) {
if ( ! fileNew . containsKey ( "file" + fileType ) ) {
@ -512,16 +691,43 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
return null ;
return null ;
}
}
@Override
@Transactional
public void completeEventRealOrderIds ( ) {
List < JSONObject > riskEventList = getRiskEvents ( null ) ;
if ( riskEventList ! = null & & riskEventList . size ( ) > 0 ) {
for ( JSONObject riskEvent : riskEventList ) {
String clientMoniker = riskEvent . getString ( "client_moniker" ) ;
JSONObject client = clientMapper . findClientByMonikerAll ( clientMoniker ) ;
String systemTransactionIds = riskEvent . getString ( "order_ids" ) ;
if ( StringUtils . isBlank ( systemTransactionIds ) )
continue ;
String [ ] systemTransactionIdArr = riskEvent . getString ( "order_ids" ) . split ( "," ) ;
List < String > realOrderIds = new ArrayList < > ( ) ;
if ( client = = null )
continue ;
for ( int i = 0 ; i < systemTransactionIdArr . length ; i + + ) {
PageList < JSONObject > transactionList = transactionMapper . findByClientIdAndSystemTransactionId (
client . getIntValue ( "client_id" ) ,
systemTransactionIdArr [ i ] ,
new PageBounds ( Order . formString ( "transaction_time.desc" ) ) ) ;
if ( transactionList ! = null & & transactionList . size ( ) > 0 )
realOrderIds . add ( transactionList . get ( 0 ) . getString ( "order_id" ) ) ;
}
riskEvent . put ( "real_order_ids" , StringUtils . join ( realOrderIds , "," ) ) ;
//updateRiskEvent(riskEvent);
riskEventMapper . update ( riskEvent ) ;
}
}
}
private byte [ ] generateRiskOrders ( JSONObject event ) throws IOException {
private byte [ ] generateRiskOrders ( JSONObject event ) throws IOException {
String [ ] orderIds = event . getString ( "order_ids" ) . split ( "," ) ;
String [ ] orderIds = event . getString ( "order_ids" ) . split ( "," ) ;
JSONObject client = clientMapper . findClientByMonikerAll ( event . getString ( "client_moniker" ) ) ;
JSONObject client = clientMapper . findClientByMonikerAll ( event . getString ( "client_moniker" ) ) ;
Workbook wb = new XSSFWorkbook ( ) ;
Workbook wb = new XSSFWorkbook ( ) ;
String realOrderId = "" ;
for ( String orderId : orderIds ) {
for ( String orderId : orderIds ) {
realOrderId = orderMapper . findOrderById ( orderId , client . getIntValue ( "client_id" ) ) . getString ( "order_id" ) ;
JSONObject orderDetail = tradeLogService . getOrderDetail ( new JSONObject ( ) , event . getString ( "client_moniker" ) , orderId , null ) ;
JSONObject orderDetail = tradeLogService . getOrderDetail ( new JSONObject ( ) , event . getString ( "client_moniker" ) , realOrderId , null ) ;
Sheet sheet = wb . createSheet ( orderId ) ;
Sheet sheet = wb . createSheet ( orderId ) ;
sheet . setDefaultColumnWidth ( ( short ) 40 ) ;
sheet . setDefaultColumnWidth ( ( short ) 40 ) ;
Row row0 = sheet . createRow ( 0 ) ;
Row row0 = sheet . createRow ( 0 ) ;
@ -638,6 +844,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Override
@Override
public void checkTodo ( JSONObject manager , List < TodoNotice > notices ) {
public void checkTodo ( JSONObject manager , List < TodoNotice > notices ) {
/ * *
* 1 、 判 断 登 录 的 角 色 是 不 是 BD
* 2 、 列 出 BD 管 理 的 商 户
* 3 、
* /
if ( ManagerRole . BD_USER . hasRole ( manager . getIntValue ( "role" ) ) ) {
if ( ManagerRole . BD_USER . hasRole ( manager . getIntValue ( "role" ) ) ) {
JSONObject params = new JSONObject ( ) ;
JSONObject params = new JSONObject ( ) ;
params . put ( "bd_id" , manager . getString ( "manager_id" ) ) ;
params . put ( "bd_id" , manager . getString ( "manager_id" ) ) ;
@ -667,4 +878,140 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
}
}
}
}
}
}
@Override
public void deleteRiskEvent ( String riskId ) {
riskEventMapper . deleteRiskEvent ( riskId ) ;
}
@Override
public JSONObject getNoticeInfo ( int clientId ) {
JSONObject client = clientMapper . findClient ( clientId ) ;
if ( client = = null ) {
throw new InvalidShortIdException ( ) ;
}
JSONObject params = new JSONObject ( ) ;
params . put ( "client_moniker" , client . getString ( "client_moniker" ) ) ;
params . put ( "is_send_client" , 1 ) ;
List < Integer > resultTypes = Arrays . asList ( RiskResultTypeEnum . SEND_EMAIL_TO_BD . getResultType ( ) ,
RiskResultTypeEnum . MATERIAL_NOT_PASS . getResultType ( ) ) ;
params . put ( "result_types" , resultTypes ) ;
PageList < JSONObject > riskEventList = riskEventMapper . listRisksByPage ( params , new PageBounds ( Order . formString ( "create_time.desc" ) ) ) ;
JSONObject result = new JSONObject ( ) ;
result . put ( "notice_flag" , false ) ;
if ( riskEventList ! = null & & riskEventList . size ( ) > 0 ) {
result . put ( "notice_flag" , true ) ;
}
return result ;
}
@Override
public JSONObject getRiskEventMaterialsRemark ( String riskId ) {
JSONObject riskEvent = riskEventMapper . findById ( riskId ) ;
Integer orderType = riskEvent . getInteger ( "order_type" ) ;
List < JSONObject > materialItemList = new ArrayList < > ( ) ;
List < String > materialsRemark = new ArrayList < > ( ) ;
if ( orderType . equals ( RiskOrderTypeEnum . WECHAT_ORDER . getOrderType ( ) ) ) {
materialsRemark = Arrays . asList (
"1、物流公司发货单据照片 要求:每笔交易对应的物流单必须提供,且单据必须清晰可见\n" +
"Photos of logistics companies’ goods-delivery documents Requirement: The logistics order record corresponding to each transaction must be provided, and details of records should be clearly visible. " ,
"2、用户购买虚拟物品需要提供聊天记录、订单信息、发货凭证截图、 虚拟物品最终消费场景(例如何种游戏、软件)、提供消费场景网址/下载链接 要求:每笔交易对应的截图必须清晰可见\n" +
"Users need to provide chat records, order information, screenshots of delivery documents, final consumption scenarios of virtual goods (such as games, software); provide consumer scene URL / download link. Requirement: The screenshot corresponding to each transaction must be clearly visible. " ,
"3、购物小票/发票存根照片 照片应清晰,必须显示商户名称、商户地址、购物时间、物品名称 购物金额等\n" +
"Photos of shopping receipts/ invoice stubs Requirement: The photos should be clear and must show Merchant name, Business address, Transaction time, Product information, Quantity purchased, etc. " ,
"4、显示商户门牌号码和店头名称的照片 要求:清晰可见,至少一张\n" +
"Photos of Merchant Street number & Merchant name Requirement: At least one visible photo " ,
"5、显示商户营业场景所场内部情况( 如店内商品陈列、收银台等) 的照片 要求:照片清晰,且能清楚显示商户实际售卖物品或服务,至少三张\n" +
"Photos of internal environment of merchant business (such as in-store merchandise display, checkout counter, etc.) Requirements: The photos (at least three) showing merchant activities including actual selling-goods or services obviously " ,
"6、其他图片\n" +
"Other pictures "
) ;
} else if ( orderType . equals ( RiskOrderTypeEnum . ALIPAY_ORDER . getOrderType ( ) ) ) {
String alipayMaterials = riskEvent . getString ( "alipay_materials" ) ;
if ( StringUtils . isNotBlank ( alipayMaterials ) ) {
List < JSONObject > alipayMaterialRemarkList = JSONObject . parseArray ( alipayMaterials , JSONObject . class ) ;
if ( alipayMaterialRemarkList ! = null & & alipayMaterialRemarkList . size ( ) > 0 ) {
for ( int i = 0 ; i < alipayMaterialRemarkList . size ( ) ; i + + ) {
materialsRemark . add ( alipayMaterialRemarkList . get ( i ) . getString ( "question" + ( i + 1 ) ) ) ;
}
}
}
} else if ( orderType . equals ( RiskOrderTypeEnum . ROYALPAY_ORDER . getOrderType ( ) ) ) {
materialsRemark = Arrays . asList (
"1.请解释相应的消费场景/业务模式,例如网站商城,扫码支付, 消费者到店支付等;\n" +
"Please explain the relative payment scenario/business activities, for example, online store, QR code payment, payment at the store, etc;" ,
"2.提供相应购物清单,订单小票(请提供与被查交易订单号相匹配的交易时间及金额的发票);\n" +
"Provide related shopping lists, invoices. (Please provide the invoices, amount of which matches that of the abnormal transaction);" ,
"3.提供相应的发货证明,报关单(若有消费者在国内购买,请提供物流单据或报关单);\n" +
"Relative proof of delivery, customs declaration (If the consumer purchased from China, please provide shipping receipt or customs declaration);" ,
"4.提供您的门店照片(门店照及店铺内的照片各一张, 一张可以看到商户名的门头照,一张可以看到相关商品或服务的店内照片);\n" +
"Photos of the store ( one of each front-store and in-store);" ,
"5.其他可以还原交易背景的资料,如和消费者的聊天记录等,来佐证被查单号交易的真实性;\n" +
"Other materials that can verify the payment scenario, for example, chatting history, to prove the truth of the transactions;" ,
"6、其他图片\n" +
"Other pictures"
) ;
}
JSONObject material = getRiskMaterial ( riskEvent ) ;
for ( int i = 0 ; i < materialsRemark . size ( ) ; i + + ) {
JSONObject materialItem = new JSONObject ( ) ;
materialItem . put ( "question" , materialsRemark . get ( i ) ) ;
if ( material ! = null )
materialItem . put ( "file" , material . getJSONArray ( "file" + ( i + 1 ) ) ) ;
materialItemList . add ( materialItem ) ;
}
JSONObject result = new JSONObject ( ) ;
result . put ( "material" , materialItemList ) ;
if ( material ! = null & & material . containsKey ( "description" ) ) {
result . put ( "description" , material . getString ( "description" ) ) ;
}
if ( material ! = null & & material . containsKey ( "refuse_description" ) ) {
result . put ( "refuse_description" , material . getString ( "refuse_description" ) ) ;
}
return result ;
}
@Override
public JSONObject riskEventMaterialPass ( JSONObject params , JSONObject manager ) {
riskEventMapper . update ( params ) ;
riskProcessLogService . addRiskProcessLog ( params . getString ( "risk_id" ) ,
manager . getString ( "manager_id" ) ,
manager . getString ( "display_name" ) ,
RiskResultTypeEnum . MATERIAL_AUDIT_PASS . getRemark ( ) ,
params . getIntValue ( "result_type" ) ,
RiskResultTypeEnum . MATERIAL_AUDIT_PASS . getResultType ( ) ) ;
return params ;
}
@Override
public JSONObject updateIsSendClient ( String riskId ) {
JSONObject event = riskEventMapper . findById ( riskId ) ;
event . put ( "is_send_client" , 1 ) ;
riskEventMapper . update ( event ) ;
event = riskEventMapper . findById ( riskId ) ;
return event ;
}
@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" ) ) ) {
continue ;
}
String [ ] order_ids = riskEvent . getString ( "real_order_ids" ) . split ( "," ) ;
for ( String orderId : order_ids ) {
JSONObject transaction = transactionMapper . findByOrderId ( orderId ) ;
JSONObject riskOrder = new JSONObject ( ) ;
riskOrder . put ( "risk_id" , riskEvent . getString ( "risk_id" ) ) ;
riskOrder . put ( "order_id" , transaction . getString ( "order_id" ) ) ;
riskOrder . put ( "clearing_amount" , transaction . getString ( "clearing_amount" ) ) ;
riskOrdersMapper . save ( riskOrder ) ;
}
}
}
}
}