ソースを参照

增加风控日志列表排序
增加解封日志列表排序
修改部分bug

marxjaw 5 ヶ月 前
コミット
6564571c38

+ 15 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/dao/AppLoginRecordMapper.java

@@ -0,0 +1,15 @@
+package com.ytpm.dao;
+
+import com.ytpm.app.model.YtAppUserLoginRecord;
+import org.apache.ibatis.annotations.Param;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface AppLoginRecordMapper {
+    /**
+     * 根据用户ID获取用户登录记录
+     */
+    List<YtAppUserLoginRecord> getByUserIds(@Param("userIdList") List<String> userIdList);
+}

+ 40 - 9
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -10,8 +10,10 @@ import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.agent.model.YtAppUser;
 import com.ytpm.agent.model.YtPlatformBanned;
 import com.ytpm.agent.model.YtPlatformDeblocking;
+import com.ytpm.app.model.YtAppUserLoginRecord;
 import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.custom.CustomField;
+import com.ytpm.dao.AppLoginRecordMapper;
 import com.ytpm.dao.DictMapper;
 import com.ytpm.dao.RiskConfigMapper;
 import com.ytpm.dao.RiskManageMapper;
@@ -43,9 +45,12 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
@@ -64,6 +69,8 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     private RiskUserMapper riskUserMapper;
     @Resource
     private RiskManageMapper riskManageMapper;
