@ -6,6 +6,7 @@ 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 ;
@ -13,6 +14,7 @@ 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.enums.RiskResultTypeEnum ;
import au.com.royalpay.payment.manage.riskbusiness.enums.RiskResultTypeEnum ;
@ -29,6 +31,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 ;
@ -45,6 +48,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired ;
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 ;
@ -77,6 +81,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 ;
@ -99,6 +105,14 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
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 +124,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 ( ) ) ;
@ -146,21 +160,20 @@ 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 < > ( ) ;
/ * *
/ * *
* 通 用 号 调 单 会 有 client 为 空 的 情 况 , 所 以 无 法 查 到 订 单 信 息
* 通 用 号 调 单 会 有 client 为 空 的 情 况 , 所 以 无 法 查 到 订 单 信 息
* /
* /
if ( client ! = null & & StringUtils . isNotBlank ( o rderIds) ) {
if ( client ! = null & & StringUtils . isNotBlank ( realO rderIds) ) {
String [ ] orderIdArray = o rderIds. trim ( ) . split ( "," ) ;
String [ ] orderIdArray = realO rderIds. 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 {
@ -173,8 +186,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" ) ;
@ -185,8 +197,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 ) ) {
// 去除所有空格与中文逗号', '
// 去除所有空格与中文逗号', '
@ -195,6 +205,7 @@ 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 < > ( ) ;
List < String > realOrderIdList = new ArrayList < > ( ) ;
/ * *
/ * *
* 通 用 号 调 单 的 时 候 , 是 不 用 填 写 client_moniker 的 , 但 是 系 统 需 要 client_id 关 联 查 询 订 单 信 息 ,
* 通 用 号 调 单 的 时 候 , 是 不 用 填 写 client_moniker 的 , 但 是 系 统 需 要 client_id 关 联 查 询 订 单 信 息 ,
* 所 以 当 client 为 空 的 时 候 , 就 不 去 校 验 订 单 的 信 息 了 , 从 而 order_amounts 字 段 为 空
* 所 以 当 client 为 空 的 时 候 , 就 不 去 校 验 订 单 的 信 息 了 , 从 而 order_amounts 字 段 为 空
@ -202,25 +213,40 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
* /
* /
if ( client ! = null ) {
if ( client ! = null ) {
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
for ( int i = 0 ; i < orderIdArray . length ; i + + ) {
JSONObject orderInfo = orderMapper . findOrderById ( orderIdArray [ i ] , client . getIntValue ( "client_id" ) ) ;
PageList< JSONObject > transactionList = transactionMapper . findByClientIdAndSystemTransactionId ( client . getIntValue ( "client_id" ) , orderIdArray [ i ] , new PageBounds ( Order . formString ( "transaction_time.desc" ) ) ) ;
// 判断该笔订单是否存在,是否属于该商户
// 判断该笔订单是否存在,是否属于该商户
if ( orderInfo = = null )
// 由于查询订单时已经关联商户了,所以只会抛出订单不匹配的异常
throw new OrderNotExistsException ( ) ;
if ( transactionList = = null | | transactionList . size ( ) < = 0 )
throw new OrderNotMatchException ( ) ;
/ *
else {
else {
if ( ! clientMoniker . equals ( orderInfo . getString ( "partner_code" ) ) ) {
if ( ! clientMoniker . equals ( orderInfo . getString ( " client_moniker ") ) ) {
throw new OrderNotMatchException ( ) ;
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 ( "transaction_amount" ) ) ;
}
}
params . put ( "order_amounts" , StringUtils . join ( orderAmountList , "," ) ) ;
params . put ( "order_amounts" , StringUtils . join ( orderAmountList , "," ) ) ;
params . put ( "real_order_ids" , StringUtils . join ( realOrderIdList , "," ) ) ;
}
}
}
return params ;
}
}
@Override
public void addRiskEvent ( JSONObject params , JSONObject manager ) {
params = getEvent ( params ) ;
riskEventMapper . save ( params ) ;
riskEventMapper . save ( params ) ;
}
}
@Override
@Override
public void updateRiskEvent ( JSONObject params ) {
public void updateRiskEvent ( JSONObject params ) {
params = getEvent ( params ) ;
riskEventMapper . update ( params ) ;
riskEventMapper . update ( params ) ;
}
}
@ -277,7 +303,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
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 ) ;
@ -288,29 +314,29 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
if ( event . getIntValue ( "order_type" ) = = 3 ) {
if ( event . getIntValue ( "order_type" ) = = 3 ) {
sendAppRiskMessage ( event ) ;
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 ( ) ;
@ -318,7 +344,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 ) ;
@ -327,7 +353,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 ) ;
@ -444,12 +470,14 @@ 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" ) ) ;
//String[] orderIds = event.getString("order_ids").split(",");
String [ ] realOrderIds = event . getString ( "real_order_ids" ) . split ( "," ) ;
List < JSONObject > orders = new ArrayList ( ) ;
List < JSONObject > orders = new ArrayList ( ) ;
switch ( event . getIntValue ( "order_type" ) ) {
switch ( event . getIntValue ( "order_type" ) ) {
case 1 :
case 1 :
case 2 :
case 2 :
for ( String orderId : o rderIds) {
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" ) ;
@ -461,10 +489,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
ctx . setVariable ( "emailsTos" , bdEmails ) ;
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" ) ;
}
}
@ -522,16 +548,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 ) ;
@ -648,6 +701,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" ) ) ;
@ -677,4 +735,104 @@ 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 ( "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" ) ) ;
return result ;
}
@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 ;
}
}
}