Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

小杜 3 ay önce
ebeveyn
işleme
6cd4bae640
24 değiştirilmiş dosya ile 449 ekleme ve 136 silme
  1. 2 0
      yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java
  2. 3 3
      yt-agent/agent-service/src/main/resources/mapper/AppMapper.xml
  3. 2 0
      yt-app/app-feign/src/main/java/com/ytpm/feign/AppFeign.java
  4. 23 7
      yt-app/app-service/src/main/java/com/ytpm/controller/UserController.java
  5. 15 91
      yt-app/app-service/src/main/java/com/ytpm/controller/WxController.java
  6. 3 0
      yt-app/app-service/src/main/java/com/ytpm/dao/AdRecordMapper.java
  7. 10 0
      yt-app/app-service/src/main/java/com/ytpm/dao/AppUserMapper.java
  8. 8 0
      yt-app/app-service/src/main/java/com/ytpm/service/AppUserService.java
  9. 126 2
      yt-app/app-service/src/main/java/com/ytpm/service/impl/AppUserServiceImpl.java
  10. 54 9
      yt-app/app-service/src/main/resources/mapper/AppUserMapper.xml
  11. 10 1
      yt-common/src/main/java/com/ytpm/app/model/DefaultRiskConfig.java
  12. 6 0
      yt-common/src/main/java/com/ytpm/app/model/YtDyzUser.java
  13. 4 0
      yt-common/src/main/java/com/ytpm/app/param/WxLoginParam.java
  14. 4 0
      yt-common/src/main/java/com/ytpm/app/view/YtAppUserListView.java
  15. 1 1
      yt-common/src/main/java/com/ytpm/custom/CustomField.java
  16. 18 0
      yt-common/src/main/java/com/ytpm/risk/enums/EffectNodeEnum.java
  17. 2 0
      yt-common/src/main/java/com/ytpm/risk/param/RiskBannedListParam.java
  18. 1 1
      yt-common/src/main/java/com/ytpm/risk/param/RiskDeblockingListParam.java
  19. 4 0
      yt-common/src/main/java/com/ytpm/risk/view/RiskBannedListView.java
  20. 4 0
      yt-common/src/main/java/com/ytpm/risk/view/RiskDeblockingListView.java
  21. 7 0
      yt-risk/risk-manage/src/main/java/com/ytpm/dao/RiskConfigMapper.java
  22. 103 19
      yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java
  23. 24 0
      yt-risk/risk-manage/src/main/resources/mapper/RiskConfigMapper.xml
  24. 15 2
      yt-risk/risk-manage/src/main/resources/mapper/RiskManageMapper.xml

+ 2 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java

