Ver Fonte

fix 统计用户数

zoujiajian há 3 anos atrás
pai
commit
23d07e204f

+ 3 - 2
netflix-dao/src/main/java/com/cyksj/mapper/AccountMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.cyksj.model.entity.Account;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.views.ExpiredAccountDataView;
 import org.apache.ibatis.annotations.Param;
 
@@ -16,9 +17,9 @@ import java.util.List;
  */
 public interface AccountMapper extends BaseMapper<Account> {
 
-	List<Integer> getNumOfUser(@Param("list") List<Long> accountIds, @Param("yesZeroDate") Date yesZeroDate, @Param("thisZeroDate") Date thisZeroDate);
-
 	IPage<ExpiredAccountDataView> getExpiredAccountView(@Param("goodsId") Integer goodsId, @Param("account") String account, @Param("renewStatus") Boolean renewStatus, @Param("handleStatus") Boolean handleStatus, @Param("cnAccount") String cnAccount, @Param("usAccount") String usAccount, @Param("userId") Integer userId, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("now") String now, @Param("page") Page page);
 
 	List<Account> getNoAppleOneAccount(String appleOne);
+
+	List<OrderDon> getNoAppleOneOrderDon(@Param("accountIds") List<Long> accountIds, @Param("yesZeroDate") Date yesZeroDate, @Param("thisZeroDate") Date thisZeroDate, @Param("noOrderStatus") List<String> noOrderStatus);
 }

+ 2 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/AbstractBackData.java

@@ -52,6 +52,8 @@ public abstract class AbstractBackData {
 	 */
 	private Integer numOfYearOrder;
 
+	private Date statisticsDate;
+
 	/**
 	 * 创建时间
 	 */

+ 3 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/RealGoodsData.java

@@ -4,6 +4,7 @@ import lombok.Getter;
 import lombok.Setter;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /*
  *项目名: netflix
@@ -48,4 +49,6 @@ public class RealGoodsData extends BaseEntity{
 	 * 金额
 	 */
 	private BigDecimal money;
+
+	private Date statisticsDate;
 }

+ 14 - 11
netflix-dao/src/main/resources/mapper/AccountMapper.xml

@@ -2,17 +2,6 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.cyksj.mapper.AccountMapper">
 
-    <select id="getNumOfUser" resultType="java.lang.Integer">
-        select distinct u.id from `groups_trips` gt inner join `groups_relation` gr on gr.groups_id = gt.id
-        inner join `user` u on u.id = gr.user_id
-        where gt.account_id in
-        <foreach collection="list" item="item" open="(" separator="," close=")">
-            #{item}
-        </foreach>
-        and gt.status = 'validity'
-        and u.created_time between #{yesZeroDate} and #{thisZeroDate}
-    </select>
-
     <select id="getExpiredAccountView" resultType="com.cyksj.model.views.ExpiredAccountDataView">
         select gr.id as relationId,
                a.title as platform,
@@ -72,4 +61,18 @@
         from `account` a inner join `goods_don` g on g.id = a.goods_id
         where g.type = 1 and g.title != #{appleOne}
     </select>
+
+    <select id="getNoAppleOneOrderDon" resultType="com.cyksj.model.entity.OrderDon">
+        select distinct od.* from `order_don` od left join `groups_relation` gr on od.relation_id = gr.id
+        left join `groups_trips` gt on gt.id = gr.groups_id
+        where gt.account_id in
+        <foreach collection="accountIds" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and od.status not in
+        <foreach collection="noOrderStatus" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+        and od.pay_time between #{yesZeroDate} and #{thisZeroDate}
+    </select>
 </mapper>

+ 2 - 22
netflix-dao/src/main/resources/mapper/AppleOneDataMapper.xml

@@ -3,26 +3,6 @@
 
 <mapper namespace="com.cyksj.mapper.manage.statistics.AppleOneDataMapper">
 
