[fix]风控需求修改

master
lujian 6 years ago
parent 174064e245
commit fd4c89fdbf

@ -9,6 +9,7 @@ import com.github.miemiedev.mybatis.paginator.domain.PageBounds;
import com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.ibatis.annotations.Param;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.util.Date;
@ -145,4 +146,15 @@ public interface TransactionMapper {
List<JSONObject> getHfClearAmount(JSONObject params);
List<JSONObject> analysisForATOReport(@Param("clientId") int clientId, @Param("from") Date startOfMon, @Param("to") Date endOfMon);
/**
* 退退
* @param clientId
* @param systemTransactionId
* @return
*/
@AutoSql(type = SqlType.SELECT)
PageList<JSONObject> findByClientIdAndSystemTransactionId(@Param("client_id") int clientId,
@Param("system_transaction_id") String systemTransactionId,
PageBounds pageBounds);
}

@ -31,4 +31,7 @@ public interface RiskEventMapper {
@AutoSql(type = SqlType.SELECT)
JSONObject findById(@Param("risk_id") String riskId);
@AutoSql(type = SqlType.DELETE)
void deleteRiskEvent(@Param("risk_id") String risk_id);
}

@ -84,4 +84,11 @@ public interface RiskBusinessService {
* @return
*/
JSONObject getRiskMaterial(JSONObject param);
/**
* real_order_ids
*/
void completeEventRealOrderIds();
void deleteRiskEvent(String riskId);
}

