[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 com.github.miemiedev.mybatis.paginator.domain.PageList;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -145,4 +146,15 @@ public interface TransactionMapper {
List<JSONObject> getHfClearAmount(JSONObject params); List<JSONObject> getHfClearAmount(JSONObject params);
List<JSONObject> analysisForATOReport(@Param("clientId") int clientId, @Param("from") Date startOfMon, @Param("to") Date endOfMon); 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) @AutoSql(type = SqlType.SELECT)
JSONObject findById(@Param("risk_id") String riskId); 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 * @return
*/ */
JSONObject getRiskMaterial(JSONObject param); 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.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;
@ -77,6 +78,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;
@ -146,21 +149,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(orderIds)) { if (client != null && StringUtils.isNotBlank(realOrderIds)) {
String[] orderIdArray = orderIds.trim().split(","); 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 {
@ -173,8 +175,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 +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"); String orderIds = params.getString("order_ids");
if (StringUtils.isNotBlank(orderIds)) { if (StringUtils.isNotBlank(orderIds)) {
// 去除所有空格与中文逗号'' // 去除所有空格与中文逗号''
@ -195,6 +194,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_monikerclient_id * client_monikerclient_id
* clientorder_amounts * clientorder_amounts
@ -202,10 +202,10 @@ 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) if (transactionList == null || transactionList.size() <= 0)
throw new OrderNotMatchException(); throw new OrderNotMatchException();
/* /*
else { else {
@ -215,15 +215,27 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
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);
} }
@ -280,7 +292,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);
@ -291,8 +303,6 @@ 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){
@ -448,12 +458,13 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
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"));
ctx.setVariable("description", event.getString("description")); 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(); 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 : orderIds){ for(String orderId : realOrderIds){
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");
@ -465,10 +476,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");
} }
@ -526,16 +535,42 @@ public class RiskBusinessServiceImpl implements RiskBusinessService, ManagerTodo
return null; 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 { 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);
@ -652,6 +687,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) {
/**
* 1BD
* 2BD
* 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"));
@ -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") @PostMapping(value = "events")
public void RegisterRiskEvent(@RequestBody JSONObject params, public void RegisterRiskEvent(@RequestBody JSONObject params,
@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { @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); riskBusinessService.addRiskEvent(params, manager);
} }
@ -128,5 +130,16 @@ public class RiskBusinessController {
JSONObject param = partnerQuery.toJsonParam(); JSONObject param = partnerQuery.toJsonParam();
return clientManager.getClientBySimpleQuery(param); 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> </where>
</select> </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 id="findOrderById" resultType="com.alibaba.fastjson.JSONObject">
SELECT SELECT
o.order_id order_id, o.order_id order_id,
@ -811,6 +803,7 @@
END AS gateway, END AS gateway,
p.client_moniker client_moniker, p.client_moniker client_moniker,
p.short_name partner_name, p.short_name partner_name,
p.company_name,
format(t.clearing_amount,2) clearing_amount format(t.clearing_amount,2) clearing_amount
FROM pmt_orders o FROM pmt_orders o
INNER JOIN sys_clients p INNER JOIN sys_clients p
@ -820,7 +813,7 @@
AND t.refund_id IS NULL AND t.refund_id IS NULL
AND t.transaction_type = 'Credit' AND t.transaction_type = 'Credit'
AND t.channel != 'System' 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>
<select id="listHalloweenActOrder" resultType="com.alibaba.fastjson.JSONObject"> <select id="listHalloweenActOrder" resultType="com.alibaba.fastjson.JSONObject">

@ -168,6 +168,8 @@ define(['angular', 'jquery', 'uiRouter', './monitoring/analysis-monitoring'],
$scope.resultTypes = resultTypesMap; $scope.resultTypes = resultTypesMap;
$scope.channelResults = channelResultArray; $scope.channelResults = channelResultArray;
$scope.riskEvent = riskEvent.data; $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_'; var orderChannel = 'enable_';
if ($scope.riskEvent.order_type == 1) { if ($scope.riskEvent.order_type == 1) {

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

@ -200,10 +200,14 @@
</td> </td>
<td ng-bind="riskEvent.order_type | orderType"></td> <td ng-bind="riskEvent.order_type | orderType"></td>
<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>
<td ng-bind="riskEvent.sub_merchant_id"></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.description | limitTo:20"></td>
<td ng-bind="riskEvent.channel_result"></td> <td ng-bind="riskEvent.channel_result"></td>

Loading…
Cancel
Save