-    <select id="statisticsStreamingData" resultType="com.cyksj.model.entity.StreamingAccountData">
-        select account_name,
-        sum(num_of_user) as num_of_user,
-        sum(num_of_order) as num_of_order,
-        cast(sum(money)/100 as decimal(20,2)) as money,
-        sum(num_of_month_order) as num_of_month_order,
-        sum(num_of_season_order) as num_of_season_order,
-        sum(num_of_year_order) as num_of_year_order
-        from `streaming_account_data`
-        <where>
-            <if test="startDate != null">
-                created_time >= #{startDate}
-            </if>
-            <if test="endDate != null">
-                created_time &lt;= #{endDate}
-            </if>
-        </where>
-        group by account_name
-    </select>
-
     <select id="statisticsAppleOneData" resultType="com.cyksj.model.entity.AppleOneData">
         select area_name,
         sum(num_of_user) as num_of_user,
@@ -34,10 +14,10 @@
         from `apple_one_data`
         <where>
             <if test="startDate != null">
-                created_time >= #{startDate}
+                statistics_date >= #{startDate}
             </if>
             <if test="endDate != null">
-                and created_time &lt;= #{endDate}
+                and statistics_date &lt;= #{endDate}
             </if>
         </where>
         group by area_name

+ 2 - 1
netflix-dao/src/main/resources/mapper/OrderDonMapper.xml

@@ -34,6 +34,7 @@
         inner join `groups_trips` gt
         on gt.id = gr.groups_id
         inner join `account` a on a.id = gt.account_id
-        where a.title = #{appleOne} and gr.status = 'validity'
+        inner join `goods_don` g on g.id = a.goods_id
+        where g.title = #{appleOne} and gr.status = 'validity'
     </select>
 </mapper>

+ 2 - 2
netflix-dao/src/main/resources/mapper/RealGoodsDataMapper.xml

@@ -14,10 +14,10 @@
         from real_goods_data
         <where>
             <if test="startDate != null">
-                created_time >= #{startDate}
+                statistics_date >= #{startDate}
             </if>
             <if test="endDate != null">
-                and created_time &lt;= #{endDate}
+                and statistics_date &lt;= #{endDate}
             </if>
         </where>
         group by goods_id,sku_id

+ 2 - 2
netflix-dao/src/main/resources/mapper/StreamingAccountDataMapper.xml

@@ -15,10 +15,10 @@
         from `streaming_account_data`
         <where>
             <if test="startDate != null">
-                created_time >= #{startDate}
+                statistics_date >= #{startDate}
             </if>
             <if test="endDate != null">
-                and created_time &lt;= #{endDate}
+                and statistics_date &lt;= #{endDate}
             </if>
         </where>
         group by goods_id

+ 3 - 3
netflix-service/src/main/java/com/cyksj/service/mange/CmsAccountService.java

@@ -3,6 +3,7 @@ package com.cyksj.service.mange;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.Account;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.views.ExpiredAccountDataView;
 
 import java.util.Date;
@@ -13,10 +14,9 @@ import java.util.List;
  * @date 2022/9/27 6:23 PM
  */
 public interface CmsAccountService extends IService<Account> {
-
-	List<Integer> getNumOfUser(List<Long> accountIds, Date yesZeroDate, Date thisZeroDate);
-
 	IPage<ExpiredAccountDataView> getExpiredAccountView(Integer goodsId, String account, Boolean renewStatus, Boolean handleStatus, String cnAccount, String usAccount, Integer userId, String startTime, String endTime, String now, Long offset, Long limit);
 
 	List<Account> getNoAppleOneAccount(String appleOne);
+
+	List<OrderDon> getNoAppleOneOrderDon(List<Long> accountIds, Date yesZeroDate, Date thisZeroDate, List<String> noOrderStatus);
 }

+ 6 - 5
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.AccountMapper;
 import com.cyksj.model.entity.Account;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.views.ExpiredAccountDataView;
 import com.cyksj.service.mange.CmsAccountService;
 import lombok.RequiredArgsConstructor;
