浏览代码

refactor:代码优化

hidewnd 1 周之前
父节点
当前提交
a2262d516e
共有 16 个文件被更改,包括 196 次插入249 次删除
  1. 3 0
      yt-common/src/main/java/com/ytpm/agent/param/AdRecordListParam.java
  2. 2 2
      yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java
  3. 0 1
      yt-common/src/main/java/com/ytpm/handle/LoginServiceFactory.java
  4. 25 0
      yt-common/src/main/java/com/ytpm/handle/RiskException.java
  5. 14 1
      yt-common/src/main/java/com/ytpm/util/HttpClientUtil.java
  6. 0 19
      yt-common/src/main/java/com/ytpm/util/IPUtil.java
  7. 2 9
      yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/config/interceptor/HttpInterceptor.java
  8. 14 12
      yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/UserController.java
  9. 34 56
      yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/WxController.java
  10. 1 0
      yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/dao/AdRecordMapper.java
  11. 3 2
      yt-ios-lemon/lemon-ios-service/src/main/resources/mapper/AdRecordMapper.xml
  12. 2 8
      yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/config/interceptor/HttpInterceptor.java
  13. 45 68
      yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/controller/WxController.java
  14. 3 4
      yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/service/impl/AdServiceImpl.java
  15. 2 8
      yt-question/yt-question-service/src/main/java/com/ytpm/question/config/interceptor/HttpInterceptor.java
  16. 46 59
      yt-question/yt-question-service/src/main/java/com/ytpm/question/controller/WxController.java

+ 3 - 0
yt-common/src/main/java/com/ytpm/agent/param/AdRecordListParam.java