@@ -99,6 +99,8 @@ public class YtAppUserServiceImpl implements YtAppUserService {
                 datum.setAppType(ytApp.getAppType());
                 datum.setChannelId(ytApp.getChannelId());
                 datum.setVersionCode(ytApp.getVersionCode());
+                datum.setDitchId(ytApp.getDitchId());
+                datum.setDitchName(ytApp.getDitchName());
             }
             if(CollUtil.isNotEmpty(recordList)){
                 datum.setDeviceRepeatCount((int) recordList.stream().map(YtDyzLoginRecord::getDeviceModel).distinct().count());

+ 3 - 3
yt-agent/agent-service/src/main/resources/mapper/AppMapper.xml

@@ -130,20 +130,20 @@
     </delete>
     <select id="selectPrimary" resultType="com.ytpm.agent.model.YtApp">
         select
-            app_id, app_key, app_name,user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled
+            app_id,ditch_id, ditch_name,  app_key, app_name,user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled
         from yt_app
         where app_id = #{appId}
     </select>
     <select id="queryAll" resultType="com.ytpm.agent.model.YtApp">
         select
-            app_id, app_key, app_name, user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled, store_on_sale, store_type, store_url, package_name, domain, category, sub_category, coppa, screen_orientation, ccpa
+            app_id, ditch_id, ditch_name, app_key, app_name, user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled, store_on_sale, store_type, store_url, package_name, domain, category, sub_category, coppa, screen_orientation, ccpa
         from yt_app
         where user_id = #{userId}
     </select>
 
     <select id="selectByDitchId" resultType="com.ytpm.agent.model.YtApp">
         select
-            app_id, app_key, app_name,user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled,ditch_name,ditch_id
+            app_id, ditch_id, ditch_name, app_key, app_name,user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled,ditch_name,ditch_id
         from yt_app
         where ditch_id = #{ditchId}
     </select>

+ 2 - 0
yt-app/app-feign/src/main/java/com/ytpm/feign/AppFeign.java

@@ -42,4 +42,6 @@ public interface AppFeign {
     @PostMapping("/user/queryLoginRecords")
      List<String> queryLoginRecords(@RequestBody AppUserQueryParam appUserQueryParam);
 
+    @GetMapping("/user/queryByOpenid")
+    List<YtDyzUser> queryByOpenid(@RequestParam("openid") String openid);
 }

+ 23 - 7
yt-app/app-service/src/main/java/com/ytpm/controller/UserController.java

@@ -1,7 +1,9 @@
 package com.ytpm.controller;
 
+import cn.hutool.core.date.DateUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.ytpm.advertise.enums.AdSourceTypeEnum;
 import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.AppUserParam;
@@ -11,6 +13,7 @@ import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.dao.AdRecordMapper;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.dao.LoginRecordMapper;
+import com.ytpm.dao.QuestionMapper;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
@@ -23,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
@@ -43,6 +47,8 @@ public class UserController {
     private LoginRecordMapper loginRecordMapper;
     @Autowired
     AdRecordMapper adRecordMapper;
+    @Autowired
+    private QuestionMapper questionMapper;
 
     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
@@ -54,9 +60,9 @@ public class UserController {
         PageHelper.startPage(param.getPage(), param.getLimit());
         List<YtAppUserListView> dyzUsers = appUserMapper.queryAll(param);
         if (dyzUsers.isEmpty()) return ResultTable.resultTableOk(new PageInfo<YtAppUserListView>(dyzUsers));
-        List<YtDyzAdRecord> ids = adRecordMapper.getByUserIds(
+        List<YtDyzAdRecord> adRecords = adRecordMapper.getByUserIds(
                 dyzUsers.stream().map(YtAppUserListView::getUserId).collect(Collectors.joining(",")));
-        Map<String, List<YtDyzAdRecord>> userAdMap = ids.stream().collect(
+        Map<String, List<YtDyzAdRecord>> userAdMap = adRecords.stream().collect(
                 Collectors.groupingBy(YtDyzAdRecord::getUserId));
         setUserExtInfo(dyzUsers,userAdMap);
         return ResultTable.resultTableOk(new PageInfo<YtAppUserListView>(dyzUsers));
@@ -68,19 +74,21 @@ public class UserController {
     private void setUserExtInfo(List<YtAppUserListView> dyzUsers, Map<String, List<YtDyzAdRecord>> userAdMap) {
         for (YtAppUserListView user : dyzUsers) {
             user.setLoginRecordList(loginRecordMapper.getLoginRecords(user.getUserId()));
-            user.setTodayVideo(userAdMap.containsKey(user.getUserId()) ?
-                    userAdMap.get(user.getUserId()).size() : 0);
-            //获取今日收益
+            //获取今日收益 | 今日视频播放数
             if (userAdMap.containsKey(user.getUserId())) {
                 List<YtDyzAdRecord> ytDyzAdRecords = userAdMap.get(user.getUserId());
-                BigDecimal todayIncome = calculateTodayIncome(ytDyzAdRecords);
+                List<YtDyzAdRecord> collect = ytDyzAdRecords.stream().filter(
+                        s -> DateUtil.isSameDay(DateUtil.date(),DateUtil.parseDate(s.getFinishTime()))).collect(Collectors.toList());
+                BigDecimal todayIncome = collect.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
+                user.setTodayVideo((int) collect.stream().filter(
+                        s->s.getAdSourceType()== AdSourceTypeEnum.rewarded_video.getAdSourceType()).count());
                 user.setTodayIncome(todayIncome);
             } else {
                 user.setTodayIncome(BigDecimal.ZERO);
+                user.setTodayVideo(0);
             }
         }
     }
-
     /**
      * 计算广告记录列表中今日的收益
      *
@@ -162,6 +170,9 @@ public class UserController {
     public Result<YtDyzUser> getUserInfo(@RequestParam("userId") String userId) {
         YtDyzUser user = appUserMapper.selectPrimaryKey(userId);
         user.setLoginRecordList(loginRecordMapper.getLoginRecords(userId));
+        user.setTodayAnswerCount(questionMapper.getAnswerCount(userId,1));
+        user.setHistoryAnswerCount(questionMapper.getAnswerCount(userId,2));
+        user.setAnswerRecordList(questionMapper.getAnswerRecords(userId));
         return Result.resultObjOk(user);
     }
 
@@ -240,4 +251,9 @@ public class UserController {
     public List<String> queryLoginRecords(@RequestBody AppUserQueryParam appUserQueryParam) {
         return loginRecordMapper.queryLoginCount(appUserQueryParam);
     }
+
+    @GetMapping("/queryByOpenid")
+    public List<YtDyzUser> queryByOpenid(@RequestParam("openid") String openid){
+        return appUserMapper.queryByOpenid(openid);
+    }
 }

+ 15 - 91
yt-app/app-service/src/main/java/com/ytpm/controller/WxController.java

@@ -22,11 +22,13 @@ import com.ytpm.handle.CustomerException;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzPowerRecord;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.service.AppUserService;
 import com.ytpm.util.RedisService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -36,6 +38,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Objects;
@@ -47,21 +50,17 @@ import java.util.Objects;
 @RequestMapping("/wx")
 public class WxController {
     private final static String GRANT_TYPE = "authorization_code";
-    @Resource
-    private RedisService redisService;
     @Autowired
     private AppUserMapper appUserMapper;
     @Autowired
-    private LoginRecordMapper loginRecordMapper;
-    @Autowired
-    private QuestionMapper questionMapper;
-    @Autowired
     private RiskFeign riskFeign;
+    @Autowired
+    private AppUserService appUserService;
 
     @PostMapping("/login")
     @ApiOperation("微信登录")
-    @Transactional(rollbackFor = Exception.class)
-    public Result<YtDyzUser> wxLogin(@RequestBody WxLoginParam param) {
+    @Transactional
+    public Result<YtDyzUser> wxLogin(@RequestBody WxLoginParam param, HttpServletRequest request) {
         //根据应用获取配置调用微信接口登录
         WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
         if(Objects.isNull(defaultConfig)){
@@ -76,42 +75,23 @@ public class WxController {
         if(Objects.isNull(wxUserInfo)) {
             throw new CustomerException("微信用户登录失败");
         }
-        //处理用户注册或登录更新信息
-        YtDyzUser old = appUserMapper.getYtAppUser(loginResult.getOpenid(), param.getDitchId());
-        if(Objects.isNull(old)) {
-            old = new YtDyzUser();
-            registryUser(param,wxUserInfo,loginResult, old);
-        }else{
-            deadWithUserCrud(old,wxUserInfo,param);
-        }
-        //设置最后一次答题问题ID、今日答题数、历史答题数
-        setExtInfo(old,wxUserInfo.getHeadimgurl());
+        param.setLoginIp(getClientIp(request));
+        YtDyzUser old = appUserService.crudForNewTrans(param,wxUserInfo,loginResult);
         //调用风控服务校验默认风控配置
         old.setRiskCode("313");
         Result<?> result = riskFeign.checkRisk(old);
         if(result.getCode()!=200){
             throw new CustomerException(result.getMessage());
         }
-        // 添加用户登录记录
-        addLoginRecord(param,old.getUserId());
         return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
     }
 
-    /**
-     * 处理用户数据
-     */
-    private void deadWithUserCrud(YtDyzUser old, WxUserInfo wxUserInfo, WxLoginParam param) {
-            //处于风控状态的用户不允许登录
-            if(!old.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())){
-                throw new CustomerException("当前用户处于"+UserStatusEnum.getByCode(old.getUserStatus())+"中,无法登录");
-            }
-            YtDyzUser newUser = new YtDyzUser();
-            newUser.setNickName(wxUserInfo.getNickname());
-            newUser.setHeadImg(wxUserInfo.getHeadimgurl());
-            newUser.setLastLoginTime(new Date());
-            newUser.setLastLoginIp(param.getLoginIp());
-            newUser.setLoginDays(old.getLoginDays()+1);
-            appUserMapper.updateUser(newUser);
+    private String getClientIp(HttpServletRequest request) {
+        String xfHeader = request.getHeader("X-Forwarded-For");
+        if (xfHeader == null) {
+            return request.getRemoteAddr();
+        }
+        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
     }
 
     /**
@@ -146,62 +126,6 @@ public class WxController {
         return loginResult;
     }
 
-    /**
-     * 设置扩展信息
-     */
-    private void setExtInfo(YtDyzUser old, String headimgurl) {
-        old.setHeadImg(headimgurl);
-        old.setLastQuestionId(questionMapper.getLastQuestionId(old.getUserId()));
-        old.setTodayAnswerCount(questionMapper.getAnswerCount(old.getUserId(),1));
-        old.setHistoryAnswerCount(questionMapper.getAnswerCount(old.getUserId(),2));
-        old.setAnswerRecordList(questionMapper.getAnswerRecords(old.getUserId()));
-        old.setLoginRecordList(loginRecordMapper.getLoginRecords(old.getUserId()));
-    }
-
-    /**
-     * 增加用户登录记录
-     */
-    private void addLoginRecord(WxLoginParam param,String userId) {
-        YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
-        loginRecord.setRecordId(IdUtil.fastSimpleUUID());
-        loginRecord.setUserId(userId);
-        loginRecord.setLoginTime(new Date());
-        loginRecord.setDeviceBrand(param.getBrand());
-        loginRecord.setDeviceModel(param.getModel());
-        loginRecord.setLoginIp(param.getLoginIp());
-        loginRecord.setOperator(param.getIpOperator());
-        loginRecord.setIpAddr(param.getLoginIp());
-        loginRecordMapper.insertOne(loginRecord);
-    }
-
-    /**
-     * 注册用户
-     */
-    private void registryUser(WxLoginParam param,WxUserInfo wxUserInfo,WxLoginResult loginResult, YtDyzUser old) {
-        old.setUserId(redisService.getAppUserId());
-        old.setNickName(wxUserInfo.getNickname());
-        old.setLastLoginTime(new Date());
-        old.setRegistryTime(new Date());
-        old.setLastLoginIp(param.getLoginIp());
-        old.setLoginDays(1);
-        old.setPower(0);
-        old.setTotalVideo(0);
-        old.setTotalIncome(BigDecimal.ZERO);
-        old.setRedPacketAmount(BigDecimal.ZERO);
-        old.setRedPacketBalance(BigDecimal.ZERO);
-        old.setPointsBalance(BigDecimal.ZERO);
-        old.setPointsTotal(BigDecimal.ZERO);
-        old.setWithdrawTotal(BigDecimal.ZERO);
-        old.setDitchId(param.getDitchId());
-        old.setSignDays(0);
-        old.setAppId(param.getAppId());
-        old.setUserStatus(UserStatusEnum.NORMAL.getCode());
-        old.setWxOpenId(loginResult.getOpenid());
-        old.setHeadImg(wxUserInfo.getHeadimgurl());
-        old.setPlatformId(StrConstant.PLATFORM_ID_PREFIX + IdUtil.getSnowflakeNextIdStr());
-        appUserMapper.addOne(old);
-    }
-
     @ApiOperation("获取微信默认配置项")
     @GetMapping("/defaultConfig")
     public Result<String> getWxDefaultConfig(int appType) {

+ 3 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/AdRecordMapper.java

@@ -17,5 +17,8 @@ public interface AdRecordMapper {
      */
     List<YtDyzAdRecord> getByUserId(@Param("userId") String userId,@Param("adsourceType") Integer adsourceType);
 
+    /**
+     * 查询激励视频记录
+     */
     List<YtDyzAdRecord> getByUserIds(@Param("userIds") String userIds);
 }

+ 10 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/AppUserMapper.java

@@ -77,4 +77,14 @@ public interface AppUserMapper {
      * 根据应用ID获取应用secret
      */
     String getSecretByAppId(@Param("appId") String appId);
+
+    /**
+     * 根据微信openid查询用户
+     */
+    List<YtDyzUser> queryByOpenid(@Param("openid")String openid);
+
+    /**
+     * 根据设备ID查询平台ID
+     */
+    String getByDeviceId(@Param("deviceId")String deviceId);
 }

+ 8 - 0
yt-app/app-service/src/main/java/com/ytpm/service/AppUserService.java

@@ -1,10 +1,18 @@
 package com.ytpm.service;
 
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.param.WxLoginParam;
+import com.ytpm.app.view.WxLoginResult;
+import com.ytpm.app.view.WxUserInfo;
 
 public interface AppUserService {
     /**
      * openid查询用户信息
      */
     YtDyzUser selectByOpenid(String openid, Long ditchId);
+
+    /**
+     * 子事务处理用户crud
+     */
+    YtDyzUser crudForNewTrans(WxLoginParam param, WxUserInfo wxUserInfo, WxLoginResult loginResult);
 }

+ 126 - 2
yt-app/app-service/src/main/java/com/ytpm/service/impl/AppUserServiceImpl.java

@@ -1,16 +1,40 @@
 package com.ytpm.service.impl;
 
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.ytpm.agent.enums.UserStatusEnum;
+import com.ytpm.app.model.YtDyzLoginRecord;
+import com.ytpm.app.param.WxLoginParam;
+import com.ytpm.app.view.WxLoginResult;
+import com.ytpm.app.view.WxUserInfo;
+import com.ytpm.constant.StrConstant;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.dao.LoginRecordMapper;
+import com.ytpm.dao.QuestionMapper;
+import com.ytpm.handle.CustomerException;
 import com.ytpm.service.AppUserService;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.ytpm.util.RedisService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Objects;
 
 @Service
 public class AppUserServiceImpl implements AppUserService {
 
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
+    @Resource
+    private LoginRecordMapper loginRecordMapper;
+    @Resource
+    private QuestionMapper questionMapper;
+    @Resource
+    private RedisService redisService;
 
     /**
      * openid查询用户信息
@@ -19,4 +43,104 @@ public class AppUserServiceImpl implements AppUserService {
     public YtDyzUser selectByOpenid(String openid,Long ditchId) {
         return appUserMapper.getYtAppUser(openid,ditchId);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
+    public YtDyzUser crudForNewTrans(WxLoginParam param, WxUserInfo wxUserInfo, WxLoginResult loginResult) {
+        //处理用户注册或登录更新信息
+        YtDyzUser old = appUserMapper.getYtAppUser(loginResult.getOpenid(), param.getDitchId());
+        if(Objects.isNull(old)) {
+            old = new YtDyzUser();
+            registryUser(param,wxUserInfo,loginResult, old);
+        }else{
+            deadWithUserCrud(old,wxUserInfo,param);
+        }
+        //设置最后一次答题问题ID、今日答题数、历史答题数
+        setExtInfo(old,wxUserInfo.getHeadimgurl());
+        // 添加用户登录记录
+        addLoginRecord(param,old.getUserId());
+        return old;
+    }
+    /**
+     * 设置扩展信息
+     */
+    private void setExtInfo(YtDyzUser old, String headimgurl) {
+        old.setHeadImg(headimgurl);
+        old.setLastQuestionId(questionMapper.getLastQuestionId(old.getUserId()));
+        old.setTodayAnswerCount(questionMapper.getAnswerCount(old.getUserId(),1));
+        old.setHistoryAnswerCount(questionMapper.getAnswerCount(old.getUserId(),2));
+        old.setAnswerRecordList(questionMapper.getAnswerRecords(old.getUserId()));
+        old.setLoginRecordList(loginRecordMapper.getLoginRecords(old.getUserId()));
+    }
+
+    /**
+     * 增加用户登录记录
+     */
+    private void addLoginRecord(WxLoginParam param,String userId) {
+        YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
+        loginRecord.setRecordId(IdUtil.fastSimpleUUID());
+        loginRecord.setUserId(userId);
+        loginRecord.setLoginTime(new Date());
+        loginRecord.setDeviceBrand(param.getBrand());
+        loginRecord.setDeviceModel(param.getModel());
+        loginRecord.setLoginIp(param.getLoginIp());
+        loginRecord.setOperator(param.getIpOperator());
+        loginRecord.setIpAddr(param.getIpLocation());
+        loginRecordMapper.insertOne(loginRecord);
+    }
+
+    /**
+     * 处理用户数据
+     */
+    private void deadWithUserCrud(YtDyzUser old, WxUserInfo wxUserInfo, WxLoginParam param) {
+        //处于风控状态的用户不允许登录
+        if(!old.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())){
+            throw new CustomerException("当前用户处于"+UserStatusEnum.getByCode(old.getUserStatus())+"中,无法登录");
+        }
+        YtDyzUser newUser = new YtDyzUser();
+        newUser.setUserId(old.getUserId());
+        newUser.setNickName(wxUserInfo.getNickname());
+        newUser.setHeadImg(wxUserInfo.getHeadimgurl());
+        newUser.setLastLoginTime(new Date());
+        newUser.setLastLoginIp(param.getLoginIp());
+        newUser.setPhone(param.getPhone());
+        newUser.setDeviceId(param.getDeviceId());
+        newUser.setLoginDays(old.getLoginDays()+1);
+        appUserMapper.updateUser(newUser);
+    }
+
+
+
+    /**
+     * 注册用户
+     */
+    private void registryUser(WxLoginParam param,WxUserInfo wxUserInfo,WxLoginResult loginResult, YtDyzUser old) {
+        old.setUserId(redisService.getAppUserId());
+        old.setPhone(param.getPhone());
+        old.setDeviceId(param.getDeviceId());
+        old.setNickName(wxUserInfo.getNickname());
+        old.setLastLoginTime(new Date());
+        old.setRegistryTime(new Date());
+        old.setLastLoginIp(param.getLoginIp());
+        old.setLoginDays(1);
+        old.setPower(0);
+        old.setTotalVideo(0);
+        old.setTotalIncome(BigDecimal.ZERO);
+        old.setRedPacketAmount(BigDecimal.ZERO);
+        old.setRedPacketBalance(BigDecimal.ZERO);
+        old.setPointsBalance(BigDecimal.ZERO);
+        old.setPointsTotal(BigDecimal.ZERO);
+        old.setWithdrawTotal(BigDecimal.ZERO);
+        old.setDitchId(param.getDitchId());
+        old.setSignDays(0);
+        old.setAppId(param.getAppId());
+        old.setUserStatus(UserStatusEnum.NORMAL.getCode());
+        old.setWxOpenId(loginResult.getOpenid());
+        old.setHeadImg(wxUserInfo.getHeadimgurl());
+        //根据设备ID获取平台ID 获取不到再生成平台ID
+        String platformId = appUserMapper.getByDeviceId(param.getDeviceId());
+        old.setPlatformId(StrUtil.isBlank(platformId)?
+                (StrConstant.PLATFORM_ID_PREFIX + IdUtil.getSnowflakeNextIdStr()):platformId);
+        appUserMapper.addOne(old);
+    }
 }

+ 54 - 9
yt-app/app-service/src/main/resources/mapper/AppUserMapper.xml

@@ -25,7 +25,9 @@
          ditch_id,
          platform_id,
          app_id,
-         power
+         power,
+         phone,
+         device_id
         )
         values
         (
@@ -50,7 +52,9 @@
          #{ditchId},
          #{platformId},
          #{appId},
-         #{power}
+         #{power},
+         #{phone},
+         #{deviceId}
         )
     </insert>
     <insert id="addPowerRecord">
@@ -75,6 +79,12 @@
             <if test="nickName != null">
                 nick_name = #{nickName},
             </if>
+            <if test="phone != null">
+                phone = #{phone},
+            </if>
+            <if test="deviceId != null">
+                device_id = #{deviceId},
+            </if>
             <if test="headImg != null">
                 head_img = #{headImg},
             </if>
@@ -131,14 +141,14 @@
     </update>
     <select id="getYtAppUser" resultType="com.ytpm.app.model.YtDyzUser">
         select
-           user_id, app_id, ditch_id, nick_name,head_img, power, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id
+           user_id, app_id,phone,device_id, ditch_id, nick_name,head_img, power, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id
         from yt_dyz_user
         where wx_open_id = #{openid}
         and ditch_id = #{ditchId}
     </select>
     <select id="queryAll" resultType="com.ytpm.app.view.YtAppUserListView">
         select
-            user_id,app_id, ditch_id, nick_name,head_img, power, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id
+            user_id,app_id,phone,device_id, ditch_id, nick_name,head_img, power, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id
         from yt_dyz_user
         where 1 = 1
         <if test="userId != null and userId !=''">
@@ -175,15 +185,38 @@
     </select>
     <select id="selectPrimaryKey" resultType="com.ytpm.app.model.YtDyzUser">
         select
-            user_id,app_id, ditch_id, head_img, nick_name, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id, power
+            user_id,app_id,phone,device_id, ditch_id, head_img, nick_name, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id, power
         from yt_dyz_user
         where user_id = #{userId}
     </select>
     <select id="getUserList" resultType="com.ytpm.app.model.YtDyzUser">
         select
-            user_id,app_id, ditch_id, head_img, nick_name, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, platform_id, power
-        from yt_dyz_user
-        where user_id in
+            du.user_id,
+            du.head_img,
+            du.nick_name,
+            du.phone,
+            du.device_id,
+            du.registry_time,
+            du.last_login_time,
+            du.last_login_ip,
+            du.login_days,
+            du.total_video,
+            du.total_income,
+            du.red_packet_balance,
+            du.red_packet_amount,
+            du.points_balance,
+            du.points_total,
+            du.withdraw_total,
+            du.sign_days,
+            du.user_status,
+            du.risk_reason,
+            du.wx_open_id,
+            du.ditch_id,
+            du.app_id,
+            du.platform_id,
+            du.power
+        from yt_dyz_user du
+        where du.user_id in
         <foreach collection="userIds.split(',')" item="item" separator="," open="(" close=")">
             #{item}
         </foreach>
@@ -191,7 +224,7 @@
 
     <select id="queryAllByTime" resultType="com.ytpm.app.model.YtDyzUser">
         SELECT
-        user_id,app_id, nick_name, head_img, power, registry_time,
+        user_id,app_id,phone,device_id, nick_name, head_img, power, registry_time,
         last_login_time, last_login_ip, login_days, total_video,
         total_income, red_packet_balance, red_packet_amount,
         points_balance, points_total, withdraw_total, sign_days,
@@ -219,4 +252,16 @@
         from yt_app_default_config
         where app_id = #{appId}
     </select>
+    <select id="queryByOpenid" resultType="com.ytpm.app.model.YtDyzUser">
+        select
+            user_id,phone,device_id, head_img, nick_name, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, ditch_id, app_id, platform_id, power
+        from yt_dyz_user
+        where wx_open_id = #{openid}
+    </select>
+    <select id="getByDeviceId" resultType="com.ytpm.app.model.YtDyzUser">
+        select
+            platform_id
+        from yt_dyz_user
+        where device_id = #{deviceId}
+    </select>
 </mapper>

+ 10 - 1
yt-common/src/main/java/com/ytpm/app/model/DefaultRiskConfig.java

@@ -17,7 +17,7 @@ import java.math.BigDecimal;
 @AllArgsConstructor
 @NoArgsConstructor
 public class DefaultRiskConfig {
-    @CustomField(desc = "?天内",node = 1)
+    @CustomField(desc = "?天内",node = 99)
     @ApiModelProperty("?天内")
     private int days;
     @CustomField(desc = "IP前?段",node = 1)
@@ -44,4 +44,13 @@ public class DefaultRiskConfig {
     @ApiModelProperty("有?条")
     private int haveCount;
 
+    @CustomField(desc = "生成UID数", node = 1)
+    @ApiModelProperty("生成UID数")
+    private int uidCount;
+    /**
+     * 校验的字段名,用于匹配数据中相同字段
+     */
+    @CustomField(value = "same_field_name", desc = "字段?相同", node = 99)
+    @ApiModelProperty("字段?相同")
+    private String sameFieldName;
 }

+ 6 - 0
yt-common/src/main/java/com/ytpm/app/model/YtDyzUser.java

@@ -111,8 +111,14 @@ public class YtDyzUser extends PageMeta {
     private int todayVideo;
     @ApiModelProperty(value = "渠道ID")
     private Long ditchId;
+    @ApiModelProperty(value = "渠道名称")
+    private String ditchName;
     @ApiModelProperty(value = "今日收益")
     private BigDecimal todayIncome;
     @ApiModelProperty(value = "应用ID")
     private String appId;
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+    @ApiModelProperty(value = "设备ID")
+    private String deviceId;
 }

+ 4 - 0
yt-common/src/main/java/com/ytpm/app/param/WxLoginParam.java

@@ -7,6 +7,8 @@ import lombok.Data;
 @ApiModel("微信登录参数")
 @Data
 public class WxLoginParam {
+    @ApiModelProperty(value = "手机号")
+    private String phone;
     @ApiModelProperty(value = "手机品牌")
     private String brand;
     @ApiModelProperty(value = "手机型号")
@@ -27,4 +29,6 @@ public class WxLoginParam {
     private int appType;
     @ApiModelProperty(value = "所属应用ID",required = false)
     private String appId;
+    @ApiModelProperty(value = "设备ID",required = false)
+    private String deviceId;
 }

+ 4 - 0
yt-common/src/main/java/com/ytpm/app/view/YtAppUserListView.java

@@ -28,6 +28,10 @@ public class YtAppUserListView extends PageMeta {
     private String wxOpenId;
     @ApiModelProperty("渠道商ID")
     private String channelId;
+    @ApiModelProperty("渠道ID")
+    private Long ditchId;
+    @ApiModelProperty("渠道名称")
+    private String ditchName;
     @ApiModelProperty("平台ID")
     private String platformId;
     @ApiModelProperty("应用名称")

+ 1 - 1
yt-common/src/main/java/com/ytpm/custom/CustomField.java

@@ -9,7 +9,7 @@ import java.lang.annotation.Target;
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface CustomField {
-    /** 注解携带值 */
+    /** 注解携带字典值 */
     String value() default "";
     /** 注解字段描述 */
     String desc() default "";

+ 18 - 0
yt-common/src/main/java/com/ytpm/risk/enums/EffectNodeEnum.java

@@ -0,0 +1,18 @@
+package com.ytpm.risk.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum EffectNodeEnum {
+    LOGIN(1,"登录"),
+    ADSOURCE(2, "广告"),
+    ;
+
+    private final Integer node;
+    private final String desc;
+
+    EffectNodeEnum(Integer node, String desc) {
+        this.node = node;
+        this.desc = desc;
+    }
+}

+ 2 - 0
yt-common/src/main/java/com/ytpm/risk/param/RiskBannedListParam.java

@@ -20,6 +20,8 @@ public class RiskBannedListParam extends PageMeta {
     private String channelId;
     @ApiModelProperty("应用ID")
     private String appId;
+    @ApiModelProperty("用户ID")
+    private String userId;
     @ApiModelProperty("加盟商ID")
     private String agentId;
     @ApiModelProperty("渠道类型")

+ 1 - 1
yt-common/src/main/java/com/ytpm/risk/param/RiskDeblockingListParam.java

@@ -25,7 +25,7 @@ public class RiskDeblockingListParam extends PageMeta {
     @ApiModelProperty("解封时间结束")
     private Date deblockingTimeEnd;
     @ApiModelProperty("解封原因")
-    private Date deblockingReason;
+    private String deblockingReason;
     @ApiModelProperty("操作人")
     private String operator;
     @ApiModelProperty("应用ID")

+ 4 - 0
yt-common/src/main/java/com/ytpm/risk/view/RiskBannedListView.java

@@ -58,4 +58,8 @@ public class RiskBannedListView extends PageMeta {
     private Integer bannedType;
     @ApiModelProperty("风控期限")
     private Integer bannedLimit;
+    @ApiModelProperty("渠道ID")
+    private Long ditchId;
+    @ApiModelProperty("渠道名称")
+    private String ditchName;
 }

+ 4 - 0
yt-common/src/main/java/com/ytpm/risk/view/RiskDeblockingListView.java

@@ -45,4 +45,8 @@ public class RiskDeblockingListView extends PageMeta {
     private String deblockingReason;
     @ApiModelProperty("渠道类型")
     private Integer channelType;
+    @ApiModelProperty("渠道ID")
+    private Long ditchId;
+    @ApiModelProperty("渠道名称")
+    private String ditchName;
 }

+ 7 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/dao/RiskConfigMapper.java

@@ -79,4 +79,11 @@ public interface RiskConfigMapper {
      * 根据effect_node 获取不同业务节点风控规则
      */
     RiskTemplateView getByNode(@Param("effectNode") Integer effectNode);
+
+    /**
+     * 根据应用ID查询用户自定义的风控配置模版
+     * @param appId 应用ID
+     * @param effectNode 业务节点
+     */
+    List<RiskTemplateView> getCustomTempConfig(@Param("appId") String appId,@Param("effectNode")Integer effectNode);
 }

+ 103 - 19
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -2,6 +2,7 @@ package com.ytpm.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.IdUtil;
@@ -30,6 +31,7 @@ import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.handle.CustomerException;
 import com.ytpm.risk.enums.BannedTypeEnum;
+import com.ytpm.risk.enums.EffectNodeEnum;
 import com.ytpm.risk.model.YtRiskConfig;
 import com.ytpm.risk.model.YtRiskTemplate;
 import com.ytpm.risk.param.RiskBannedListParam;
@@ -66,6 +68,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -95,7 +98,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     @Override
     public ResultTable<RiskConfigView> getRiskConfig(String appIds) {
         List<AgentAppClassView> viewList = configMapper.getAppClazz(appIds);
-        List<RiskConfigView> configList = new ArrayList<RiskConfigView>();
+        List<RiskConfigView> configList = new ArrayList<>();
         try{
             for (AgentAppClassView view : viewList) {
                 addConfigItem(Class.forName(view.getFullName()).getDeclaredFields(),configList,null);
@@ -113,10 +116,11 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     @Override
     public ResultTable<RiskConfigView> getFieldConfigByNode(Integer effectNode) {
         List<AgentAppClassView> viewList = configMapper.getAppClazz("");
-        List<RiskConfigView> configList = new ArrayList<RiskConfigView>();
+        List<RiskConfigView> configList = new ArrayList<>();
+        Set<String> clazzSet = viewList.stream().map(AgentAppClassView::getFullName).collect(Collectors.toSet());
         try{
-            for (AgentAppClassView view : viewList) {
-                addConfigItem(Class.forName(view.getFullName()).getDeclaredFields(),configList,effectNode);
+            for (String fullName : clazzSet) {
+                addConfigItem(Class.forName(fullName).getDeclaredFields(),configList,effectNode);
             }
         }catch (Exception e){
             log.error(e.getMessage());
@@ -132,8 +136,10 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         RiskConfigView view;
         for (Field field : fields) {
             field.setAccessible(true);
-            if(Objects.nonNull(effectNode) && field.getAnnotation(CustomField.class).node() != effectNode)continue;
-            if(!field.isAnnotationPresent(CustomField.class))continue;
+            if((Objects.nonNull(effectNode) && field.getAnnotation(CustomField.class).node()!=99 &&
+                    field.getAnnotation(CustomField.class).node() != effectNode)||
+                    !field.isAnnotationPresent(CustomField.class)
+            )continue;
             view = new RiskConfigView();
             view.setFieldName(field.getName());
             if(CharSequenceUtil.isNotBlank(field.getAnnotation(CustomField.class).value())){
@@ -163,8 +169,11 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             BeanUtil.copyProperties(listVO, config);
             config.setChannelId(param.getChannelId());
             String format = String.format(config.getFieldDesc(), config.getConfigVal());
-            if(CharSequenceUtil.isNotBlank(format)&&configList.indexOf(listVO)!= (configList.size() - 1)){
-                content.append(format).append(",");
+            if(CharSequenceUtil.isNotBlank(format)){
+                content.append(format);
+                if(configList.indexOf(listVO)!= (configList.size() - 1)){
+                    content.append(",");
+                }
             }
             configs.add(config);
         }
@@ -406,7 +415,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             config.setConfigVal(listParam.getConfigVal());
             configMapper.updateConfigVal(config);
             String format = String.format(listParam.getFieldDesc(), listParam.getConfigVal());
-            if(StrUtil.isNotBlank(format)){
+            if(CharSequenceUtil.isNotBlank(format)){
                 content.append(format).append(",");
             }
         }
@@ -430,11 +439,39 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         if(1==view.getEnabled()){
             checkDefaultRiskConfig(dyzUser, view.getConfigList());
         }
+        checkRisk322(dyzUser);
         //查询用户所在app是否配置其他风控规则
-
+//        checkCustomRisk(dyzUser,EffectNodeEnum.LOGIN.getNode(),null);
         return Result.resultOk(RepMessage.QUERY_SUCCESS);
     }
 
+    /**
+     * 校验风控规则322
+     */
+    private void checkRisk322(YtDyzUser dyzUser) {
+        RiskTemplateView view = configMapper.getByCode("322");
+        //根据openid查询用户信息
+        List<YtDyzUser> dyzUsers = appFeign.queryByOpenid(dyzUser.getWxOpenId());
+        List<RiskConfigView> configList = view.getConfigList();
+        Map<String, String> configMap = configList.stream().collect(
+                Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
+        //判断同应用 UID生成数如果不小于配置数则触发规则校验
+        int uidCount = Integer.parseInt(configMap.get("uidCount"));
+        if(dyzUsers.size()<uidCount)return;
+        //获取配置天数以判断 同应用多渠道账号注册时间间隔不得低于配置时间
+        int days = Integer.parseInt(configMap.get("days"));
+        List<Date> regDateList = dyzUsers.stream().map(YtDyzUser::getRegistryTime).collect(Collectors.toList());
+        Date first = regDateList.get(0);
+        long interval;
+        for (int i = 1; i < regDateList.size(); i++) {
+            interval  = DateUtil.between(first, regDateList.get(i), DateUnit.DAY);
+            if(days > interval){
+                riskLockUser(dyzUser,"322","系统判定重复刷单用户限制","当前用户已被风控!");
+            }
+            first = regDateList.get(i);
+        }
+    }
+
     /**
      * 校验默认风控配置, 固定配置值不改
      *  days ?天内为1
@@ -499,20 +536,44 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             DateUtil.isSameDay(DateUtil.parse(s.getFinishTime()), new Date())
         ).sorted(Comparator.comparing(YtDyzAdRecord::getFinishTime)).collect(Collectors.toList());
         //校验风控742规则
-        RiskTemplateView ecpmLimit= configMapper.getByCode("742");
+        RiskTemplateView ecpmLimit= configMapper.getByCode(dyzUser.getAppId()+"-742");//TODO 为了产品调控参数,风控编码设置为appid
+//        RiskTemplateView ecpmLimit= configMapper.getByCode("742");
         checkRisk742(ecpmLimit,dyzUser,records);
         //校验风控746规则
         if(!records.isEmpty() && records.size()>1){
             checkRisk746(dyzUser,records);
         }
+        //查询用户所在app是否配置其他风控规则
+//        checkCustomRisk(dyzUser,EffectNodeEnum.ADSOURCE.getNode(),table.getData());
         return Result.resultOk(RepMessage.QUERY_SUCCESS);
     }
 
+    /**
+     * 校验用户自定义风控规则
+     */
+    private void checkCustomRisk(YtDyzUser dyzUser, Integer node, List<YtDyzAdRecord> data) {
+        List<RiskTemplateView> templateList = configMapper.getCustomTempConfig(
+                dyzUser.getAppId(), node);
+        if(CollUtil.isNotEmpty(templateList)){
+            //校验用户的其他规则配置
+            for (RiskTemplateView templateView : templateList) {
+                if(EffectNodeEnum.LOGIN.getNode().equals(node)){
+                    checkCondition(dyzUser, templateView);
+                }else{
+                    for (YtDyzAdRecord datum : data) {
+                        checkCondition(datum, templateView);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * 校验默认风控规则746
      */
     private void checkRisk746(YtDyzUser dyzUser, List<YtDyzAdRecord> records) {
-        RiskTemplateView revenue = configMapper.getByCode("746");
+        RiskTemplateView revenue = configMapper.getByCode(dyzUser.getAppId()+"-746");//TODO 为了产品调控参数,风控编码设置为appid.
+//        RiskTemplateView revenue = configMapper.getByCode("746");
         if(revenue.getEnabled()!=1)return;
         Map<String, String> revenueMap = revenue.getConfigList().stream().collect(
                 Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
@@ -604,6 +665,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         switch (param.getUserStatus()){
             case 2:
                 appUser.setRiskReason(param.getReason());
+                break;
             case 3: //增加封禁记录
                 RiskBannedParam bannedParam = new RiskBannedParam();
                 BeanUtil.copyProperties(param, bannedParam);
@@ -688,10 +750,15 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             try{
                 //多选校验值包含 单选校验值相等
                 Object o = conditionField.get(obj);
-                if(2==vo.getMulty()){
-                    checkSameVal(o, vo.getConfigVal(), vo.getFieldDesc());
-                }else{
-                    checkContainsVal(o,vo.getConfigVal(), vo.getFieldDesc());
+                switch (vo.getMulty()){
+                    case 1:
+                        checkContainsVal(o,vo.getConfigVal(), vo.getFieldDesc());
+                        break;
+                    case 2:
+                        checkSameVal(o, vo.getConfigVal(), vo.getFieldDesc());
+                        break;
+                    default:
+                        checkCompareVal(o, vo.getConfigVal(),vo.getFieldDesc(),vo.getMulty());
                 }
             }catch (Exception e){
                 throw new CustomerException(e.getMessage());
@@ -700,6 +767,24 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
 
     }
 
+    /**
+     * 校验值大于
+     * @param o 校验对象值
+     * @param configVal 配置值
+     * @param fieldDesc 字段描述
+     * @param type 3- o > configVal  4- o < configVal
+     */
+    private void checkCompareVal(Object o, String configVal, String fieldDesc, int type) {
+        BigDecimal a = new BigDecimal(o.toString());
+        BigDecimal b = new BigDecimal(configVal);
+        if(type == 3 && a.compareTo(b) < 1){
+                throw new CustomerException(fieldDesc+"不符合准入条件!");
+        }
+        if(type == 4 && b.compareTo(a) < 1){
+                throw new CustomerException(fieldDesc+"不符合准入条件!");
+        }
+    }
+
     /**
      * 校验值包含
      */
@@ -736,7 +821,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         }
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
-            if(o instanceof Date && !format.parse(configVal).equals((Date)o)){
+            if(o instanceof Date && !format.parse(configVal).equals(o)){
                 throw new CustomerException(desc+"不符合准入条件!");
             }
         } catch (ParseException e) {
@@ -746,8 +831,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
 
     @Override
     public List<YtPlatformBanned> queryBannedRecord(Date startTime, Date endTime) {
-        List<YtPlatformBanned> ytPlatformBanneds = riskManageMapper.queryBannedRecord(startTime, endTime);
-        return ytPlatformBanneds;
+        return riskManageMapper.queryBannedRecord(startTime, endTime);
     }
 
     @Override

+ 24 - 0
yt-risk/risk-manage/src/main/resources/mapper/RiskConfigMapper.xml

@@ -264,4 +264,28 @@
         from yt_app
         where app_id = #{appId}
     </select>
+    <select id="getCustomTempConfig" resultMap="RiskTemplateViewMap">
+        SELECT
+            rt.template_id,
+            rt.template_code,
+            rt.template_name,
+            rt.template_content,
+            rt.enabled,
+            rc.config_id,
+            rt.effect_node,
+            rc.field_name,
+            rc.field_desc,
+            rc.config_type,
+            rc.config_val,
+            rc.multy
+        FROM
+            yt_risk_template rt
+                LEFT JOIN yt_risk_template_config rtc ON rt.template_id = rtc.template_id
+                LEFT JOIN yt_risk_config rc ON rtc.config_id = rc.config_id
+        WHERE
+            rt.enabled = 1
+            and rt.can_modify = 1
+            and rt.app_id = #{appId}
+            and rt.effect_node = #{effectNode}
+    </select>
 </mapper>

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

@@ -66,7 +66,9 @@
             pd.operator,
             pd.operator_name,
             a.app_id,
-            a.app_name
+            a.app_name,
+            a.ditch_id,
+            a.ditch_name
         FROM
             yt_platform_deblocking pd
             JOIN yt_app a ON pd.app_id = a.app_id
@@ -75,6 +77,9 @@
         <if test="appId != null and appId != ''">
             and a.app_id = #{appId}
         </if>
+        <if test="channelOrigin != null">
+            and a.ditch_id = #{channelOrigin}
+        </if>
         <if test="deblockingReason != null and deblockingReason != ''">
             and pd.deblocking_reason like concat('%',#{deblockingReason},'%')
         </if>
@@ -99,7 +104,9 @@
         pb.user_id,
         pb.agent_id,
         a.app_id,
-        a.app_name
+        a.app_name,
+        a.ditch_id,
+        a.ditch_name
         FROM
         yt_platform_banned pb
         JOIN yt_app a ON pb.app_id = a.app_id
@@ -108,6 +115,12 @@
         <if test="appId != null and appId != ''">
             and a.app_id = #{appId}
         </if>
+        <if test="userId != null and userId != ''">
+            and pb.user_id = #{userId}
+        </if>
+        <if test="channelOrigin != null">
+            and a.ditch_id = #{channelOrigin}
+        </if>
         <if test="bannedReason != null and bannedReason != ''">
             and pb.banned_reason like concat('%',#{bannedReason},'%')
         </if>