@@ -24,11 +25,6 @@ import java.util.List;
 public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements CmsAccountService {
 	private final AccountMapper accountMapper;
 
-	@Override
-	public List<Integer> getNumOfUser(List<Long> accountIds, Date yesZeroDate, Date thisZeroDate) {
-		return accountMapper.getNumOfUser(accountIds, yesZeroDate, thisZeroDate);
-	}
-
 	@Override
 	public IPage<ExpiredAccountDataView> getExpiredAccountView(Integer goodsId, String account, Boolean renewStatus, Boolean handleStatus, String cnAccount, String usAccount, Integer userId, String startTime, String endTime, String now, Long offset, Long limit) {
 		return accountMapper.getExpiredAccountView(goodsId, account, renewStatus, handleStatus, cnAccount, usAccount, userId, startTime, endTime, now, new Page<>(offset, limit));
@@ -39,4 +35,9 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 		return accountMapper.getNoAppleOneAccount(appleOne);
 	}
 
+	@Override
+	public List<OrderDon> getNoAppleOneOrderDon(List<Long> accountIds, Date yesZeroDate, Date thisZeroDate, List<String> noOrderStatus) {
+		return accountMapper.getNoAppleOneOrderDon(accountIds, yesZeroDate, thisZeroDate, noOrderStatus);
+	}
+
 }

+ 3 - 2
netflix-service/src/main/java/com/cyksj/service/mange/statistics/impl/StatisticsDataServiceImpl.java