@@ -3,6 +3,7 @@ package com.ytpm.agent.param;
 
 import com.ytpm.general.PageMeta;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -25,6 +26,8 @@ public class AdRecordListParam extends PageMeta {
 
     private String userId;
 
+    private String iosId;
+
     private String adsourceType;
 
     private Integer loginStatus;

+ 2 - 2
yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java

@@ -11,7 +11,7 @@ import com.ytpm.app.param.LoginParam;
 import com.ytpm.app.view.WxDefaultConfig;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
-import com.ytpm.util.IPUtil;
+import com.ytpm.util.HttpClientUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 
@@ -65,7 +65,7 @@ public abstract class AbstractLoginService {
      * @return YtDyzUser
      */
     public final <T extends YtUser> T loginHandle(LoginParam loginParam, HttpServletRequest request) {
-        loginParam.setLoginIp(IPUtil.getClientIp(request));
+        loginParam.setLoginIp(HttpClientUtil.getClientIp(request));
         // 获取子包默认配置
         WxDefaultConfig defaultConfig = getLoginConfig(loginParam.getAppType());
         if (Objects.isNull(defaultConfig)) {

+ 0 - 1
yt-common/src/main/java/com/ytpm/handle/LoginServiceFactory.java

@@ -2,7 +2,6 @@ package com.ytpm.handle;
 
 
 import com.ytpm.app.enums.LoginType;
-import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.model.YtUser;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.general.RepMessage;

+ 25 - 0
yt-common/src/main/java/com/ytpm/handle/RiskException.java

@@ -0,0 +1,25 @@
+package com.ytpm.handle;
+
+
+import lombok.Getter;
+
+/**
+ * 风控异常
+ *
+ * @author lih
+ * @date 2025-10-29 15:23
+ */
+@Getter
+public class RiskException extends RuntimeException {
+
+    private int riskCode;
+
+    public RiskException(String message) {
+        super(message);
+    }
+
+    public RiskException(Integer riskCode, String message) {
+        super(message);
+        this.riskCode = riskCode;
+    }
+}

+ 14 - 1
yt-common/src/main/java/com/ytpm/util/HttpClientUtil.java

@@ -1,4 +1,17 @@
 package com.ytpm.util;
 
-public class HttpClientUtil {
+import cn.hutool.http.HttpUtil;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class HttpClientUtil extends HttpUtil {
+
+    public static String getClientIp(HttpServletRequest request) {
+        String xfHeader = request.getHeader("X-Forwarded-For");
+        if (xfHeader == null) {
+            return request.getRemoteAddr();
+        }
+        // 可能会有多个IP,这里取第一个逗号前的IP
+        return xfHeader.split(",")[0];
+    }
 }

+ 0 - 19
yt-common/src/main/java/com/ytpm/util/IPUtil.java

@@ -1,19 +0,0 @@
-package com.ytpm.util;
-
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * @author lih
- * @date 2025/9/4
- */
-public class IPUtil {
-
-    public static String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
-}

+ 2 - 9
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/config/interceptor/HttpInterceptor.java

@@ -1,5 +1,6 @@
 package com.ytpm.lemonios.config.interceptor;
 
+import com.ytpm.util.HttpClientUtil;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -22,20 +23,12 @@ public class HttpInterceptor implements HandlerInterceptor {
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
                              @NonNull Object obj) {
         // 获取客户端IP地址
-        String clientIp = getClientIp(request);
+        String clientIp = HttpClientUtil.getClientIp(request);
         String requestURI = request.getRequestURI();
         log.info("{}收到来自客户端[{}]的用户请求:{}", applicationNameZh, clientIp, requestURI);
         return true;
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
-
     /**
      * 请求处理之后调用;在视图渲染之前,controller处理之后。
      */

+ 14 - 12
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/UserController.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ytpm.advertise.enums.AdSourceTypeEnum;
+import com.ytpm.agent.enums.AdRecordEnum;
 import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.agent.param.AdRecordListParam;
 import com.ytpm.agent.param.AuditCheckParam;
@@ -209,24 +210,25 @@ public class UserController {
         return ResultTable.resultTableOk(new PageInfo<YtDyzAdRecord>(result));
     }
 
+    /**
+     * agent 调用查询用户广告记录
+     */
     @PostMapping("/adRecords/page")
-    public ResultTable<YtDyzAdRecord> adRecordsPage(@RequestBody AdRecordListParam param, Errors errors) {
+    public ResultTable<YtDyzAdRecord> adRecordsPage(@RequestBody AdRecordListParam param) {
         PageHelper.startPage(param.getPage(), param.getLimit());
         YtDyzUser user = appUserMapper.selectById(param.getUserId());
-        List<YtDyzAdRecord> adrecords;
-        if (param.getLoginStatus() == 1){
-            adrecords = adRecordMapper.getByIosIdBeforeLogin(user.getIosId());
-            for (YtDyzAdRecord adrecord: adrecords){
-                if (adrecord.getUserId() == null){
-                    adrecord.setUserId(user.getUserId());
-                    adRecordMapper.updateOneVisitor(adrecord);
+        param.setIosId(user.getIosId());
+        List<YtDyzAdRecord> adRecords = adRecordMapper.getByUserByParam(param);
+        if (AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())){
+            for (YtDyzAdRecord adRecord: adRecords){
+                if (adRecord.getUserId() == null){
+                    adRecord.setUserId(user.getUserId());
+                    adRecordMapper.updateOneVisitor(adRecord);
                 }
-                adrecord.setLoginStatus(1);
+                adRecord.setLoginStatus(AdRecordEnum.LOGIN_BEFORE.getCode());
             }
-        } else {
-            adrecords = adRecordMapper.getByUserByParam(param);
         }
-        return ResultTable.resultTableOk(new PageInfo<>(adrecords));
+        return ResultTable.resultTableOk(new PageInfo<>(adRecords));
     }
 
     /**

+ 34 - 56
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/WxController.java

@@ -7,39 +7,45 @@ import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.agent.model.YtDitch;
-import com.ytpm.app.enums.AppTypeEnums;
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtAppDefaultConfig;
 import com.ytpm.app.model.YtDyzAdRecord;
-import com.ytpm.app.model.YtDyzPowerRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.AppConfigUpdateParam;
 import com.ytpm.app.param.IosLoginParam;
 import com.ytpm.app.param.WxLoginParam;
-import com.ytpm.app.view.*;
+import com.ytpm.app.view.IosPowerResView;
+import com.ytpm.app.view.IosUserInfo;
+import com.ytpm.app.view.WxDefaultConfig;
+import com.ytpm.app.view.WxLoginResult;
+import com.ytpm.app.view.WxUserInfo;
 import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.StatusCode;
-import com.ytpm.handle.CommonException;
 import com.ytpm.lemonios.dao.AdRecordMapper;
 import com.ytpm.lemonios.dao.AppUserMapper;
 import com.ytpm.lemonios.dao.DitchMapper;
 import com.ytpm.lemonios.service.AppUserService;
+import com.ytpm.util.HttpClientUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+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.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -51,19 +57,20 @@ import java.util.Objects;
 @RequestMapping("/wx")
 public class WxController {
     private final static String GRANT_TYPE = "authorization_code";
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
-    @Autowired
+    @Resource
     private AdRecordMapper recordMapper;
-    @Autowired
+    @Resource
     private RiskFeign riskFeign;
-    @Autowired
+    @Resource
     private AppUserService appUserService;
-    @Autowired
+    @Resource
     private DitchMapper ditchMapper;
     @Value("${yt.ios.appid:}")
     private String appId;
 
+    @Deprecated
     @PostMapping("/login")
     @ApiOperation("微信登录")
     @Transactional
@@ -82,7 +89,7 @@ public class WxController {
         if(Objects.isNull(wxUserInfo)) {
             return new Result<>(StatusCode.ACCESS_ERR,"微信用户登录失败");
         }
-        param.setLoginIp(getClientIp(request));
+        param.setLoginIp(HttpClientUtil.getClientIp(request));
         YtDyzUser old = appUserService.crudForNewTrans(param,wxUserInfo,loginResult);
         //调用风控服务校验默认风控配置
         old.setRiskCode("313");
@@ -99,22 +106,20 @@ public class WxController {
     public Result<YtDyzUser> iosLogin(@RequestBody IosLoginParam param, HttpServletRequest request) {
         //根据应用ID获取配置调用接口登录
         WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfigByDitchId(param.getDitchId());
-
         // 当默认配置不存在时,尝试通过渠道信息获取备用配置
         if (Objects.isNull(defaultConfig)) {
             // 1. 检查渠道是否存在(提前拦截无效情况)
             YtDitch ditch = ditchMapper.selectById(param.getDitchId());
-            if (ditch == null) {
-                return new Result<>(StatusCode.ACCESS_ERR, "登录失败,未找到相应配置!");
-            }
-            // 2. 通过渠道的appId获取备用配置
-            defaultConfig = appUserMapper.getByAppId(ditch.getAppId());
-            if (Objects.isNull(defaultConfig)) {
-                return new Result<>(StatusCode.ACCESS_ERR, "登录失败,未找到相应配置!");
+            if (ditch != null) {
+                // 2. 通过渠道的appId获取备用配置
+                defaultConfig = appUserMapper.getByAppId(ditch.getAppId());
             }
         }
+        if (Objects.isNull(defaultConfig)) {
+            return new Result<>(StatusCode.ACCESS_ERR, "登录失败,未找到相应配置!");
+        }
         IosUserInfo userInfo = setIosUserInfo(param);
-        param.setLoginIp(getClientIp(request));
+        param.setLoginIp(HttpClientUtil.getClientIp(request));
         YtDyzUser old = appUserService.crudForNewTransIos(param, userInfo, LoginType.IOS.getTypeName());
         //调用风控服务校验默认风控配置
         old.setRiskCode("313");
@@ -141,22 +146,8 @@ public class WxController {
             user = appUserService.crudForNewTransIos(param, userInfo, LoginType.VISITOR.getTypeName());
         }
         //2.拿3条记录 设置到user
+        // TODO 当前仅截取最新三条记录,可能遗漏本次登陆前的风控记录(停落时间过长记录超过三条)
         List<YtDyzAdRecord> adRecordList = recordMapper.getByIosIdBeforeLogin(param.getIosId());
-        List<YtDyzAdRecord> newAdRecordList = new ArrayList<>();
-        if (adRecordList != null && !adRecordList.isEmpty()) {
-            for (YtDyzAdRecord adRecord : adRecordList) {
-                if (adRecord.getAdSourceType() == 0){
-                    newAdRecordList.add(adRecord);
-                }
-                if (adRecord.getAdSourceType() == 2){
-                    newAdRecordList.add(adRecord);
-                }
-                if (adRecord.getAdSourceType() == 4){
-                    newAdRecordList.add(adRecord);
-                }
-            }
-        }
-
         user.setPreAdRecordList(adRecordList);
         user.setLoginType(LoginType.VISITOR);
         user.setAppId(appId);
@@ -191,20 +182,14 @@ public class WxController {
         return appUserService.addDefaultConfig(param);
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
 
     /**
      * 获取微信用户信息
      */
     private WxUserInfo getWechatUserInfo(String accessToken, String openid) {
         // 根据token和openid 获取用户信息
-        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openid+"&lang=zh_CN";
+        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token={}&openid={}&lang=zh_CN";
+        userInfoUrl = StrUtil.format(userInfoUrl, accessToken, openid);
         String curUser = HttpUtil.get(userInfoUrl);
         WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
         log.error("获取的用户信息:{}",wxUserInfo);
@@ -236,20 +221,13 @@ public class WxController {
     /**
      * 微信登录
      */
-    private WxLoginResult getWechatLoginInfo(String wxCode,int appType,String appId,String secret) {
-
-        String wxLoginUrl;
-        if(AppTypeEnums.QNJZ.getCode() == appType){
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
-                    +appId+"&secret="+secret+"&code="+wxCode+"&grant_type="+GRANT_TYPE;
-        }else{
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appId
-                    +"&secret="+secret+"&code="+wxCode+"&grant_type="+GRANT_TYPE;
-        }
+    private WxLoginResult getWechatLoginInfo(String wxCode, int appType, String appId, String secret) {
+        String wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type={}";
+        wxLoginUrl = StrUtil.format(wxLoginUrl, appId, secret, wxCode, GRANT_TYPE);
         //拿到授权码 请求微信登录返回access_token
         String result = HttpUtil.get(wxLoginUrl);
         WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
-        log.error("授权码获取的登录结果:{}",loginResult);
+        log.error("授权码获取的登录结果:{}", loginResult);
         return loginResult;
     }
 

+ 1 - 0
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/dao/AdRecordMapper.java

@@ -35,6 +35,7 @@ public interface AdRecordMapper {
     /**
      * 查询激励视频记录
      */
+    List<YtDyzAdRecord> getByIosIdBeforeLogin(@Param("iosId") String iosId, @Param("limit") Integer limit);
     List<YtDyzAdRecord> getByIosIdBeforeLogin(@Param("iosId") String iosId);
 
     List<YtDyzAdRecord> getByUserByParam(AdRecordListParam param);

+ 3 - 2
yt-ios-lemon/lemon-ios-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -143,16 +143,17 @@
     </select>
     <select id="getByUserByParam" resultType="com.ytpm.app.model.YtDyzAdRecord">
         select
-        record_id, user_id,app_id, nick_name, placement_id, ad_source_id, revenue, network_form_id, network_name,
+        record_id, user_id,ios_id, app_id, nick_name, placement_id, ad_source_id, revenue, network_form_id, network_name,
         network_placement_id, finish_time, begin_time,result_json,ad_source_type,ad_source_index,ecpm,
         ifnull(#{loginStatus}, 2) as loginStatus
         <if test="loginStatus != null and loginStatus == 1">
             from yt_dyz_ad_record_visitor
+            where (user_id = #{userId} or ios_id = #{iosId})
         </if>
         <if test="loginStatus == null or loginStatus != 1">
             from yt_dyz_ad_record
+            where user_id = #{userId}
         </if>
-        where user_id = #{userId}
         <if test="adsourceType != null and adsourceType!=888">
             and ad_source_type = #{adsourceType}
         </if>

+ 2 - 8
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/config/interceptor/HttpInterceptor.java

@@ -1,5 +1,6 @@
 package com.ytpm.novel.config.interceptor;
 
+import com.ytpm.util.HttpClientUtil;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -22,19 +23,12 @@ public class HttpInterceptor implements HandlerInterceptor {
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
                              @NonNull Object obj) {
         // 获取客户端IP地址
-        String clientIp = getClientIp(request);
+        String clientIp = HttpClientUtil.getClientIp(request);
         String requestURI = request.getRequestURI();
         log.info("{}收到来自客户端[{}]的用户请求:{}", applicationNameZh, clientIp, requestURI);
         return true;
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
 
     /**
      * 请求处理之后调用;在视图渲染之前,controller处理之后。

+ 45 - 68
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/controller/WxController.java

@@ -1,16 +1,12 @@
 package com.ytpm.novel.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ytpm.app.enums.AppTypeEnums;
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtAppDefaultConfig;
-import com.ytpm.app.model.YtDyzPowerRecord;
-import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.model.YtNovelUser;
 import com.ytpm.app.param.AppConfigUpdateParam;
 import com.ytpm.app.param.WxLoginParam;
@@ -21,8 +17,11 @@ import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.StatusCode;
+import com.ytpm.handle.CommonException;
+import com.ytpm.handle.RiskException;
 import com.ytpm.novel.dao.AppUserMapper;
 import com.ytpm.novel.service.AppUserService;
+import com.ytpm.util.HttpClientUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -38,7 +37,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -72,49 +70,49 @@ public class WxController {
                 }
             }
         }
-        //根据应用获取配置调用微信接口登录
-        WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
-        if (Objects.isNull(defaultConfig)) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信登录失败,未找到相应配置!");
-        }
-        param.setAppId(defaultConfig.getPlatformAppId());
-        WxLoginResult loginResult = getWechatLoginInfo(param.getWxCode(), param.getAppType(), defaultConfig.getAppId(), defaultConfig.getSecret());
-        if (Objects.isNull(loginResult) || StrUtil.isBlank(loginResult.getOpenid())) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信登录失败,请刷新授权码!");
-        }
-        WxUserInfo wxUserInfo = getWechatUserInfo(loginResult.getAccess_token(), loginResult.getOpenid());
-        if (Objects.isNull(wxUserInfo)) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信用户登录失败");
-        }
-        param.setLoginIp(getClientIp(request));
-        YtNovelUser old = appUserService.crudForNewTrans(param, wxUserInfo, loginResult);
-        old.setLoginType(LoginType.WX);
-        //调用风控服务校验默认风控配置
-        old.setRiskCode("313");
-        Result<?> result = riskFeign.checkRisk(old);
-        if (result.getCode() != 200) {
-            return new Result<>(StatusCode.ACCESS_ERR, result.getMessage());
+        YtNovelUser novelUser;
+        try {
+            //根据应用获取配置调用微信接口登录
+            WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
+            if (Objects.isNull(defaultConfig)) {
+                throw new CommonException("微信登录失败,未找到相应配置!");
+            }
+            param.setAppId(defaultConfig.getPlatformAppId());
+            WxLoginResult loginResult = getWechatLoginInfo(param.getWxCode(), param.getAppType(),
+                    defaultConfig.getAppId(), defaultConfig.getSecret());
+            if (Objects.isNull(loginResult) || StrUtil.isBlank(loginResult.getOpenid())) {
+                throw new CommonException("微信登录失败,请刷新授权码!");
+            }
+            WxUserInfo wxUserInfo = getWechatUserInfo(loginResult.getAccess_token(), loginResult.getOpenid());
+            if (Objects.isNull(wxUserInfo)) {
+                throw new CommonException("微信用户登录失败");
+            }
+            param.setLoginIp(HttpClientUtil.getClientIp(request));
+            novelUser = appUserService.crudForNewTrans(param, wxUserInfo, loginResult);
+            novelUser.setLoginType(LoginType.WX);
+            //调用风控服务校验默认风控配置
+            novelUser.setRiskCode("313");
+            Result<?> result = riskFeign.checkRisk(novelUser);
+            if (result.getCode() != 200) {
+                throw new RiskException(result.getMessage());
+            }
+        } catch (RiskException | CommonException e) {
+            return new Result<>(StatusCode.ACCESS_ERR, e.getMessage());
         }
-        return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
+        return Result.resultOk(RepMessage.LOGIN_SUCCESS, novelUser);
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
 
     /**
      * 获取微信用户信息
      */
     private WxUserInfo getWechatUserInfo(String accessToken, String openid) {
         // 根据token和openid 获取用户信息
-        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN";
+        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token={}&openid={}&lang=zh_CN";
+        userInfoUrl = StrUtil.format(userInfoUrl, accessToken, openid);
         String curUser = HttpUtil.get(userInfoUrl);
         WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
-        log.info("[wx login]获取的用户信息:{}", wxUserInfo);
+        log.info("[wx Login]获取的用户信息:{}", wxUserInfo);
         return wxUserInfo;
     }
 
@@ -122,19 +120,12 @@ public class WxController {
      * 微信登录
      */
     private WxLoginResult getWechatLoginInfo(String wxCode, int appType, String appId, String secret) {
-
-        String wxLoginUrl;
-        if (AppTypeEnums.QNJZ.getCode() == appType) {
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
-                    + appId + "&secret=" + secret + "&code=" + wxCode + "&grant_type=" + GRANT_TYPE;
-        } else {
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId
-                    + "&secret=" + secret + "&code=" + wxCode + "&grant_type=" + GRANT_TYPE;
-        }
+        String wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type={}";
+        wxLoginUrl = StrUtil.format(wxLoginUrl, appId, secret, wxCode, GRANT_TYPE);
         //拿到授权码 请求微信登录返回access_token
         String result = HttpUtil.get(wxLoginUrl);
         WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
-        log.info("[wx login]授权码获取的登录结果:{}", loginResult);
+        log.info("[wx Login]授权码获取的登录结果:{}", loginResult);
         return loginResult;
     }
 
@@ -148,20 +139,6 @@ public class WxController {
         return Result.resultObjOk(config);
     }
 
-    @ApiOperation("体力增加")
-    @GetMapping("/addPower")
-    @Transactional(rollbackFor = Exception.class)
-    public Result<YtDyzUser> addPower(@RequestParam("userId") String userId) {
-        appUserMapper.addOnePower(userId);
-        YtDyzPowerRecord record = new YtDyzPowerRecord();
-        record.setUserId(userId);
-        record.setRecordId(IdUtil.fastSimpleUUID());
-        record.setAddTime(new Date());
-        record.setType(1);
-        record.setRemark("增加体力");
-        appUserMapper.addPowerRecord(record);
-        return Result.resultOk(RepMessage.ADD_SUCCESS);
-    }
 
     @ApiOperation("保存应用默认配置")
     @PostMapping("/saveAppConfig")
@@ -179,7 +156,7 @@ public class WxController {
 
     @ApiOperation("同步子应用默认配置")
     @PostMapping("/updateAppsConfig")
-    public void updateAppsConfig(@RequestBody AppConfigUpdateParam param){
+    public void updateAppsConfig(@RequestBody AppConfigUpdateParam param) {
         if (CollUtil.isNotEmpty(param.getApps()) && param.getDefaultConfig() != null) {
             String appIds = String.join(",", param.getApps());
             List<WxDefaultConfig> configs = appUserMapper.getConfigByIds(appIds);
@@ -187,22 +164,22 @@ public class WxController {
             for (WxDefaultConfig config : configs) {
                 YtAppDefaultConfig appConfig = new YtAppDefaultConfig();
                 BeanUtils.copyProperties(config, appConfig);
-                if(StrUtil.isNotEmpty(updateInfo.getTakuAppId())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuAppId())) {
                     appConfig.setTakuAppId(updateInfo.getTakuAppId());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuKey())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuKey())) {
                     appConfig.setTakuKey(updateInfo.getTakuKey());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuBannerPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuBannerPid())) {
                     appConfig.setTakuBannerPid(updateInfo.getTakuBannerPid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuNativePid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuNativePid())) {
                     appConfig.setTakuNativePid(updateInfo.getTakuNativePid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuRewardPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuRewardPid())) {
                     appConfig.setTakuRewardPid(updateInfo.getTakuRewardPid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuInterstitialPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuInterstitialPid())) {
                     appConfig.setTakuInterstitialPid(updateInfo.getTakuInterstitialPid());
                 }
                 appUserMapper.updateAppConfig(appConfig);

+ 3 - 4
yt-novel/yt-novel-service/src/main/java/com/ytpm/novel/service/impl/AdServiceImpl.java

@@ -41,7 +41,6 @@ import com.ytpm.novel.service.AppUserService;
 import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Service;
@@ -65,15 +64,15 @@ import java.util.stream.Collectors;
 @RefreshScope
 public class AdServiceImpl implements AdService {
 
-    @Autowired
+    @Resource
     private AdRecordMapper adRecordMapper;
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
     @Resource
     private AppUserService appUserService;
     @Resource
     private NovelAdRecordMapper novelAdRecordMapper;
-    @Autowired
+    @Resource
     private RiskFeign riskFeign;
 
     @Value(" ${risk.config.banned.tips:}")

+ 2 - 8
yt-question/yt-question-service/src/main/java/com/ytpm/question/config/interceptor/HttpInterceptor.java

@@ -1,5 +1,6 @@
 package com.ytpm.question.config.interceptor;
 
+import com.ytpm.util.HttpClientUtil;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -22,19 +23,12 @@ public class HttpInterceptor implements HandlerInterceptor {
     public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
                              @NonNull Object obj) {
         // 获取客户端IP地址
-        String clientIp = getClientIp(request);
+        String clientIp = HttpClientUtil.getClientIp(request);
         String requestURI = request.getRequestURI();
         log.info("{}收到来自客户端[{}]的用户请求:{}", applicationNameZh, clientIp, requestURI);
         return true;
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
 
     /**
      * 请求处理之后调用;在视图渲染之前,controller处理之后。

+ 46 - 59
yt-question/yt-question-service/src/main/java/com/ytpm/question/controller/WxController.java

@@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.ytpm.app.enums.AppTypeEnums;
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtAppDefaultConfig;
 import com.ytpm.app.model.YtDyzUser;
@@ -18,8 +17,11 @@ import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.StatusCode;
+import com.ytpm.handle.CommonException;
+import com.ytpm.handle.RiskException;
 import com.ytpm.question.dao.AppUserMapper;
 import com.ytpm.question.service.AppUserService;
+import com.ytpm.util.HttpClientUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -35,7 +37,6 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -69,46 +70,46 @@ public class WxController {
                 }
             }
         }
-        //根据应用获取配置调用微信接口登录
-        WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
-        if (Objects.isNull(defaultConfig)) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信登录失败,未找到相应配置!");
-        }
-        param.setAppId(defaultConfig.getPlatformAppId());
-        WxLoginResult loginResult = getWechatLoginInfo(param.getWxCode(), param.getAppType(), defaultConfig.getAppId(), defaultConfig.getSecret());
-        if (Objects.isNull(loginResult) || StrUtil.isBlank(loginResult.getOpenid())) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信登录失败,请刷新授权码!");
-        }
-        WxUserInfo wxUserInfo = getWechatUserInfo(loginResult.getAccess_token(), loginResult.getOpenid());
-        if (Objects.isNull(wxUserInfo)) {
-            return new Result<>(StatusCode.ACCESS_ERR, "微信用户登录失败");
-        }
-        param.setLoginIp(getClientIp(request));
-        YtDyzUser old = appUserService.crudForNewTrans(param, wxUserInfo, loginResult);
-        old.setLoginType(LoginType.WX);
-        //调用风控服务校验默认风控配置
-        old.setRiskCode("313");
-        Result<?> result = riskFeign.checkRisk(old);
-        if (result.getCode() != 200) {
-            return new Result<>(StatusCode.ACCESS_ERR, result.getMessage());
+        YtDyzUser dyzUser;
+        try {
+            //根据应用获取配置调用微信接口登录
+            WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
+            if (Objects.isNull(defaultConfig)) {
+                throw new CommonException("微信登录失败,未找到相应配置!");
+            }
+            param.setAppId(defaultConfig.getPlatformAppId());
+            WxLoginResult loginResult = getWechatLoginInfo(param.getWxCode(), param.getAppType(),
+                    defaultConfig.getAppId(), defaultConfig.getSecret());
+            if (Objects.isNull(loginResult) || StrUtil.isBlank(loginResult.getOpenid())) {
+                throw new CommonException("微信登录失败,请刷新授权码!");
+            }
+            WxUserInfo wxUserInfo = getWechatUserInfo(loginResult.getAccess_token(), loginResult.getOpenid());
+            if (Objects.isNull(wxUserInfo)) {
+                throw new CommonException("微信用户登录失败");
+            }
+            param.setLoginIp(HttpClientUtil.getClientIp(request));
+            dyzUser = appUserService.crudForNewTrans(param, wxUserInfo, loginResult);
+            dyzUser.setLoginType(LoginType.WX);
+            //调用风控服务校验默认风控配置
+            dyzUser.setRiskCode("313");
+            Result<?> result = riskFeign.checkRisk(dyzUser);
+            if (result.getCode() != 200) {
+                throw new RiskException(result.getMessage());
+            }
+        } catch (RiskException | CommonException e) {
+            return new Result<>(StatusCode.ACCESS_ERR, e.getMessage());
         }
-        return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
+        return Result.resultOk(RepMessage.LOGIN_SUCCESS, dyzUser);
     }
 
-    private String getClientIp(HttpServletRequest request) {
-        String xfHeader = request.getHeader("X-Forwarded-For");
-        if (xfHeader == null) {
-            return request.getRemoteAddr();
-        }
-        return xfHeader.split(",")[0]; // 可能会有多个IP,这里取第一个逗号前的IP
-    }
 
     /**
      * 获取微信用户信息
      */
     private WxUserInfo getWechatUserInfo(String accessToken, String openid) {
         // 根据token和openid 获取用户信息
-        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openid + "&lang=zh_CN";
+        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token={}&openid={}&lang=zh_CN";
+        userInfoUrl = StrUtil.format(userInfoUrl, accessToken, openid);
         String curUser = HttpUtil.get(userInfoUrl);
         WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
         log.info("[wx Login]获取的用户信息:{}", wxUserInfo);
@@ -119,15 +120,8 @@ public class WxController {
      * 微信登录
      */
     private WxLoginResult getWechatLoginInfo(String wxCode, int appType, String appId, String secret) {
-
-        String wxLoginUrl;
-        if (AppTypeEnums.QNJZ.getCode() == appType) {
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
-                    + appId + "&secret=" + secret + "&code=" + wxCode + "&grant_type=" + GRANT_TYPE;
-        } else {
-            wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId
-                    + "&secret=" + secret + "&code=" + wxCode + "&grant_type=" + GRANT_TYPE;
-        }
+        String wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={}&secret={}&code={}&grant_type={}";
+        wxLoginUrl = StrUtil.format(wxLoginUrl, appId, secret, wxCode, GRANT_TYPE);
         //拿到授权码 请求微信登录返回access_token
         String result = HttpUtil.get(wxLoginUrl);
         WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
@@ -145,20 +139,13 @@ public class WxController {
         return Result.resultObjOk(config);
     }
 
+    @Deprecated
     @ApiOperation("体力增加")
     @GetMapping("/addPower")
     @Transactional(rollbackFor = Exception.class)
-    @Deprecated
     public Result<YtDyzUser> addPower(@RequestParam("userId") String userId) {
-//        appUserMapper.addOnePower(userId);
-//        YtDyzPowerRecord record = new YtDyzPowerRecord();
-//        record.setUserId(userId);
-//        record.setRecordId(IdUtil.fastSimpleUUID());
-//        record.setAddTime(new Date());
-//        record.setType(1);
-//        record.setRemark("增加体力");
-//        appUserMapper.addPowerRecord(record);
-        return Result.resultOk(RepMessage.ADD_SUCCESS);
+        YtDyzUser user = appUserMapper.selectPrimaryKey(userId);
+        return Result.resultOk(RepMessage.ADD_SUCCESS, user);
     }
 
     @ApiOperation("保存应用默认配置")
@@ -177,7 +164,7 @@ public class WxController {
 
     @ApiOperation("同步子应用默认配置")
     @PostMapping("/updateAppsConfig")
-    public void updateAppsConfig(@RequestBody AppConfigUpdateParam param){
+    public void updateAppsConfig(@RequestBody AppConfigUpdateParam param) {
         if (CollUtil.isNotEmpty(param.getApps()) && param.getDefaultConfig() != null) {
             String appIds = String.join(",", param.getApps());
             List<WxDefaultConfig> configs = appUserMapper.getConfigByIds(appIds);
@@ -185,22 +172,22 @@ public class WxController {
             for (WxDefaultConfig config : configs) {
                 YtAppDefaultConfig appConfig = new YtAppDefaultConfig();
                 BeanUtils.copyProperties(config, appConfig);
-                if(StrUtil.isNotEmpty(updateInfo.getTakuAppId())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuAppId())) {
                     appConfig.setTakuAppId(updateInfo.getTakuAppId());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuKey())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuKey())) {
                     appConfig.setTakuKey(updateInfo.getTakuKey());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuBannerPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuBannerPid())) {
                     appConfig.setTakuBannerPid(updateInfo.getTakuBannerPid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuNativePid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuNativePid())) {
                     appConfig.setTakuNativePid(updateInfo.getTakuNativePid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuRewardPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuRewardPid())) {
                     appConfig.setTakuRewardPid(updateInfo.getTakuRewardPid());
                 }
-                if(StrUtil.isNotEmpty(updateInfo.getTakuInterstitialPid())) {
+                if (StrUtil.isNotEmpty(updateInfo.getTakuInterstitialPid())) {
                     appConfig.setTakuInterstitialPid(updateInfo.getTakuInterstitialPid());
                 }
                 appUserMapper.updateAppConfig(appConfig);