소스 검색

lime修改同步adage

hidewnd 1 개월 전
부모
커밋
7138c323d7

+ 9 - 0
yt-adage/adage-feign/src/main/java/com/ytpm/adage/feign/AdageFeign.java

@@ -1,5 +1,6 @@
 package com.ytpm.adage.feign;
 
+import com.ytpm.agent.param.AdRecordListParam;
 import com.ytpm.agent.param.AuditCheckParam;
 import com.ytpm.agent.view.AgentAdGroupStaticsVO;
 import com.ytpm.agent.view.AgentTopCountView;
@@ -52,6 +53,14 @@ public interface AdageFeign {
     @GetMapping("/user/adRecords")
     ResultTable<YtDyzAdRecord> adRecords(@RequestParam(name = "userId",required = true) String userId, @RequestParam(name = "adsourceType",required = false)Integer adsourceType);
 
+    @PostMapping("/user/adRecords/page")
+    ResultTable<YtDyzAdRecord> adRecordsPage(@RequestBody AdRecordListParam param);
+
+    @GetMapping("/user/adRecords/count/month")
+    Result<Integer> queryRecordMonthCount(@RequestParam(name = "userId") String userId,
+                                          @RequestParam(name = "adSourceType", required = false) Integer adSourceType,
+                                          @RequestParam(name = "startTime", required = false) String startTime);
+
     @PostMapping("/user/queryUserByTime")
     List<YtDyzUser> queryUserByTime(@RequestBody AppUserQueryParam appUserQueryParam);
 

+ 32 - 5
yt-adage/adage-service/src/main/java/com/ytpm/adage/controller/UserController.java

@@ -7,6 +7,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.ytpm.advertise.enums.AdSourceTypeEnum;
 import com.ytpm.agent.enums.UserStatusEnum;
+import com.ytpm.agent.param.AdRecordListParam;
 import com.ytpm.agent.param.AuditCheckParam;
 import com.ytpm.agent.param.AuditUserParam;
 import com.ytpm.agent.view.AgentAuditCheckVO;
@@ -47,6 +48,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -192,12 +194,37 @@ public class UserController {
      */
     @GetMapping("/adRecords")
     public ResultTable<YtDyzAdRecord> adRecords(@RequestParam(name = "userId",required = true) String userId,@RequestParam(name = "adsourceType",required = false)Integer adsourceType) {
-        List<YtDyzAdRecord> result = new ArrayList<>();
-        List<YtDyzAdRecord> adrecords = adRecordMapper.getByUserId(userId, adsourceType);
-        if(CollUtil.isNotEmpty(adrecords)){
-            result.addAll(adrecords);
+        return ResultTable.resultTableOk(new PageInfo<YtDyzAdRecord>(adRecordMapper.getByUserId(userId, adsourceType)));
+    }
+
+    @PostMapping("/adRecords/page")
+    public ResultTable<YtDyzAdRecord> adRecordsPage(@RequestBody AdRecordListParam param) {
+        PageHelper.startPage(param.getPage(), param.getLimit());
+        List<YtDyzAdRecord> adrecords = adRecordMapper.getByUserByParam(param);
+        return ResultTable.resultTableOk(new PageInfo<>(adrecords));
+    }
+
+    /**
+     * 查询广告记录统计数
+     */
+    @GetMapping("/adRecords/count/month")
+    public Result<Integer> queryRecordMonthCount(@RequestParam(name = "userId") String userId,
+                                                 @RequestParam(name = "adSourceType", required = false) Integer adSourceType,
+                                                 @RequestParam(name = "startTime", required = false) String startTime) {
+        Date time;
+        // 统计起始时间为空,则默认查询当月信息
+        if (StrUtil.isEmpty(startTime)) {
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(new Date());
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
+            calendar.set(Calendar.HOUR_OF_DAY, 0);
+            calendar.set(Calendar.MINUTE, 0);
+            calendar.set(Calendar.SECOND, 0);
+            time = calendar.getTime();
+        } else {
+            time = DateUtil.parse(startTime, "yyyy-MM-dd HH:mm:ss");
         }
-        return ResultTable.resultTableOk(new PageInfo<YtDyzAdRecord>(result));
+        return Result.resultObjOk(adRecordMapper.getRecordMonthCount(userId, adSourceType, time));
     }
 
     @PostMapping("/queryUserByTime")

+ 87 - 16
yt-adage/adage-service/src/main/java/com/ytpm/adage/controller/WxController.java

@@ -2,16 +2,24 @@ package com.ytpm.adage.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.ytpm.adage.dao.AppUserMapper;
+import com.ytpm.adage.service.AppUserService;
+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.param.WxLoginParam;
 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.handle.LoginServiceFactory;
+import com.ytpm.general.StatusCode;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -36,24 +44,89 @@ import java.util.Objects;
 @RestController
 @RequestMapping("/wx")
 public class WxController {
-
+    private final static String GRANT_TYPE = "authorization_code";
     @Autowired
     private AppUserMapper appUserMapper;
     @Autowired
-    private LoginServiceFactory loginServiceFactory;
+    private RiskFeign riskFeign;
+    @Autowired
+    private AppUserService appUserService;
 
     @PostMapping("/login")
     @ApiOperation("微信登录")
     @Transactional
     public Result<YtDyzUser> wxLogin(@RequestBody WxLoginParam param, HttpServletRequest request) {
-        return loginServiceFactory.login(LoginType.WX, param, request);
+        //根据应用获取配置调用微信接口登录
+        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());
+        }
+        return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
+    }
+
+    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 curUser = HttpUtil.get(userInfoUrl);
+        WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
+        log.error("获取的用户信息:{}",wxUserInfo);
+        return wxUserInfo;
+    }
+
+    /**
+     * 微信登录
+     */
+    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;
+        }
+        //拿到授权码 请求微信登录返回access_token
+        String result = HttpUtil.get(wxLoginUrl);
+        WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
+        log.error("授权码获取的登录结果:{}",loginResult);
+        return loginResult;
     }
 
     @ApiOperation("获取微信默认配置项")
     @GetMapping("/defaultConfig")