@@ -30,6 +30,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 /*
  *项目名: netflix
@@ -144,11 +145,11 @@ public class StatisticsDataServiceImpl implements StatisticsDataService {
 	}
 
 	private void headerData(BackgroundDataView backgroundDataView, Date startDate, Date endDate) {
-		//总用户数
-		backgroundDataView.setTotalNumOfUser(userService.count(Wrappers.lambdaQuery(User.class).ge(ObjectUtil.isNotNull(startDate), User::getCreatedTime, startDate).le(ObjectUtil.isNotNull(endDate), User::getCreatedTime, endDate)));
 		//总订单数
 		List<OrderDon> orderDons = Optional.ofNullable(orderDonService.list(Wrappers.lambdaQuery(OrderDon.class).notIn(OrderDon::getStatus, StatisticsDataScheduler.noOrderStatus).ge(ObjectUtil.isNotNull(startDate), OrderDon::getCreatedTime, startDate).le(ObjectUtil.isNotNull(endDate), OrderDon::getCreatedTime, endDate))).orElse(new ArrayList<>());
 		backgroundDataView.setTotalNumOfOrder(orderDons.size());
+		//总下单用户数
+		backgroundDataView.setTotalNumOfUser(orderDons.stream().map(OrderDon::getUserId).collect(Collectors.toSet()).size());
 		Optional<BigDecimal> totalMoney = orderDons.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
 		//总订单金额
 		backgroundDataView.setTotalOrderAmount(totalMoney.isPresent() ? totalMoney.get().divide(BigDecimal.valueOf(100)) : BigDecimal.ZERO);

+ 16 - 13
netflix-service/src/main/java/com/cyksj/task/StatisticsDataScheduler.java

@@ -97,6 +97,7 @@ public class StatisticsDataScheduler {
 			appleOneDataStatistics(orderDons, appleOne, appleOneSave);
 		});
 		for (AbstractBackData appleOne : appleOneSave) {
+			appleOne.setStatisticsDate(yesZeroDate);
 			appleOneDataMapper.insert((AppleOneData) appleOne);
 		}
 	}
@@ -132,6 +133,7 @@ public class StatisticsDataScheduler {
 			streamingAccountDataStatistics(accountList, streamingAccount, StreamingAccountDataSave, yesZeroDate, thisZeroDate);
 		});
 		for (StreamingAccountData streamingAccountData : StreamingAccountDataSave) {
+			streamingAccountData.setStatisticsDate(yesZeroDate);
 			streamingAccountDataMapper.insert(streamingAccountData);
 		}
 	}
@@ -152,13 +154,15 @@ public class StatisticsDataScheduler {
 						realGoodsData.setGoodsTitle(goods.getTitle());
 						realGoodsData.setSkuId(sku.getId());
 						realGoodsData.setSpecVal(sku.getSpecVal());
-						//用户数
-						List<OrderDon> orderDon = Optional.ofNullable(orderDonService.list(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getSkuId, sku.getId()).between(OrderDon::getCreatedTime, yesZeroDate, thisZeroDate))).orElse(new ArrayList<>());
+						//订单
+						List<OrderDon> orderDon = Optional.ofNullable(orderDonService.list(Wrappers.lambdaQuery(OrderDon.class).eq(OrderDon::getSkuId, sku.getId()).between(OrderDon::getCreatedTime, yesZeroDate, thisZeroDate).notIn(OrderDon::getStatus, noOrderStatus).select(OrderDon::getUserId, OrderDon::getMoney, OrderDon::getId))).orElse(new ArrayList<>());
 						Set<Long> userList = Optional.ofNullable(orderDon.stream().map(OrderDon::getUserId).collect(Collectors.toSet())).orElse(new HashSet<>());
+						//用户数
 						realGoodsData.setNumOfUser(userList.size());
-						List<OrderDon> collect = orderDon.stream().filter((order) -> !noOrderStatus.contains(order.getStatus())).collect(Collectors.toList());
-						realGoodsData.setNumOfOrder(collect.size());
-						Optional<BigDecimal> money = collect.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
+						//订单数
+						realGoodsData.setNumOfOrder(orderDon.size());
+						//金额
+						Optional<BigDecimal> money = orderDon.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
 						realGoodsData.setMoney(money.isPresent() ? money.get() : BigDecimal.ZERO);
 						realGoodsDataList.add(realGoodsData);
 					});
@@ -166,7 +170,10 @@ public class StatisticsDataScheduler {
 			});
 		}
 		if (!realGoodsDataList.isEmpty()) {
-			realGoodsDataList.forEach(data -> realGoodsDataMapper.insert(data));
+			realGoodsDataList.forEach(data -> {
+				data.setStatisticsDate(yesZeroDate);
+				realGoodsDataMapper.insert(data);
+			});
 		}
 	}
 
@@ -181,14 +188,10 @@ public class StatisticsDataScheduler {
 		//主账号
 		List<Long> accountIds = accounts.stream().map(Account::getId).collect(Collectors.toList());
 		if (CollUtil.isNotEmpty(accountIds)) {
-			List<Integer> userIds = Optional.ofNullable(accountService.getNumOfUser(accountIds, yesZeroDate, thisZeroDate)).orElse(new ArrayList<>());
+			List<OrderDon> orderDons = Optional.ofNullable(accountService.getNoAppleOneOrderDon(accountIds, yesZeroDate, thisZeroDate, noOrderStatus)).orElse(new ArrayList<>());
 			//用户数
-			streamingAccountData.setNumOfUser(userIds.size());
-			List<OrderDon> orderDons = new ArrayList<>();
-			if (CollUtil.isNotEmpty(userIds)) {
-				orderDons = Optional.ofNullable(orderDonService.list(Wrappers.lambdaQuery(OrderDon.class).in(OrderDon::getUserId, userIds).notIn(OrderDon::getStatus, noOrderStatus).between(OrderDon::getPayTime, yesZeroDate, thisZeroDate).select(OrderDon::getId, OrderDon::getMoney, OrderDon::getSkuId))).orElse(new ArrayList<>());
-				getNumOfOrderByPayType(orderDons, streamingAccountData);
-			}
+			streamingAccountData.setNumOfUser(orderDons.stream().map(OrderDon::getUserId).collect(Collectors.toSet()).size());
+			getNumOfOrderByPayType(orderDons, streamingAccountData);
 			streamingAccountData.setNumOfOrder(orderDons.size());
 			Optional<BigDecimal> reduce = orderDons.stream().map(OrderDon::getMoney).reduce(BigDecimal::add);
 			BigDecimal totalMoney = BigDecimal.valueOf(0);