Просмотр исходного кода

doc:ios服务端新增离线上报接口

hidewnd 2 месяцев назад
Родитель
Сommit
f0ed4d02e8

+ 9 - 0
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/controller/AdController.java

@@ -2,6 +2,7 @@ package com.ytpm.lemonios.controller;
 
 import com.ytpm.agent.view.AgentAdGroupStaticsVO;
 import com.ytpm.agent.view.AgentTopCountView;
+import com.ytpm.app.param.DyzAdRecordDelayParam;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.general.Result;
 import com.ytpm.lemonios.service.AdService;
@@ -42,6 +43,14 @@ public class AdController {
         return adService.saveRecord(param);
     }
 
+    /**
+     * 保存广告记录
+     */
+    @ApiOperation("延迟保存广告记录")
+    @PostMapping("/saveRecord/delay")
+    public Result<String> delaySaveRecord(@RequestBody DyzAdRecordDelayParam param) {
+        return adService.delaySaveRecord(param);
+    }
     /**
      * 根据应用ID查询广告数
      */

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

@@ -81,4 +81,7 @@ public interface AdRecordMapper {
      */
     List<YtDyzAdRecord> selectRecordByIds(@Param("loginStatus") Integer loginStatus, @Param("ids") List<String> adRecordIds);
 
+    void batchAddVisitor(@Param("adRecords") List<YtDyzAdRecord> saveList);
+
+    void batchAdd(@Param("adRecords") List<YtDyzAdRecord> saveList);
 }

+ 3 - 0
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/service/AdService.java

@@ -3,6 +3,7 @@ package com.ytpm.lemonios.service;
 import com.ytpm.agent.view.AgentAdGroupStaticsVO;
 import com.ytpm.agent.view.AgentTopCountView;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.param.DyzAdRecordDelayParam;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.general.Result;
 import com.ytpm.middle.view.DashboardRankingListVO;
@@ -51,4 +52,6 @@ public interface AdService {
      * 查询代理商首页广告数据统计
      */
     List<AgentAdGroupStaticsVO> getAgentProfit(String appIds);
+
+    Result<String> delaySaveRecord(DyzAdRecordDelayParam param);
 }

+ 45 - 0
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/service/impl/AdServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ytpm.lemonios.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
@@ -14,6 +15,7 @@ import com.ytpm.agent.view.AgentAdGroupStaticsVO;
 import com.ytpm.agent.view.AgentTopCountView;
 import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.param.DyzAdRecordDelayParam;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.RepMessage;
@@ -369,4 +371,47 @@ public class AdServiceImpl implements AdService {
         return vos;
     }
 
+    @Override
+    public Result<String> delaySaveRecord(DyzAdRecordDelayParam param) {
+        YtDyzUser user = appUserMapper.selectPrimaryKey(param.getUserId());
+        if (Objects.isNull(user)) {
+            return Result.resultOk(RepMessage.SAVE_SUCCESS);
+        }
+        if (!UserStatusEnum.NORMAL.getCode().equals(user.getUserStatus())) {
+            return new Result<>(StatusCode.ACCESS_ERR, getTipsMsg());
+        }
+        log.info("[delaySaveRecord] userId:{}", param.getUserId());
+        if (CollectionUtil.isNotEmpty(param.getAdRecords())) {
+            YtDyzAdRecord insertEntity;
+            List<YtDyzAdRecord> saveList = new ArrayList<>();
+            BigDecimal totalRevenue = BigDecimal.ZERO;
+            int count = 0;
+            for (DyzAdRecordParam adParam : param.getAdRecords()) {
+                handleParam(adParam);
+                insertEntity = new YtDyzAdRecord();
+                BeanUtils.copyProperties(adParam, insertEntity);
+                insertEntity.setRecordId(IdUtil.fastSimpleUUID());
+                insertEntity.setUserId(user.getUserId());
+                insertEntity.setNetworkName(AdPlatformTypeEnum.getDesc(Integer.parseInt(adParam.getNetworkFormId())));
+                saveList.add(insertEntity);
+                if (param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())) {
+                    continue;
+                }
+                if (insertEntity.getRevenue() != null) {
+                    totalRevenue = totalRevenue.add(insertEntity.getRevenue());
+                    count++;
+                }
+            }
+            if (CollUtil.isNotEmpty(saveList)) {
+                if (param.getLoginStatus() != null && AdRecordEnum.LOGIN_BEFORE.getCode().equals(param.getLoginStatus())) {
+                    adRecordMapper.batchAddVisitor(saveList);
+                } else {
+                    adRecordMapper.batchAdd(saveList);
+                }
+            }
+            appUserMapper.updateTotal(user.getUserId(), count, totalRevenue);
+        }
+        return Result.resultOk(RepMessage.SAVE_SUCCESS);
+    }
+
 }

+ 90 - 0
yt-ios-lemon/lemon-ios-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -86,6 +86,96 @@
                 #{appId}
             )
     </insert>
+    <insert id="batchAddVisitor">
+        insert into yt_dyz_ad_record_visitor
+        (
+            record_id,
+            user_id,
+            nick_name,
+            ios_id,
+            placement_id,
+            ad_source_id,
+            revenue,
+            network_form_id,
+            network_name,
+            network_placement_id,
+            begin_time,
+            finish_time,
+            result_json,
+            ad_source_index,
+            ad_source_type,
+            ecpm,
+            app_id
+        )
+        values
+        <foreach collection="adRecords" item="item" separator=",">
+            (
+            #{recordId},
+            #{userId},
+            #{nickName},
+            #{iosId},
+            #{placementId},
+            #{adSourceId},
+            #{revenue},
+            #{networkFormId},
+            #{networkName},
+            #{networkPlacementId},
+            ifnull(#{beginTime}, now()),
+            ifnull(#{finishTime}, now()),
+            #{resultJson},
+            #{adSourceIndex},
+            #{adSourceType},
+            #{ecpm},
+            #{appId}
+            )
+        </foreach>
+
+    </insert>
+    <insert id="batchAdd">
+        insert into yt_dyz_ad_record
+        (
+            record_id,
+            user_id,
+            ios_id,
+            nick_name,
+            placement_id,
+            ad_source_id,
+            revenue,
+            network_form_id,
+            network_name,
+            network_placement_id,
+            begin_time,
+            finish_time,
+            result_json,
+            ad_source_index,
+            ad_source_type,
+            ecpm,
+            app_id
+        )
+        values
+        <foreach collection="adRecords" item="item" separator=",">
+            (
+            #{recordId},
+            #{userId},
+            #{iosId},
+            #{nickName},
+            #{placementId},
+            #{adSourceId},
+            #{revenue},
+            #{networkFormId},
+            #{networkName},
+            #{networkPlacementId},
+            ifnull(#{beginTime}, now()),
+            ifnull(#{finishTime}, now()),
+            #{resultJson},
+            #{adSourceIndex},
+            #{adSourceType},
+            #{ecpm},
+            #{appId}
+            )
+        </foreach>
+
+    </insert>
     <update id="updateOneVisitor" parameterType="com.ytpm.app.model.YtDyzAdRecord">
         update yt_dyz_ad_record_visitor
         <set>