Selaa lähdekoodia

组合多数据源查询结果返回

marxjaw 2 kuukautta sitten
vanhempi
commit
bc86aa22ab

+ 110 - 26
yt-app/app-service/src/main/java/com/ytpm/controller/dyz/UserController.java

@@ -1,10 +1,11 @@
 package com.ytpm.controller.dyz;
 
+import cn.hutool.core.collection.CollUtil;
 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.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.AppQueryUserTodayTimeParam;
 import com.ytpm.app.param.AppUserParam;
@@ -17,10 +18,15 @@ import com.ytpm.dao.dyz.AdRecordMapper;
 import com.ytpm.dao.dyz.AppUserMapper;
 import com.ytpm.dao.dyz.LoginRecordMapper;
 import com.ytpm.dao.dyz.QuestionMapper;
+import com.ytpm.dao.nofeeds.NFAdRecordMapper;
+import com.ytpm.dao.nofeeds.NFLoginRecordMapper;
+import com.ytpm.dao.nofeeds.NFUserMapper;
+import com.ytpm.dao.qnjz.QNAdRecordMapper;
+import com.ytpm.dao.qnjz.QNLoginRecordMapper;
+import com.ytpm.dao.qnjz.QNUserMapper;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -28,61 +34,117 @@ 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 java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/user")
 public class UserController {
 
-    @Autowired
+    @Resource
     private AppUserMapper appUserMapper;
-    @Autowired
+    @Resource
+    private QNUserMapper qnUserMapper;
+    @Resource
+    private NFUserMapper nfUserMapper;
+    @Resource
     private LoginRecordMapper loginRecordMapper;
-    @Autowired
-    AdRecordMapper adRecordMapper;
-    @Autowired
+    @Resource
+    private QNLoginRecordMapper qnLoginRecordMapper;
+    @Resource
+    private NFLoginRecordMapper nfLoginRecordMapper;
+    @Resource
+    private AdRecordMapper adRecordMapper;
+    @Resource
+    private QNAdRecordMapper qnAdRecordMapper;
+    @Resource
+    private NFAdRecordMapper nfAdRecordMapper;
+    @Resource
     private QuestionMapper questionMapper;
 
     private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
     /**
      * 查询app 所有玩家
+     *  汇聚分库应用
      */
     @PostMapping("/queryAll")
     public ResultTable<YtAppUserListView> queryAll(@RequestBody YtAppUserListParam param) {
-        PageHelper.startPage(param.getPage(), param.getLimit());
-        List<YtAppUserListView> dyzUsers = appUserMapper.queryAll(param);
-        if (dyzUsers.isEmpty()) return ResultTable.resultTableOk(new PageInfo<YtAppUserListView>(dyzUsers));
-        List<YtDyzAdRecord> adRecords = adRecordMapper.getByUserIds(
-                dyzUsers.stream().map(YtAppUserListView::getUserId).collect(Collectors.joining(",")));
+        //查询主应用
+        List<YtAppUserListView> resultList = new ArrayList<>();
+        List<YtAppUserListView> dyzUserList = appUserMapper.queryAll(param);
+        List<YtAppUserListView> qnUserList = qnUserMapper.queryAll(param);
+        List<YtAppUserListView> nfUserList = nfUserMapper.queryAll(param);
+        if (CollUtil.isNotEmpty(dyzUserList)) {
+            resultList.addAll(dyzUserList);
+        }
+        if (CollUtil.isNotEmpty(qnUserList)) {
+            resultList.addAll(qnUserList);
+        }
+        if (CollUtil.isNotEmpty(nfUserList)) {
+            resultList.addAll(nfUserList);
+        }
+        int total = resultList.size()/param.getLimit();
+        long a =  resultList.size() % param.getLimit();
+        if(resultList.size() % param.getLimit() != 0){
+            total++;
+        }
+        int totalSize = resultList.size();
+        //判断最后一页时返回剩余数据
+        List<YtAppUserListView> result = param.getPage().compareTo(total)>=0?
+                resultList.stream().limit(a).collect(Collectors.toList()):
+                resultList.stream().limit(param.getLimit()).collect(Collectors.toList());
+        dyzUserList.clear();
+        qnUserList.clear();
+        nfUserList.clear();
+        resultList.clear();
+        String collect = result.stream().map(YtAppUserListView::getUserId).collect(Collectors.joining(","));
+
+        List<YtDyzAdRecord> adRecords = adRecordMapper.getByUserIds(collect);
+        List<YtDyzAdRecord> qnAdRecords = qnAdRecordMapper.getByUserIds(collect);
+        List<YtDyzAdRecord> nfAdRecords = nfAdRecordMapper.getByUserIds(collect);
+        if(CollUtil.isNotEmpty(qnAdRecords)){
+            adRecords.addAll(qnAdRecords);
+        }
+        if(CollUtil.isNotEmpty(nfAdRecords)){
+            adRecords.addAll(nfAdRecords);
+        }
+        List<YtDyzLoginRecord> dyzLogins = loginRecordMapper.getLoginRecordByIds(collect);
+        List<YtDyzLoginRecord> qnLogins = qnLoginRecordMapper.getLoginRecordByIds(collect);
+        List<YtDyzLoginRecord> nfLogins = nfLoginRecordMapper.getLoginRecordByIds(collect);
+
+        if(CollUtil.isNotEmpty(qnLogins)){
+            dyzLogins.addAll(qnLogins);
+        }
+        if(CollUtil.isNotEmpty(nfLogins)){
+            dyzLogins.addAll(nfLogins);
+        }
         Map<String, List<YtDyzAdRecord>> userAdMap = adRecords.stream().collect(
                 Collectors.groupingBy(YtDyzAdRecord::getUserId));
-        setUserExtInfo(dyzUsers,userAdMap);
-        return ResultTable.resultTableOk(new PageInfo<YtAppUserListView>(dyzUsers));
-    }
-
-    /**
-     * 根据时间统计收益
-     */
-    @PostMapping("/getRevenueByTime")
-    public BigDecimal getRevenueByTime(@RequestBody YtAppUserListParam param) {
-        return adRecordMapper.getRevenueByTime(param);
+        Map<String, List<YtDyzLoginRecord>> loginMap = dyzLogins.stream().collect(
+                Collectors.groupingBy(YtDyzLoginRecord::getUserId));
+        setUserExtInfo(result,userAdMap,loginMap);
+        return ResultTable.resultTableOk(result , (long) totalSize,param.getLimit(),param.getPage(),total);
     }
 
     /**
-     * 设置用户扩展信息
+     * 设置视频记录和登录信息
      */
-    private void setUserExtInfo(List<YtAppUserListView> dyzUsers, Map<String, List<YtDyzAdRecord>> userAdMap) {
-        for (YtAppUserListView user : dyzUsers) {
-            user.setLoginRecordList(loginRecordMapper.getLoginRecords(user.getUserId()));
+    private void setUserExtInfo(List<YtAppUserListView> result, Map<String, List<YtDyzAdRecord>> userAdMap,Map<String, List<YtDyzLoginRecord>> loginMap) {
+        for (YtAppUserListView user : result) {
+            if(loginMap.containsKey(user.getUserId())){
+                user.setLoginRecordList(loginMap.get(user.getUserId()));
+            }
             //获取今日收益 | 今日视频播放数
             if (userAdMap.containsKey(user.getUserId())) {
                 List<YtDyzAdRecord> ytDyzAdRecords = userAdMap.get(user.getUserId());
@@ -98,6 +160,28 @@ public class UserController {
             }
         }
     }
+
+    /**
+     * 根据时间统计收益
+     */
+    @PostMapping("/getRevenueByTime")
+    public BigDecimal getRevenueByTime(@RequestBody YtAppUserListParam param) {
+        BigDecimal result = new BigDecimal(0);
+        BigDecimal dyzRevenue = adRecordMapper.getRevenueByTime(param);
+        if(Objects.nonNull(dyzRevenue)){
+            result = result.add(dyzRevenue);
+        }
+        BigDecimal qnRevenue = qnAdRecordMapper.getRevenueByTime(param);
+        if(Objects.nonNull(qnRevenue)){
+            result = result.add(qnRevenue);
+        }
+        BigDecimal nfRevenue = nfAdRecordMapper.getRevenueByTime(param);
+        if(Objects.nonNull(nfRevenue)){
+            result = result.add(nfRevenue);
+        }
+        return result;
+    }
+
     /**
      * 计算广告记录列表中今日的收益
      *

+ 2 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/dyz/LoginRecordMapper.java

@@ -19,5 +19,7 @@ public interface LoginRecordMapper {
      */
     List<YtDyzLoginRecord> getLoginRecords(@Param("userId")String userId);
 
+    List<YtDyzLoginRecord> getLoginRecordByIds(@Param("userIds")String userIds);
+
     List<String> queryLoginCount(AppUserQueryParam appUserQueryParam);
 }

+ 6 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/nofeeds/NFAdRecordMapper.java

@@ -1,9 +1,11 @@
 package com.ytpm.dao.nofeeds;
 
 import com.ytpm.app.model.YtDyzAdRecord;
+import com.ytpm.app.param.YtAppUserListParam;
 import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Mapper
@@ -21,4 +23,8 @@ public interface NFAdRecordMapper {
      * 查询激励视频记录
      */
     List<YtDyzAdRecord> getByUserIds(@Param("userIds") String userIds);
+    /**
+     * 根据时间统计收益
+     */
+    BigDecimal getRevenueByTime(YtAppUserListParam param);
 }

+ 2 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/nofeeds/NFLoginRecordMapper.java

@@ -20,4 +20,6 @@ public interface NFLoginRecordMapper {
     List<YtDyzLoginRecord> getLoginRecords(@Param("userId")String userId);
 
     List<String> queryLoginCount(AppUserQueryParam appUserQueryParam);
+
+    List<YtDyzLoginRecord> getLoginRecordByIds(String collect);
 }

+ 6 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/qnjz/QNAdRecordMapper.java

@@ -1,9 +1,11 @@
 package com.ytpm.dao.qnjz;
 
 import com.ytpm.app.model.YtDyzAdRecord;
+import com.ytpm.app.param.YtAppUserListParam;
 import org.apache.ibatis.annotations.Param;
 import org.mybatis.spring.annotation.MapperScan;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @MapperScan
@@ -21,4 +23,8 @@ public interface QNAdRecordMapper {
      * 查询激励视频记录
      */
     List<YtDyzAdRecord> getByUserIds(@Param("userIds") String userIds);
+    /**
+     * 根据时间统计收益
+     */
+    BigDecimal getRevenueByTime(YtAppUserListParam param);
 }

+ 2 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/qnjz/QNLoginRecordMapper.java

@@ -20,4 +20,6 @@ public interface QNLoginRecordMapper {
     List<YtDyzLoginRecord> getLoginRecords(@Param("userId")String userId);
 
     List<String> queryLoginCount(AppUserQueryParam appUserQueryParam);
+
+    List<YtDyzLoginRecord> getLoginRecordByIds(String collect);
 }

+ 1 - 1
yt-app/app-service/src/main/resources/mapper/dyz/AppUserMapper.xml

@@ -181,7 +181,7 @@
     <select id="queryAll" resultType="com.ytpm.app.view.YtAppUserListView">
         select
             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`.yt_dyz_user
+        from yt_dyz_user
         where 1 = 1
         <if test="userId != null and userId !=''">
             and user_id = #{userId}

+ 9 - 0
yt-app/app-service/src/main/resources/mapper/dyz/LoginRecordMapper.xml

@@ -59,6 +59,15 @@
         </where>
         group by user_id
     </select>
+    <select id="getLoginRecordByIds" resultType="com.ytpm.app.model.YtDyzLoginRecord">
+        select
+            record_id, user_id, login_time, device_brand, device_model, login_ip, operator, ip_addr
+        from yt_dyz_login_record
+        where user_id in
+        <foreach collection="userIds.split(',')" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </select>
 
 
 </mapper>

+ 32 - 0
yt-app/app-service/src/main/resources/mapper/nofeeds/NFAdRecordMapper.xml

@@ -61,4 +61,36 @@
         </foreach>
         order by finish_time
     </select>
+    <select id="getRevenueByTime" resultType="java.math.BigDecimal">
+        select
+        sum(ar.revenue)
+        from yt_dyz_ad_record ar
+        join yt_dyz_user au on ar.user_id = au.user_id
+        <where>
+            <if test="userId != null and userId !=''">
+                and ar.user_id = #{userId}
+            </if>
+            <if test="nickName != null and nickName !=''">
+                and au.nick_name like concat('%',#{nickName},'%')
+            </if>
+            <if test="ditchId != null">
+                and au.ditch_id = #{ditchId}
+            </if>
+            <if test="userStatus != null">
+                and au.user_status = #{userStatus}
+            </if>
+            <if test="appIds != null and appIds != ''">
+                and ar.app_id in
+                <foreach collection="appIds.split(',')" separator="," item="item" open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="registryTimeBegin != null ">
+                and DATE_FORMAT(au.registry_time,'%Y-%m-%d') <![CDATA[>=]]> #{registryTimeBegin}
+            </if>
+            <if test="registryTimeEnd != null ">
+                and DATE_FORMAT(au.registry_time,'%Y-%m-%d') <![CDATA[<=]]> #{registryTimeEnd}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 9 - 1
yt-app/app-service/src/main/resources/mapper/nofeeds/NFLoginRecordMapper.xml

@@ -32,7 +32,15 @@
         from yt_dyz_login_record
         where user_id = #{userId}
     </select>
-
+    <select id="getLoginRecordByIds" resultType="com.ytpm.app.model.YtDyzLoginRecord">
+        select
+        record_id, user_id, login_time, device_brand, device_model, login_ip, operator, ip_addr
+        from yt_dyz_login_record
+        where user_id in
+        <foreach collection="userIds.split(',')" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </select>
     <select id="queryLoginCount" resultType="String">
         select ydlr.user_id
         from yt_dyz_login_record ydlr

+ 32 - 0
yt-app/app-service/src/main/resources/mapper/qnjz/QNAdRecordMapper.xml

@@ -61,4 +61,36 @@
         </foreach>
         order by finish_time
     </select>
+    <select id="getRevenueByTime" resultType="java.math.BigDecimal">
+        select
+        sum(ar.revenue)
+        from yt_dyz_ad_record ar
+        join yt_dyz_user au on ar.user_id = au.user_id
+        <where>
+            <if test="userId != null and userId !=''">
+                and ar.user_id = #{userId}
+            </if>
+            <if test="nickName != null and nickName !=''">
+                and au.nick_name like concat('%',#{nickName},'%')
+            </if>
+            <if test="ditchId != null">
+                and au.ditch_id = #{ditchId}
+            </if>
+            <if test="userStatus != null">
+                and au.user_status = #{userStatus}
+            </if>
+            <if test="appIds != null and appIds != ''">
+                and ar.app_id in
+                <foreach collection="appIds.split(',')" separator="," item="item" open="(" close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="registryTimeBegin != null ">
+                and DATE_FORMAT(au.registry_time,'%Y-%m-%d') <![CDATA[>=]]> #{registryTimeBegin}
+            </if>
+            <if test="registryTimeEnd != null ">
+                and DATE_FORMAT(au.registry_time,'%Y-%m-%d') <![CDATA[<=]]> #{registryTimeEnd}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 9 - 1
yt-app/app-service/src/main/resources/mapper/qnjz/QNLoginRecordMapper.xml

@@ -32,7 +32,15 @@
         from yt_dyz_login_record
         where user_id = #{userId}
     </select>
-
+    <select id="getLoginRecordByIds" resultType="com.ytpm.app.model.YtDyzLoginRecord">
+        select
+        record_id, user_id, login_time, device_brand, device_model, login_ip, operator, ip_addr
+        from yt_dyz_login_record
+        where user_id in
+        <foreach collection="userIds.split(',')" open="(" close=")" separator="," item="item">
+            #{item}
+        </foreach>
+    </select>
     <select id="queryLoginCount" resultType="String">
         select ydlr.user_id
         from yt_dyz_login_record ydlr