-    public Result<WxDefaultConfig> getWxDefaultConfig(@RequestParam("appType") Integer appType) {
+    public Result<WxDefaultConfig> getWxDefaultConfig(int appType) {
         WxDefaultConfig config = appUserMapper.getDefaultConfig(appType);
-        if (Objects.isNull(config)) {
+        if(Objects.isNull(config)){
             return Result.resultErr("应用类型有误!");
         }
         return Result.resultObjOk(config);
@@ -62,7 +135,7 @@ public class WxController {
     @ApiOperation("体力增加")
     @GetMapping("/addPower")
     @Transactional(rollbackFor = Exception.class)
-    public Result<YtDyzUser> addPower(@RequestParam("userId") String userId) {
+    public Result<YtDyzUser> addPower(@RequestParam("userId")String userId) {
         appUserMapper.addOnePower(userId);
         YtDyzPowerRecord record = new YtDyzPowerRecord();
         record.setUserId(userId);
@@ -76,35 +149,33 @@ public class WxController {
 
     @ApiOperation("保存应用默认配置")
     @PostMapping("/saveAppConfig")
-    public Result<String> saveAppConfig(@RequestBody YtAppDefaultConfig defaultConfig) {
+    public Result<String> saveAppConfig(@RequestBody YtAppDefaultConfig defaultConfig){
         appUserMapper.saveAppConfig(defaultConfig);
         return Result.resultOk(RepMessage.SAVE_SUCCESS);
     }
 
     @ApiOperation("修改应用默认配置")
     @PostMapping("/updateAppConfig")
-    public Result<String> updateAppConfig(@RequestBody YtAppDefaultConfig defaultConfig) {
+    public Result<String> updateAppConfig(@RequestBody YtAppDefaultConfig defaultConfig){
         appUserMapper.updateAppConfig(defaultConfig);
         return Result.resultOk(RepMessage.SAVE_SUCCESS);
     }
 
     @ApiOperation("根据APP_ID获取配置")
     @GetMapping("/getConfigs")
-    public List<WxDefaultConfig> getConfigs(@RequestParam(name = "appIds") String appIds) {
+    public List<WxDefaultConfig> getConfigs(@RequestParam(name = "appIds")String appIds){
         List<WxDefaultConfig> configs = new ArrayList<>();
         List<WxDefaultConfig> dyzConfigs = appUserMapper.getConfigByIds(appIds);
-        if (CollUtil.isNotEmpty(dyzConfigs)) {
-            configs.addAll(dyzConfigs);
-        }
+        if(CollUtil.isNotEmpty(dyzConfigs)){configs.addAll(dyzConfigs);}
         return configs;
     }
 
     @ApiOperation("删除默认配置")
     @GetMapping("/delDefaultConfig")
-    public void delDefaultConfig(@RequestParam(name = "appId") String appId) {
+    public void delDefaultConfig(@RequestParam(name = "appId")String appId){
         List<WxDefaultConfig> dyzConfig = appUserMapper.getConfigByIds(appId);
-        if (CollUtil.isNotEmpty(dyzConfig)) {
+        if(CollUtil.isNotEmpty(dyzConfig)){
             appUserMapper.delByAppId(appId);
         }
     }
-}
+}

+ 12 - 1
yt-adage/adage-service/src/main/java/com/ytpm/adage/dao/AdRecordMapper.java

@@ -1,5 +1,6 @@
 package com.ytpm.adage.dao;
 
+import com.ytpm.agent.param.AdRecordListParam;
 import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.middle.view.AppRevenueHourVO;
@@ -7,6 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Mapper
@@ -26,6 +28,15 @@ public interface AdRecordMapper {
      */
     List<YtDyzAdRecord> getByUserId(@Param("userId") String userId, @Param("adsourceType") Integer adsourceType);
 
+    List<YtDyzAdRecord> getByUserByParam(AdRecordListParam param);
+
+    /**
+     * 查询用户广告记录统计数
+     */
+    Integer getRecordMonthCount(@Param("userId") String userId,
+                                @Param("adSourceType") Integer adSourceType,
+                                @Param("startTime") Date startTime);
+
     /**
      * 查询激励视频记录
      */
@@ -55,4 +66,4 @@ public interface AdRecordMapper {
      * 查询指定广告记录
      */
     List<YtDyzAdRecord> selectRecordByIds(@Param("loginStatus") Integer loginStatus, @Param("ids") List<String> adRecordIds);
-}
+}

+ 4 - 1
yt-adage/adage-service/src/main/java/com/ytpm/adage/dao/AppUserMapper.java

@@ -208,4 +208,7 @@ public interface AppUserMapper {
     YtDyzUser getByDeviceAndDitch(@Param("deviceId") String deviceId,@Param("ditchId")Long ditchId);
 
     String getPlatformByDeviceId(@Param("deviceId")String deviceId);
-}
+
+    void updateTotal(@Param("userId") String userId, @Param("videoCount") int videoCount, @Param("revenue") BigDecimal revenue);
+
+}

+ 11 - 8
yt-adage/adage-service/src/main/java/com/ytpm/adage/service/impl/AdServiceImpl.java

@@ -252,11 +252,12 @@ public class AdServiceImpl implements AdService {
         cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),actualMaximum,23,59,59);
         String lastDay = sdf.format(cal.getTime());
         List<YtDyzAdRecord> dyzMonthRecords = adRecordMapper.getTodayRecord(appIds,firstDay,lastDay);
+
         if(CollUtil.isNotEmpty(dyzMonthRecords)){monthRecords.addAll(dyzMonthRecords);}
         records = monthRecords.stream().filter(
                 s->DateUtil.isSameDay(DateUtil.parse(s.getFinishTime()),new Date())).collect(Collectors.toList());
 
-        cal = Calendar.getInstance(); // 获取当前日期时间
+        cal = Calendar.getInstance();
         cal.add(Calendar.DATE, -1); // 昨天的日期时间
         Date yest = cal.getTime();
         yestRecords = monthRecords.stream().filter(
@@ -304,12 +305,15 @@ public class AdServiceImpl implements AdService {
      * 保存记录
      *  始终创建新的事务以保障子方法的独立事务
      */
-//    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
     @Override
+//    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
     public String saveRecordAndChangeUser(DyzAdRecordParam param, YtDyzUser user) {
         //增加广告记录
         YtDyzAdRecord adRecord = new YtDyzAdRecord();
-        if(Objects.isNull(param.getBeginTime())){
+        if(Objects.isNull(param.getBeginTime()) || "null".equals(param.getBeginTime())){
+            if ("null".equals(param.getBeginTime())) {
+                log.warn("param beginTime is null !");
+            }
             param.setBeginTime(param.getFinishTime());
         }
         BeanUtils.copyProperties(param, adRecord);
@@ -328,11 +332,10 @@ public class AdServiceImpl implements AdService {
         }
         if (updateUserTotal) {
             //修改用户信息, 广告次数+1  总收益 + revenue
-            YtDyzUser dyzUser = new YtDyzUser();
-            dyzUser.setUserId(user.getUserId());
-            dyzUser.setTotalVideo(Objects.isNull(user.getTotalVideo()) ? 1 : (user.getTotalVideo() + 1));
-            dyzUser.setTotalIncome(user.getTotalIncome().add(param.getRevenue()));
-            appUserMapper.updateUser(dyzUser);
+            if (param.getRevenue() == null) {
+                param.setRevenue(BigDecimal.ZERO);
+            }
+            appUserMapper.updateTotal(user.getUserId(), 1, param.getRevenue());
         }
         return adRecord.getRecordId();
     }

+ 36 - 0
yt-adage/adage-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -109,6 +109,14 @@
         <foreach collection="userIds.split(',')" open="(" close=")" separator="," item="item">
             #{item}
         </foreach>
+        union
+        select
+        record_id, user_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
+        from yt_dyz_ad_record_visitor
+        where ad_source_type != 1 and user_id in
+        <foreach collection="userIds.split(',')" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
         order by finish_time
     </select>
     <select id="getHourRevenue" resultType="com.ytpm.middle.view.AppRevenueHourVO">
@@ -191,4 +199,32 @@
         </if>
         where record_id in <foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach>
     </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,
+        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
+        </if>
+        <if test="loginStatus == null or loginStatus != 1">
+            from yt_dyz_ad_record
+        </if>
+        where user_id = #{userId}
+        <if test="adsourceType != null and adsourceType!=888">
+            and ad_source_type = #{adsourceType}
+        </if>
+        order by finish_time desc
+    </select>
+    <select id="getRecordMonthCount" resultType="java.lang.Integer">
+        SELECT count(record_id) as counts
+        FROM yt_dyz_ad_record
+        where user_id= #{userId} and revenue > 0
+        <if test="adSourceType != null and adSourceType!=888">
+            and ad_source_type = #{adSourceType}
+        </if>
+        <if test="startTime != null">
+            and finish_time > #{startTime}
+        </if>
+    </select>
 </mapper>

+ 6 - 0
yt-adage/adage-service/src/main/resources/mapper/AppUserMapper.xml

@@ -782,4 +782,10 @@
             #{item}
         </foreach>
     </update>
+    <update id="updateTotal">
+        UPDATE yt_dyz_user
+        SET total_video = COALESCE(total_video, 0) + #{videoCount},
+            total_income = COALESCE(total_income, 0) + #{revenue}
+        WHERE user_id = #{userId}
+    </update>
 </mapper>