瀏覽代碼

素材池功能2.0

zhaoxian 4 年之前
父節點
當前提交
205cd3af4e

+ 91 - 43
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/controller/KuaishouVideoDirectionalPackageController.java

@@ -1,43 +1,47 @@
 package cn.com.ctop.kuaishou.modules.ai.controller;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import cn.com.ctop.common.module.service.IUserAllocationService;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.QueryGenerator;
 import cn.com.ctop.kuaishou.modules.ai.entity.KuaishouVideoDirectionalPackage;
 import cn.com.ctop.kuaishou.modules.ai.service.IKuaishouVideoDirectionalPackageService;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import org.jeecg.common.api.vo.Result;
-import cn.com.ctop.common.module.utils.QueryGenerator;
-import org.jeecg.common.util.oConvertUtils;
-
-import java.util.Date;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
-
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.oConvertUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
-
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
-import com.alibaba.fastjson.JSON;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 素材绑定的定向包模板
@@ -49,7 +53,7 @@ import io.swagger.annotations.ApiOperation;
 @Slf4j
 @Api(tags = "素材绑定的定向包模板")
 @RestController
-@RequestMapping("/kuais/kuaishouVideoDirectionalPackage")
+@RequestMapping("/kuaishouVideoDirectionalPackage")
 public class KuaishouVideoDirectionalPackageController {
     @Autowired
     private IKuaishouVideoDirectionalPackageService kuaishouVideoDirectionalPackageService;
@@ -78,27 +82,45 @@ public class KuaishouVideoDirectionalPackageController {
         result.setResult(pageList);
         return result;
     }
-	/**
-	 * 创建定向包
-	 *
-	 * @param
-	 * @return
-	 */
-	@PostMapping(value = "/createDirectionalPackage")
-	public Result<Object> createDirectionalPackage(@RequestBody JSONObject requestJson) {
-		Result<JSONObject> result = new Result<>();
-		try {
-			Long accountId = requestJson.getLong("projectId");
-			if (Check.isNull(accountId)) {
-				return Result.error("请选择账户id");
-			}
-//			return kuaishouVideoDirectionalPackageService.saveOrUpdate(null);
-		} catch (Exception e) {
-			log.error("创建定向包失败", e);
-			return Result.error("创建失败" + e.getMessage());
-		}
-		return null;
-	}
+
+    /**
+     * 创建定向包
+     *
+     * @param
+     * @return
+     */
+    @PostMapping(value = "/saveOrUpdate")
+    public Result<Object> saveOrUpdate(@RequestBody JSONObject requestJson) {
+        Result<JSONObject> result = new Result<>();
+        try {
+            String videoGetId = requestJson.getString("videoGetId");
+            if (Check.isNull(videoGetId)) {
+                return Result.error("请选择素材");
+            }
+            KuaishouVideoDirectionalPackage directionalPackage = JSONObject.toJavaObject(requestJson, KuaishouVideoDirectionalPackage.class);
+            if (!Check.isNull(requestJson.getJSONArray("keyword"))) {
+                directionalPackage.setKeyword(JSONObject.toJSONString(requestJson.getJSONArray("keyword")));
+            }
+            kuaishouVideoDirectionalPackageService.saveOrUpdate(directionalPackage);
+            String id = "";
+            if (!Check.isNull(directionalPackage.getId())) {
+                id = directionalPackage.getId();
+            } else {
+                QueryWrapper<KuaishouVideoDirectionalPackage> queryWrapper = new QueryWrapper<>();
+                queryWrapper.eq("video_get_id", videoGetId);
+                queryWrapper.eq("signature", directionalPackage.getSignature());
+                KuaishouVideoDirectionalPackage one = kuaishouVideoDirectionalPackageService.getOne(queryWrapper);
+                if(!Check.isNull(one)){
+                    id = one.getId();
+                }
+            }
+            return Result.ok(id);
+        } catch (Exception e) {
+            log.error("创建定向包失败", e);
+            return Result.error("创建失败" + e.getMessage());
+        }
+    }
+
     /**
      * 编辑
      *
@@ -180,6 +202,32 @@ public class KuaishouVideoDirectionalPackageController {
     }
 
     /**
+     * 查询素材定向
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping(value = "/queryDirctional")
+    public Result<Object> queryDirctional(String id) {
+        if (Check.isNull(id)) {
+            return Result.error("缺失参数");
+        }
+        Result<KuaishouVideoDirectionalPackage> result = new Result<>();
+        QueryWrapper<KuaishouVideoDirectionalPackage> advertiserQueryWrapper = new QueryWrapper<>();
+        advertiserQueryWrapper.eq("video_get_id", id);
+        KuaishouVideoDirectionalPackage kuaishouVideoDirectionalPackage = kuaishouVideoDirectionalPackageService.getOne(advertiserQueryWrapper);
+        if (kuaishouVideoDirectionalPackage == null) {
+            return Result.ok("该素材未配置定向");
+        } else {
+            JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(kuaishouVideoDirectionalPackage)).toJavaObject(JSONObject.class);
+            if (!Check.isNull(data.getString("keyword"))) {
+                data.put("keyword", data.getJSONArray("keyword"));
+            }
+            return Result.ok(data);
+        }
+    }
+
+    /**
      * 导出excel
      *
      * @param request

+ 4 - 8
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/entity/KuaishouVideoDirectionalPackage.java

@@ -31,15 +31,11 @@ public class KuaishouVideoDirectionalPackage {
     /**
      * 账户ID
      */
-    @Excel(name = "账户ID", width = 15)
-    @ApiModelProperty(value = "账户ID")
+    @Excel(name = "素材get表主键ID", width = 15)
+    @ApiModelProperty(value = "素材get表主键ID")
     private String videoGetId;
-    /**
-     * 0无效,1有效
-     */
-    @Excel(name = "0无效,1有效", width = 15)
-    @ApiModelProperty(value = "0无效,1有效")
-    private Integer dataStatus;
+
+    private String signature;
     /**
      * 地域
      */

+ 78 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/KuaishouProjectVideoGetController.java

@@ -7,6 +7,7 @@ import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProjectVideoGet;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProjectVideoGetService;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -78,6 +79,26 @@ public class KuaishouProjectVideoGetController {
     }
 
     /**
+     * 素材关联被拒创意
+     */
+    @GetMapping(value = "/queryCreativeByVideo")
+    public Result<Object> queryCreativeByVideo(String signature, Long projectId,Long accountId, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+            if (Check.isNull(signature) || Check.isNull(projectId)) {
+                return Result.error("缺失参数");
+            }
+            List<String> photoIds = videoGetService.queryPhotoIdsByProjectAndMd5(projectId, signature);
+            if (!Check.isNull(photoIds)) {
+                return kuaishouProjectVideoGetService.queryCreativeBySignature(photoIds,accountId, pageNo, pageSize);
+            }
+            return Result.ok("没有查询到素材");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+    /**
      * 素材数量统计
      *
      * @return
@@ -96,6 +117,63 @@ public class KuaishouProjectVideoGetController {
     }
 
     /**
+     * 下架素材
+     *
+     * @return
+     */
+    @PostMapping(value = "/offShelfVideo")
+    public Result<Object> offShelfVideo(String id) {
+        try {
+            KuaishouProjectVideoGet videoGet = new KuaishouProjectVideoGet();
+            QueryWrapper<KuaishouProjectVideoGet> queryWrapper = new QueryWrapper<>();
+            videoGet.setStatus(1);
+            queryWrapper.eq("id", id);
+            kuaishouProjectVideoGetService.update(videoGet, queryWrapper);
+            return Result.ok("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("下架失败");
+    }
+
+    /**
+     * 下架素材
+     *
+     * @return
+     */
+    @PostMapping(value = "/offShelfVideos")
+    public Result<Object> offShelfVideos(@RequestBody JSONObject data) {
+        try {
+            Long projectId = data.getLong("projectId");
+            if (Check.isNull(projectId)) {
+                return Result.error("请选择项目");
+            }
+            Long accountId = data.getLong("accountId");
+            if (Check.isNull(accountId)) {
+                return Result.error("请选择账户");
+            }
+            String signature = data.getString("signature");
+            if (Check.isNull(signature)) {
+                return Result.error("请选择下架的视频");
+            }
+            KuaishouProjectVideoGet videoGet = new KuaishouProjectVideoGet();
+            QueryWrapper<KuaishouProjectVideoGet> queryWrapper = new QueryWrapper<>();
+            videoGet.setStatus(1);
+            queryWrapper.eq("project_id", projectId);
+            queryWrapper.eq("signature", signature);
+            kuaishouProjectVideoGetService.update(videoGet, queryWrapper);
+            List<String> photoIds = videoGetService.queryPhotoIdsByProjectAndMd5(projectId, signature);
+            for (Object photoId : photoIds) {
+                kuaishouProjectVideoGetService.deleteCreativesByPhotoId(photoId);
+            }
+            return Result.ok("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Result.error("下架失败");
+    }
+
+    /**
      * 素材详情数据
      * put_start_time
      *

+ 6 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCreativeMapper.java

@@ -34,4 +34,10 @@ public interface KuaiShouCreativeMapper extends BaseMapper<KuaiShouCreative> {
     Integer getRejectedCountsforAccountId(Long accountId);
 
     String getClickTrackUrl(@Param("accountId") Long accountId, @Param("unitId") Long unitId);
+
+    Long queryCreativeByPhotoIdTotal(@Param("photoIds")  List<String> photoIds, @Param("accountId") Long accountId);
+
+    List<JSONObject> queryCreativeByPhotoId(@Param("photoId") String photoId);
+
+    List<JSONObject> queryCreativeByPhotoIds(@Param("photoIds") List<String> photoIds, @Param("accountId") Long accountId);
 }

+ 49 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouCreativeMapper.xml

@@ -170,4 +170,53 @@
 
     </select>
 
+    <select id="queryCreativeByPhotoIdTotal" resultType="java.lang.Long">
+        SELECT
+            IFNULL(COUNT(1),0)
+        FROM ctop_kuaishou_creative t1
+        WHERE t1.photo_id in
+        <foreach collection="photoIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+        <if test="accountId!=null">
+            and  t1.account_id = #{accountId}
+        </if>
+    </select>
+
+
+    <select id="queryCreativeByPhotoId" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            IFNULL(t2.auth_name,'') 'authName',
+            IFNULL(t1.account_id,'') 'accountId',
+            IFNULL(t1.creative_id,'') 'creativeId',
+            IFNULL(t1.creative_name,'') 'creativeName',
+            IFNULL(t1.cover_url,'') 'coverUrl',
+            IFNULL(t1.description,'') 'description',
+            IFNULL(t1.review_detail,'') 'reviewDetail'
+        FROM ctop_kuaishou_creative t1
+        LEFT JOIN ctop_user_allocation t2 ON t1.account_id = t2.account_id
+        WHERE t1.photo_id = #{photoId}
+    </select>
+
+    <select id="queryCreativeByPhotoIds" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            IFNULL(t2.auth_name,'') 'authName',
+            IFNULL(t1.account_id,'') 'accountId',
+            IFNULL(t1.creative_id,'') 'creativeId',
+            IFNULL(t1.creative_name,'') 'creativeName',
+            IFNULL(t1.cover_url,'') 'coverUrl',
+            IFNULL(t1.description,'') 'description',
+            IFNULL(t1.review_detail,'') 'reviewDetail'
+        FROM ctop_kuaishou_creative t1
+        LEFT JOIN ctop_user_allocation t2 ON t1.account_id = t2.account_id
+        WHERE t1.photo_id in
+        <foreach collection="photoIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+        <if test="accountId!=null">
+            and  t1.account_id = #{accountId}
+        </if>
+    </select>
 </mapper>

+ 19 - 4
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaishouProjectVideoGetMapper.xml

@@ -71,6 +71,7 @@
     </select>
     <select id="queryPageList" resultType="cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProjectVideoGet">
         SELECT
+        id,
         project_id,
         status,
         width,
@@ -104,6 +105,7 @@
          SELECT
             IFNULL(t1.total,0) 'total',
             IFNULL(t2.validCount,0) 'validCount',
+            IFNULL(tt.yesterdayValidCount,0) 'yesterdayValidCount',
             IFNULL(t3.todayUpCount,0) 'todayUpCount',
             IFNULL(t4.yesterdayUpCount,0) 'yesterdayUpCount',
             IFNULL(t5.thisWeekCount,0) 'thisWeekCount',
@@ -111,6 +113,7 @@
          FROM
          (
          SELECT COUNT(1) total FROM ctop_kuaishou_project_video_get where project_id = #{projectId}
+             and status = 0
          ) t1
          LEFT JOIN
          (
@@ -122,23 +125,35 @@
          ) t2 ON 1=1
          LEFT JOIN
          (
-         SELECT COUNT(1) todayUpCount FROM ctop_kuaishou_project_video_get where project_id = #{projectId}
+             SELECT COUNT(1) yesterdayValidCount FROM ctop_kuaishou_report_daily_material t1
+                                                 INNER JOIN ctop_user_allocation t2 ON t1.account_id = t2.account_id
+             WHERE t2.project_id = #{projectId}
+               AND t1.stat_date = DATE_SUB(#{today},INTERVAL 1 day)
+               AND t1.charge>0
+         ) tt ON 1=1
+         LEFT JOIN
+         (
+         SELECT COUNT(1) todayUpCount FROM ctop_kuaishou_project_video_get where status = 0
+         AND  project_id = #{projectId}
          AND stat_date LIKE CONCAT(#{today},'%')
          ) t3 ON 1=1
          LEFT JOIN
          (
-         SELECT COUNT(1) yesterdayUpCount FROM ctop_kuaishou_project_video_get where project_id = #{projectId}
+         SELECT COUNT(1) yesterdayUpCount FROM ctop_kuaishou_project_video_get where status = 0
+         AND  project_id = #{projectId}
          AND stat_date LIKE CONCAT(DATE_SUB(#{today},INTERVAL 1 day),'%')
          ) t4 ON 1=1
          LEFT JOIN
          (
-         SELECT COUNT(1) thisWeekCount FROM ctop_kuaishou_project_video_get where project_id = #{projectId}
+         SELECT COUNT(1) thisWeekCount FROM ctop_kuaishou_project_video_get where status = 0
+         AND  project_id = #{projectId}
          AND stat_date >= #{monday}
          AND stat_date &lt;= now()
          ) t5 ON 1=1
          LEFT JOIN
          (
-         SELECT COUNT(1) lastWeekCount FROM ctop_kuaishou_project_video_get where project_id = #{projectId}
+         SELECT COUNT(1) lastWeekCount FROM ctop_kuaishou_project_video_get where status = 0
+         AND  project_id = #{projectId}
          AND stat_date >= #{lastStartDate}
          AND stat_date &lt;= CONCAT(#{lastEndDate},' 23:59:59')
          ) t6 ON 1=1

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouProjectVideoGetService.java

@@ -27,4 +27,7 @@ public interface IKuaishouProjectVideoGetService extends IService<KuaishouProjec
 
     Result<Object> getAccountVideos(String signature,Long projectId,Integer pageNo,Integer pageSize);
 
+    Result<Object> queryCreativeBySignature(List<String> photoIds,Long accountId, Integer pageNo, Integer pageSize);
+
+    void deleteCreativesByPhotoId(Object photoId);
 }

+ 55 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouProjectVideoGetServiceImpl.java

@@ -1,25 +1,36 @@
 package cn.com.ctop.kuaishou.modules.batch.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaishouProjectVideoGet;
+import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouCreativeMapper;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouVideoGetMapper;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaishouProjectVideoGetMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouImageGetService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouMaterialUploadService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouUpdateService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouProjectVideoGetService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.xxl.job.core.enums.NoEn;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 快手-项目下视频信息
@@ -30,7 +41,7 @@ import java.util.Map;
  */
 @Service
 public class KuaishouProjectVideoGetServiceImpl extends ServiceImpl<KuaishouProjectVideoGetMapper, KuaishouProjectVideoGet> implements IKuaishouProjectVideoGetService {
-
+    static ExecutorService kuaiShouExecutorService = Executors.newFixedThreadPool(5);
     @Autowired
     private KuaishouProjectVideoGetMapper projectVideoGetMapper;
     @Autowired
@@ -39,6 +50,14 @@ public class KuaishouProjectVideoGetServiceImpl extends ServiceImpl<KuaishouProj
     private IKuaiShouImageGetService imageGetService;
     @Autowired
     private IKuaiShouMaterialUploadService uploadService;
+    @Resource
+    private KuaiShouCreativeMapper kuaiShouCreativeMapper;
+    @Autowired
+    private IKuaiShouUpdateService kuaiShouUpdateService;
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IKuaiShouVideoGetService videoGetService;
 
     @Override
     public void clearProjectVideo(Long projectId) {
@@ -91,4 +110,39 @@ public class KuaishouProjectVideoGetServiceImpl extends ServiceImpl<KuaishouProj
         return Result.ok(list);
     }
 
+    @Override
+    public Result<Object> queryCreativeBySignature(List<String> photoIds,Long accountId, Integer pageNo, Integer pageSize) {
+        Long total = kuaiShouCreativeMapper.queryCreativeByPhotoIdTotal(photoIds,accountId);
+        PageHelper.startPage(pageNo, pageSize, false);
+        PageInfo<JSONObject> list = new PageInfo<>(kuaiShouCreativeMapper.queryCreativeByPhotoIds(photoIds,accountId));
+        list.setTotal(total);
+        return Result.ok(list);
+
+    }
+
+    @Override
+    public void deleteCreativesByPhotoId(Object photoId) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = "";
+        if (!Check.isNull(user)) {
+            userId = user.getId();
+        }
+        List<JSONObject> list = kuaiShouCreativeMapper.queryCreativeByPhotoId(String.valueOf(photoId));
+        if (!Check.isNull(list)) {
+            for (JSONObject data : list) {
+                Long accountId = data.getLong("accountId");
+                Long creativeId = data.getLong("creativeId");
+                CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
+                if (!Check.isNull(token)) {
+                    String finalUserId = userId;
+                    kuaiShouExecutorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            kuaiShouUpdateService.updateCreativeStatus(token.getAccessToken(), accountId, creativeId, NoEn.NO3.valueInt(), finalUserId);
+                        }
+                    });
+                }
+            }
+        }
+    }
 }