|
|
@@ -1,29 +1,23 @@
|
|
|
package shop.alien.second.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import shop.alien.entity.second.SecondRiskControlRecord;
|
|
|
-import shop.alien.entity.second.vo.SecondRiskControlRecordVo;
|
|
|
-import shop.alien.entity.store.LifeBrandedCard;
|
|
|
-import shop.alien.entity.store.LifeClassManage;
|
|
|
+import shop.alien.entity.store.LifeNotice;
|
|
|
import shop.alien.entity.store.LifeUser;
|
|
|
-import shop.alien.entity.store.vo.LifeUserVo;
|
|
|
+import shop.alien.entity.store.vo.WebSocketVo;
|
|
|
+import shop.alien.mapper.LifeNoticeMapper;
|
|
|
import shop.alien.mapper.LifeUserMapper;
|
|
|
import shop.alien.mapper.second.SecondRiskControlRecordMapper;
|
|
|
+import shop.alien.second.feign.AlienStoreFeign;
|
|
|
import shop.alien.second.service.RiskControlService;
|
|
|
-import shop.alien.util.common.Constants;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Arrays;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 风控服务实现类
|
|
|
@@ -34,9 +28,9 @@ import java.util.stream.Collectors;
|
|
|
public class RiskControlServiceImpl extends ServiceImpl<SecondRiskControlRecordMapper, SecondRiskControlRecord> implements RiskControlService {
|
|
|
|
|
|
private final SecondRiskControlRecordMapper secondRiskControlRecordMapper;
|
|
|
-
|
|
|
+ private final LifeNoticeMapper lifeNoticeMapper;
|
|
|
private final LifeUserMapper lifeUserMapper;
|
|
|
-
|
|
|
+ private final AlienStoreFeign alienStoreFeign;
|
|
|
/**
|
|
|
* 记录风控数据
|
|
|
*
|
|
|
@@ -88,67 +82,37 @@ public class RiskControlServiceImpl extends ServiceImpl<SecondRiskControlRecordM
|
|
|
return secondRiskControlRecordMapper.selectList(queryWrapper);
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public List<SecondRiskControlRecordVo> queryRiskControlRecords(Integer page, Integer size) {
|
|
|
- try {
|
|
|
- List<SecondRiskControlRecordVo> list = new ArrayList<>();
|
|
|
- IPage<SecondRiskControlRecord> brandedPage = new Page<>(page, size);
|
|
|
-
|
|
|
- // 获取风险管控信息
|
|
|
- QueryWrapper<SecondRiskControlRecord> queryWrapper = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("delete_flag", Constants.DeleteFlag.NOT_DELETED);
|
|
|
- queryWrapper.orderByDesc("created_time");
|
|
|
- IPage<SecondRiskControlRecord> brandedCards = secondRiskControlRecordMapper.selectPage(brandedPage, queryWrapper);
|
|
|
+ /**
|
|
|
+ * 发送封禁通知
|
|
|
+ */
|
|
|
+ public void sendNotice(Integer userId) {
|
|
|
+ LifeUser lifeUser = lifeUserMapper.selectById(userId);
|
|
|
+ if (lifeUser == null) return;
|
|
|
|
|
|
- for (SecondRiskControlRecord card : brandedCards.getRecords()) {
|
|
|
- SecondRiskControlRecordVo vo = new SecondRiskControlRecordVo();
|
|
|
- if (1 == card.getRuleType()) {
|
|
|
- vo.setRuleTypeName("洗钱嫌疑");
|
|
|
- vo.setRuleName("高频高价交易");
|
|
|
- vo.setRuleRisk("中风险");
|
|
|
- vo.setCreatedTime(card.getCreatedTime());
|
|
|
- } else if (2 == card.getRuleType()) {
|
|
|
- vo.setRuleTypeName("账号异常");
|
|
|
- vo.setRuleName("同一设备/mac 24小时内注册超过3个账号");
|
|
|
- vo.setRuleRisk("中风险");
|
|
|
- vo.setCreatedTime(card.getCreatedTime());
|
|
|
- } else if (3 == card.getRuleType()) {
|
|
|
- vo.setRuleTypeName("交易欺诈");
|
|
|
- vo.setRuleName("用户频繁修改商品价格");
|
|
|
- vo.setRuleRisk("高风险");
|
|
|
- vo.setCreatedTime(card.getCreatedTime());
|
|
|
- } else if (4 == card.getRuleType()) {
|
|
|
- vo.setRuleTypeName("异常发布");
|
|
|
- vo.setRuleName("短时间大量发布同类商品");
|
|
|
- vo.setRuleRisk("高风险");
|
|
|
- vo.setCreatedTime(card.getCreatedTime());
|
|
|
- }
|
|
|
+ String phoneId = "user_" + lifeUser.getUserPhone();
|
|
|
|
|
|
- if ( 2 != card.getRuleType()) {
|
|
|
- // 根据ID查询用户信息
|
|
|
- QueryWrapper<LifeUserVo> queryWrapperUser = new QueryWrapper<>();
|
|
|
- queryWrapper.eq("delete_flag", Constants.DeleteFlag.NOT_DELETED)
|
|
|
- .eq("id", card.getUserId());
|
|
|
- LifeUserVo userInfoList = lifeUserMapper.getUserById(queryWrapperUser);
|
|
|
- // 用户手机号
|
|
|
- vo.setUserPhone(userInfoList.getUserPhone());
|
|
|
- }
|
|
|
+ // 给买家发送通知
|
|
|
+ LifeNotice lifeNotice = new LifeNotice();
|
|
|
+ lifeNotice.setSenderId("system");
|
|
|
+ lifeNotice.setReceiverId(phoneId);
|
|
|
+ lifeNotice.setBusinessId(userId);
|
|
|
+ lifeNotice.setTitle("账号违规处理");
|
|
|
+ lifeNotice.setNoticeType(1);
|
|
|
+ // 封装通知信息
|
|
|
+ JSONObject noticeMessage = new JSONObject();
|
|
|
+ noticeMessage.put("message", "账号违反平台规约进行封禁处理");
|
|
|
+ lifeNotice.setContext(noticeMessage.toJSONString());
|
|
|
+ lifeNoticeMapper.insert(lifeNotice);
|
|
|
|
|
|
- // 处理结果
|
|
|
- if (card.getRiskStatus().equals(0)) {
|
|
|
- vo.setRiskStatusName("待处理");
|
|
|
- } else if (card.getRiskStatus().equals(1)) {
|
|
|
- vo.setRiskStatusName("已处理");
|
|
|
- } else if (card.getRiskStatus().equals(2)) {
|
|
|
- vo.setRiskStatusName("已忽略");
|
|
|
- }
|
|
|
- list.add(vo);
|
|
|
- }
|
|
|
- return list;
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("记录风控数据时发生异常: 用户ID={}, 规则类型={},业务id={}", e);
|
|
|
- return null;
|
|
|
- }
|
|
|
+ // 给买家推送通知
|
|
|
+ WebSocketVo webSocketVo = new WebSocketVo();
|
|
|
+ webSocketVo.setSenderId("system");
|
|
|
+ webSocketVo.setReceiverId(phoneId);
|
|
|
+ webSocketVo.setCategory("notice");
|
|
|
+ webSocketVo.setNoticeType("1");
|
|
|
+ webSocketVo.setType("1");
|
|
|
+ webSocketVo.setText(JSONObject.from(lifeNotice).toJSONString());
|
|
|
+ alienStoreFeign.sendMsgToClientByPhoneId(phoneId, JSONObject.from(webSocketVo).toJSONString());
|
|
|
}
|
|
|
|
|
|
}
|