@ -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.manage.mappers.log.AppMessageLogMapper;
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.RiskFileMapper;
import au.com.royalpay.payment.manage.mappers.riskbusiness.RiskMaterialMapper;
@ -77,6 +78,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Resource
private OrderMapper orderMapper;
@Resource
private TransactionMapper transactionMapper;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private SpringTemplateEngine thymeleaf;
@ -146,21 +149,20 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Override
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"));
List<JSONObject> tradeLogs = new ArrayList<>();
/**
* client
*/
if (client != null && StringUtils.isNotBlank(orderIds)) {
String[] orderIdArray = orderIds.trim().split(",");
if (client != null && StringUtils.isNotBlank(realOrderIds)) {
String[] orderIdArray = realOrderIds.trim().split(",");
JSONObject orderInfo = new JSONObject();
String realOrderId = "";
// 获取订单信息
if (riskEvent.getIntValue("order_type") == 3) {
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"), realOrderId, null);
orderInfo = tradeLogService.getOrderDetail(new JSONObject(), riskEvent.getString("client_moniker"), orderIdArray[i], null);
tradeLogs.add(orderInfo);
}
} else {
@ -173,8 +175,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
return tradeLogs;
}
@Override
public void addRiskEvent(JSONObject params, JSONObject manager) {
private JSONObject getEvent(JSONObject params) {
// 通用号调单不需要填写client_moniker
JSONObject client = null;
String clientMoniker = params.getString("client_moniker");
@ -185,8 +186,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");
if (StringUtils.isNotBlank(orderIds)) {
// 去除所有空格与中文逗号''
@ -195,6 +194,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
params.put("order_ids", orderIds);
String[] orderIdArray = orderIds.split(",");
List<String> orderAmountList = new ArrayList<>();
List<String> realOrderIdList = new ArrayList<>();
/**
* client_monikerclient_id
* clientorder_amounts
@ -202,10 +202,10 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
*/
if (client != null) {
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)
if (transactionList == null || transactionList.size() <= 0)
throw new OrderNotMatchException();
/*
else {
@ -215,15 +215,27 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
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("real_order_ids", StringUtils.join(realOrderIdList, ","));
}
}
return params;
}
@Override
public void addRiskEvent(JSONObject params, JSONObject manager) {
params = getEvent(params);
riskEventMapper.save(params);
}
@Override
public void updateRiskEvent(JSONObject params) {
params = getEvent(params);
riskEventMapper.update(params);
}
@ -280,7 +292,7 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
event.put("result_type", RiskResultTypeEnum.SEND_EMAIL_TO_BD.getResultType());
event.put("submit_url",uploadUrl);
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());
}
riskEventMapper.update(event);
@ -291,8 +303,6 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
if(event.getIntValue("order_type")==3){
sendAppRiskMessage(event);
}
}
private void sendAppRiskMessage(JSONObject event){
@ -448,12 +458,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
ctx.setVariable("royalpay_order_type", event.getIntValue("royalpay_order_type"));
ctx.setVariable("warning_order_type", event.getIntValue("warning_order_type"));
ctx.setVariable("description", event.getString("description"));
String[] orderIds = event.getString("order_ids").split(",");
//String[] orderIds = event.getString("order_ids").split(",");
String[] realOrderIds = event.getString("real_order_ids").split(",");
List<JSONObject> orders = new ArrayList();
switch (event.getIntValue("order_type")){
case 1:
case 2:
for(String orderId : orderIds){
for(String orderId : realOrderIds){
JSONObject order = orderMapper.findOrderById(orderId,client.getIntValue("client_id"));
if(order==null){
throw new BadRequestException("Order: "+orderId+" not exists");
@ -465,10 +476,8 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
ctx.setVariable("emailsTos", bdEmails);
break;
case 3:
String realOrderId = "";
for(String orderId : orderIds){
realOrderId = orderMapper.findOrderById(orderId,client.getIntValue("client_id")).getString("order_id");
JSONObject order = tradeLogService.getOrderDetail(new JSONObject(), clientMoniker, realOrderId, null);
for(String orderId : realOrderIds){
JSONObject order = tradeLogService.getOrderDetail(new JSONObject(), clientMoniker, orderId, null);
if(order==null){
throw new BadRequestException("Order: "+orderId+" not exists");
}
@ -526,16 +535,42 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
return null;
}
@Override
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 {
String[] orderIds = event.getString("order_ids").split(",");
JSONObject client = clientMapper.findClientByMonikerAll(event.getString("client_moniker"));
Workbook wb = new XSSFWorkbook();
String realOrderId = "";
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"), realOrderId, null);
JSONObject orderDetail = tradeLogService.getOrderDetail(new JSONObject(), event.getString("client_moniker"), orderId, null);
Sheet sheet = wb.createSheet(orderId);
sheet.setDefaultColumnWidth((short) 40);
Row row0 = sheet.createRow(0);
@ -652,6 +687,11 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
@Override
public void checkTodo(JSONObject manager, List<TodoNotice> notices) {
/**
* 1BD
* 2BD
* 3
*/
if (ManagerRole.BD_USER.hasRole(manager.getIntValue("role"))) {
JSONObject params = new JSONObject();
params.put("bd_id", manager.getString("manager_id"));
@ -681,4 +721,10 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
}
}
}
@Override
public void deleteRiskEvent(String riskId) {
riskEventMapper.deleteRiskEvent(riskId);
}
}

@ -56,6 +56,8 @@ public class RiskBusinessController {
@PostMapping(value = "events")
public void RegisterRiskEvent(@RequestBody JSONObject params,
@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
params.put("fillin_id", manager.getString("manager_id"));
params.put("fillin_person", manager.getString("display_name"));
riskBusinessService.addRiskEvent(params, manager);
}
@ -128,5 +130,16 @@ public class RiskBusinessController {
JSONObject param = partnerQuery.toJsonParam();
return clientManager.getClientBySimpleQuery(param);
}
// 更新库中的orderIds
@GetMapping(value = "/complete/real_order_id")
public void completeEventRealOrderIds() {
riskBusinessService.completeEventRealOrderIds();
}
@GetMapping(value = "/delete/event")
public void deleteRiskEvent(@RequestParam("risk_id") String riskId) {
riskBusinessService.deleteRiskEvent(riskId);
}
}

@ -739,14 +739,6 @@
</where>
</select>
<!--
由于当时定的是order_id, 所以是根据order_id查的
现在要改成依据system_transaction_id查
直接改成t.system_transaction_id = #{order_id}
否则要改的地方太多了,
所以这里的参数order_id其实是system_transaction_id
特此说明!
-->
<select id="findOrderById" resultType="com.alibaba.fastjson.JSONObject">
SELECT
o.order_id order_id,
@ -811,6 +803,7 @@
END AS gateway,
p.client_moniker client_moniker,
p.short_name partner_name,
p.company_name,
format(t.clearing_amount,2) clearing_amount
FROM pmt_orders o
INNER JOIN sys_clients p
@ -820,7 +813,7 @@
AND t.refund_id IS NULL
AND t.transaction_type = 'Credit'
AND t.channel != 'System'
WHERE t.system_transaction_id = #{order_id} AND p.client_id = #{client_id}
WHERE t.order_id = #{order_id} AND p.client_id = #{client_id}
</select>
<select id="listHalloweenActOrder" resultType="com.alibaba.fastjson.JSONObject">

@ -168,6 +168,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'],
$scope.resultTypes = resultTypesMap;
$scope.channelResults = channelResultArray;
$scope.riskEvent = riskEvent.data;
//var index = $scope.riskEvent.order_ids.lastIndexOf(",");
//$scope.riskEvent.order_ids = $scope.riskEvent.order_ids.substring(0, index) + "" + $scope.riskEvent.order_ids.substring(index + 1);
// 获取数据库中对应的渠道字段
var orderChannel = 'enable_';
if ($scope.riskEvent.order_type == 1) {

@ -43,6 +43,14 @@
</div>
</div>
<div class="form-group" ng-if="clientInfo.company_name != null">
<label class="control-label col-sm-2">Company Name</label>
<div class="col-sm-10">
<p class="form-control-static"
ng-bind="clientInfo.company_name"></p>
</div>
</div>
<div class="form-group" ng-if="riskEvent.order_type == 1 || riskEvent.order_type == 5">
<label class="control-label col-sm-2">Sub Merchant ID</label>
<div class="col-sm-10">
@ -54,9 +62,9 @@
<div class="form-group" ng-if="riskEvent.order_ids != null">
<label class="control-label col-sm-2">Platform Transaction IDs</label>
<div class="col-sm-10">
<p class="form-control-static"
ng-bind="riskEvent.order_ids">
<div class="col-sm-6">
<p class="form-control-static">
{{riskEvent.order_ids}}
</p>
</div>
</div>

@ -200,10 +200,14 @@
</td>
<td ng-bind="riskEvent.order_type | orderType"></td>
<td>
{{riskEvent.result_type | resultType:resultSearchTypes}}
<span ng-if="riskEvent.order_type == 5">-</span>
<span ng-if="riskEvent.order_type != 5">{{riskEvent.result_type | resultType:resultSearchTypes}}</span>
</td>
<td ng-bind="riskEvent.sub_merchant_id"></td>
<td ng-bind="riskEvent.email_status | emailStatus"></td>
<td>
<span ng-if="riskEvent.order_type != 5">{{riskEvent.email_status | emailStatus}}</span>
<span ng-if="riskEvent.order_type == 5">-</span>
</td>
<td ng-bind="riskEvent.description | limitTo:20"></td>
<td ng-bind="riskEvent.channel_result"></td>

Loading…
Cancel
Save