+    @Resource
+    private AppLoginRecordMapper loginRecordMapper;
 
     /**
      * 查询配置字段选项
@@ -133,7 +140,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         if(Objects.isNull(appUser)){
             return Result.resultOk(RepMessage.LOCK_USER_SUCCESS);
         }
-        if(UserStatusEnum.NORMAL.getCode().equals(appUser.getUserStatus())){
+        if(UserStatusEnum.LOCK.getCode().equals(appUser.getUserStatus())){
             return Result.resultErr(RepMessage.ALREADY_RISK_USER);
         }
         YtAppUser user = new YtAppUser();
@@ -149,14 +156,12 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     @Transactional(rollbackFor = Exception.class)
     @Override
     public Result<?> banned(RiskBannedParam param) {
-        List<YtAppUser> userList = riskUserMapper.getBannedUserList(param);
-        if(CollUtil.isEmpty(userList)){
+        YtAppUser appUser = riskUserMapper.selectByUserId(param.getUserId());
+        if(Objects.isNull(appUser)||UserStatusEnum.RISK.getCode().equals(appUser.getUserStatus())){
             return Result.resultOk(RepMessage.ALREADY_RISK_USER);
         }
-        List<String> userIdList = userList.stream().map(YtAppUser::getUserId)
-                .distinct().collect(Collectors.toList());
-        riskUserMapper.banned(userIdList);
-        addBannedRecord(userIdList,param);
+        riskUserMapper.banned(Collections.singletonList(param.getUserId()));
+        addBannedRecord(Collections.singletonList(param.getUserId()),param);
         return Result.resultOk(RepMessage.ALREADY_RISK_USER);
     }
 
@@ -175,7 +180,32 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     @Override
     public ResultTable<RiskBannedListView> bannedList(RiskBannedListParam param) {
         PageHelper.startPage(param.getPage(),param.getLimit());
-        return ResultTable.resultTableOk(new PageInfo<RiskBannedListView>(riskManageMapper.getBannedList(param)));
+        List<RiskBannedListView> bannedList = riskManageMapper.getBannedList(param);
+        if(CollUtil.isNotEmpty(bannedList)){
+            setBannedLoginInfo(bannedList);
+        }
+        return ResultTable.resultTableOk(new PageInfo<RiskBannedListView>(bannedList));
+    }
+
+    /**
+     * 查询登录记录并设置信息
+     */
+    private void setBannedLoginInfo(List<RiskBannedListView> bannedList) {
+        List<String> userIdList = bannedList.stream().
+                map(RiskBannedListView::getUserId).collect(Collectors.toList());
+        List<YtAppUserLoginRecord> records = loginRecordMapper.getByUserIds(userIdList);
+        Map<String, List<YtAppUserLoginRecord>> recordMap = records.stream().collect(
+                Collectors.groupingBy(YtAppUserLoginRecord::getUserId));
+        for (RiskBannedListView view : bannedList) {
+            if(!recordMap.containsKey(view.getUserId()))continue;
+            List<YtAppUserLoginRecord> collect = recordMap.get(view.getUserId()).stream().sorted(Comparator
+                    .comparing(YtAppUserLoginRecord::getLoginTime).reversed()).limit(1).collect(Collectors.toList());
+            YtAppUserLoginRecord record = collect.get(0);
+            view.setPhoneBrand(record.getPhoneBrand());
+            view.setPhoneModel(record.getPhoneModel());
+            view.setCommunicationOperator(record.getCommunicationOperator());
+            view.setIpAddr(record.getIpAddr());
+        }
     }
 
     /**
@@ -318,7 +348,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         deblocking.setBannedId(bannedId);
         deblocking.setDeblockingReason(reason);
         deblocking.setDeblockingTime(new Date());
-        deblocking.setChannelId(userId);
+        deblocking.setChannelId(operator);
         riskManageMapper.addDeblockingRecord(deblocking);
     }
 
@@ -335,6 +365,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             banned.setBannedLimit(Objects.isNull(param.getBannedLimit())?defaultLimit:param.getBannedLimit());
             banned.setBannedReason(StrUtil.isBlank(param.getBannedReason())?defaultReason:param.getBannedReason());
             banned.setBannedType(param.getBannedType());
+            banned.setBannedTime(new Date());
             banned.setOperator(param.getOperator());
             banned.setOperatorName(param.getOperatorName());
             riskUserMapper.addBannedRecord(banned);

+ 14 - 0
yt-risk/risk-manage/src/main/resources/mapper/AppLoginRecordMapper.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ytpm.dao.AppLoginRecordMapper">
+
+    <select id="getByUserIds" resultType="com.ytpm.app.model.YtAppUserLoginRecord">
+        select
+            record_id, user_id, app_id, login_time, phone_brand, phone_model, login_ip, communication_operator, ip_addr
+        from yt_app_user_login_record
+        where user_id in
+        <foreach collection="userIdList" separator="," index="index" item="item" open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+</mapper>

+ 13 - 2
yt-risk/risk-manage/src/main/resources/mapper/RiskManageMapper.xml

@@ -48,6 +48,7 @@
     </delete>
     <select id="getDeblockingList" resultType="com.ytpm.risk.view.RiskDeblockingListView">
         SELECT
+            pd.deblocking_id,
             au.platform_id,
             au.channel_id,
             au.user_id,
@@ -60,10 +61,13 @@
             au.channel_type,
             au.channel_origin,
             pd.operator,
-            pd.operator_name
+            pd.operator_name,
+            au.app_id,
+            a.app_name
         FROM
             yt_platform_deblocking pd
                 JOIN yt_app_user au ON pd.user_id = au.user_id
+                JOIN yt_app a ON au.app_id = a.app_id
         WHERE
             pd.channel_id = #{channelId}
         <if test="appId != null and appId != ''">
@@ -90,15 +94,18 @@
         <if test="loginTimeEnd != null">
             and DATE_FORMAT(au.last_login_time,'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{loginTimeEnd}, '%Y-%m-%d')
         </if>
+        ORDER BY pd.deblocking_time DESC
     </select>
 
     <select id="getBannedList" resultType="com.ytpm.risk.view.RiskBannedListView">
         SELECT
+        pb.banned_id,
         au.platform_id,
         au.channel_id,
         au.user_id,
         au.nick_name,
         au.registry_time,
+        au.last_login_ip,
         au.last_login_time,
         au.user_status,
         pb.banned_time,
@@ -108,10 +115,13 @@
         pb.banned_type,
         pb.banned_limit,
         pb.operator,
-        pb.operator_name
+        pb.operator_name,
+        au.app_id,
+        a.app_name
         FROM
         yt_platform_banned pb
         JOIN yt_app_user au ON pb.user_id = au.user_id
+        JOIN yt_app a ON au.app_id = a.app_id
         WHERE
         pb.channel_id = #{channelId}
         <if test="appId != null and appId != ''">
@@ -132,6 +142,7 @@
         <if test="bannedTimeEnd != null">
             and DATE_FORMAT(pb.banned_time,'%Y-%m-%d') <![CDATA[<=]]> DATE_FORMAT(#{bannedTimeEnd}, '%Y-%m-%d')
         </if>
+        ORDER BY pb.banned_time DESC
     </select>
     <select id="getLastBanned" resultType="com.ytpm.agent.model.YtPlatformBanned">
         select