소스 검색

首页统计接口实现

guanglong 3 년 전
부모
커밋
926f99cbdf

+ 197 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/IndexMgrController.java

@@ -307,11 +307,11 @@ public class IndexMgrController extends BaseApiController {
 				queryParam.setStartTime(indeQueryParam.getStartTime());
 				queryParam.setEndTime(indeQueryParam.getEndTime());
 			}else {
-				queryParam.setStartTime(DateUtils.getPreDayOfNow(7));
+				queryParam.setStartTime(DateUtils.getPreDayOfNowZero(7));
 				queryParam.setEndTime(new Date());
 			}
 		}else {
-			queryParam.setStartTime(DateUtils.getPreDayOfNow(queryParam.getDays()));
+			queryParam.setStartTime(DateUtils.getPreDayOfNowZero(queryParam.getDays()));
 			queryParam.setEndTime(new Date());
 		}
 		return queryParam;
@@ -442,6 +442,201 @@ public class IndexMgrController extends BaseApiController {
 	}
 	
 	
+	/**
+	 * 查询统计交易金额
+	 * @return
+	 */
+	@PostMapping("/daily")
+	// @PreAuthorize("@ss.hasPermi('business:channel:list')")
+	public AjaxResult listDailyData(@RequestBody IndexQueryParam indeQueryParam) {
+		
+		IndexQueryParam queryParam = new IndexQueryParam();
+		queryParam.setStartTime(DateUtils.getPreDayOfNowZero(1));  // 昨天
+		queryParam.setEndTime(new Date());  // 今天
+		
+		List<IndexVO> list = new ArrayList<IndexVO>();
+		List<IndexVO> siteList = new ArrayList<IndexVO>();
+		
+		QueryWrapper<UserDeliverOrder> queryWrapper = new QueryWrapper<>();
+		queryWrapper.ge(null != queryParam && null != queryParam.getStartTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getStartTime());
+		queryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getEndTime());
+		queryWrapper.gt("t1.`status`", 0);
+		
+
+		QueryWrapper<Channel> siteQueryWrapper = new QueryWrapper<>();
+		siteQueryWrapper.ge(null != queryParam && null != queryParam.getStartTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getStartTime());
+		siteQueryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getEndTime());
+		siteQueryWrapper.eq("t1.`level`", 0);
+		
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		if(null != channelId && 0 != channelId) {
+			Channel channel = channelService.getById(channelId);
+			if(null!=channel && StringUtils.isNotBlank(channel.getChannelNo())) {
+				queryWrapper.and(wrapper -> wrapper.likeRight("t2.channel_no", channel.getChannelNo())
+						.or().eq("t2.channel_no", channel.getChannelNo()));
+				
+				siteQueryWrapper.and(wrapper -> wrapper.likeRight("t2.channel_no", channel.getChannelNo())
+						.or().eq("t2.channel_no", channel.getChannelNo()));
+			}
+		}
+	
+		list = userTicketOrderService.selectIndexDailyInfoList(queryWrapper);
+	
+		siteList = channelService.selectIndexSiteIncreaseList(siteQueryWrapper);
+		
+		return  AjaxResult.success(getDailyInfoData(list, siteList));
+	}
+	
+	
+	private Map<String,Object> getDailyInfoData(List<IndexVO> list,List<IndexVO> siteList){
+		Map<String,Object> payAmt = new HashMap<String,Object>();
+		Map<String,Object> payUser = new HashMap<String,Object>();
+		Map<String,Object> ticketNum = new HashMap<String,Object>();
+		Map<String,Object> newSite = new HashMap<String,Object>();
+		String today = DateUtils.parseDateToStr(DateUtils.YYYYMMDD,new Date());
+		
+		int todayPayAmt = 0;
+		int todayPayUserCnt = 0;
+		int todayTicketNum = 0;
+		int todayNewSiteCnt = 0;
+		
+		int yesterdayPayAmt = 0;
+		int yesterdayPayUserCnt = 0;
+		int yesterdayTicketNum = 0;
+		int yesterdayNewSiteCnt = 0;
+		
+		if(null != list && list.size() > 0) {
+			for(IndexVO indexVo : list) {
+				if(null != indexVo 
+						&& StringUtils.isNotBlank(indexVo.getTime())) {
+					if(today.equals(indexVo.getTime())) {
+						todayPayAmt =  null != indexVo.getPayAmt()?indexVo.getPayAmt():0;
+						todayPayUserCnt =  null != indexVo.getPayUserCnt()?indexVo.getPayUserCnt():0;
+						todayTicketNum = null != indexVo.getTicketNum()?indexVo.getTicketNum():0;
+					}else {
+						yesterdayPayAmt = null != indexVo.getPayAmt()?indexVo.getPayAmt():0;
+						yesterdayPayUserCnt = null != indexVo.getPayUserCnt()?indexVo.getPayUserCnt():0;
+						yesterdayTicketNum =  null != indexVo.getTicketNum()?indexVo.getTicketNum():0;
+					}
+					
+					break;
+				}
+			}
+		}
+		if(null != siteList && siteList.size() > 0) {
+			for(IndexVO indexVo : siteList) {
+				if(null != indexVo 
+						&& null != indexVo.getNewSiteCnt()
+						&& StringUtils.isNotBlank(indexVo.getTime())) {
+					if(today.equals(indexVo.getTime())) {
+						todayNewSiteCnt = null != indexVo.getNewSiteCnt()?indexVo.getNewSiteCnt():0;
+					}else {
+						yesterdayNewSiteCnt = null != indexVo.getNewSiteCnt()?indexVo.getNewSiteCnt():0;
+					}
+				}
+			}
+		}
+		payAmt.put("today", todayPayAmt);
+		payAmt.put("yesterday", yesterdayPayAmt);
+		payUser.put("today", todayPayUserCnt);
+		payUser.put("yesterday", yesterdayPayUserCnt);
+		ticketNum.put("today", todayTicketNum);
+		ticketNum.put("yesterday", yesterdayTicketNum);
+		newSite.put("today", todayNewSiteCnt);
+		newSite.put("yesterday", yesterdayNewSiteCnt);
+		
+		Map<String,Object> map = new HashMap<String,Object>();
+		map.put("payAmt", payAmt);
+		map.put("payUser", payUser);
+		map.put("ticketNum", ticketNum);
+		map.put("newSite", newSite);
+		return map;
+	} 
+	
+	/**
+	 * 查询统计统计票组销售TOP10
+	 * @return
+	 */
+	@PostMapping("/ticket/box/top")
+	// @PreAuthorize("@ss.hasPermi('business:channel:list')")
+	public AjaxResult ticketBoxTopData(@RequestBody IndexQueryParam indeQueryParam) {
+		
+		IndexQueryParam queryParam = getQueryParam(indeQueryParam);
+		List<IndexVO> list = new ArrayList<IndexVO>();
+		QueryWrapper<UserDeliverOrder> queryWrapper = new QueryWrapper<>();
+		queryWrapper.ge(null != queryParam && null != queryParam.getStartTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getStartTime());
+		queryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getEndTime());
+		queryWrapper.gt("t1.`status`", 0);
+		
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		if(null != channelId && 0 != channelId) {
+			Channel channel = channelService.getById(channelId);
+			if(null!=channel && StringUtils.isNotBlank(channel.getChannelNo())) {
+				queryWrapper.and(wrapper -> wrapper.likeRight("t2.channel_no", channel.getChannelNo())
+						.or().eq("t2.channel_no", channel.getChannelNo()));
+				
+			}
+		}
+	
+		list = userTicketOrderService.selectIndexTicketBoxTop(queryWrapper);
+		List<Map<String,Object>> mapList = new ArrayList<>();
+		if(null != list && list.size() > 0) {
+			for(IndexVO indexVo : list) {
+				if(null != indexVo 
+						&& StringUtils.isNotBlank(indexVo.getTitle())
+						&& null != indexVo.getPayAmt()) {
+					Map<String,Object> map = new HashMap<String,Object>();
+					map.put("x", indexVo.getTitle());
+					map.put("y", indexVo.getPayAmt());
+					mapList.add(map);
+				}
+			}
+		}
+		return  AjaxResult.success(mapList);
+	}
+	
+	
+	/**
+	 * 统计经销商交易额TOP10
+	 * @return
+	 */
+	@PostMapping("/ticket/site/top")
+	// @PreAuthorize("@ss.hasPermi('business:channel:list')")
+	public AjaxResult ticketSiteTopData(@RequestBody IndexQueryParam indeQueryParam) {
+		
+		IndexQueryParam queryParam = getQueryParam(indeQueryParam);
+		List<IndexVO> list = new ArrayList<IndexVO>();
+		QueryWrapper<UserDeliverOrder> queryWrapper = new QueryWrapper<>();
+		queryWrapper.ge(null != queryParam && null != queryParam.getStartTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getStartTime());
+		queryWrapper.le(null != queryParam && null != queryParam.getEndTime(), "DATE_FORMAT(t1.created_time, '%Y-%m-%d')", queryParam.getEndTime());
+		queryWrapper.gt("t1.`status`", 0);
+		
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		if(null != channelId && 0 != channelId) {
+			Channel channel = channelService.getById(channelId);
+			if(null!=channel && StringUtils.isNotBlank(channel.getChannelNo())) {
+				queryWrapper.and(wrapper -> wrapper.likeRight("t2.channel_no", channel.getChannelNo())
+						.or().eq("t2.channel_no", channel.getChannelNo()));
+				
+			}
+		}
+	
+		list = userTicketOrderService.selectIndexTicketSiteTop(queryWrapper);
+		List<Map<String,Object>> mapList = new ArrayList<>();
+		if(null != list && list.size() > 0) {
+			for(IndexVO indexVo : list) {
+				if(null != indexVo 
+						&& StringUtils.isNotBlank(indexVo.getName())
+						&& null != indexVo.getPayAmt()) {
+					Map<String,Object> map = new HashMap<String,Object>();
+					map.put("x", indexVo.getName());
+					map.put("y", indexVo.getPayAmt());
+					mapList.add(map);
+				}
+			}
+		}
+		return  AjaxResult.success(mapList);
+	}
 
 
 }

+ 19 - 2
mp-common/src/main/java/com/qs/mp/common/utils/DateUtils.java

@@ -247,16 +247,33 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
     }
     
     // 首页统计日期处理
+ 	 /** 
+ 	 * 取得指定日期的前面几天日期
+ 	 */ 
+ 	 public static Date getPreDayOfNow(int days) { 
+ 		try {
+			Calendar c = Calendar.getInstance();
+		   	c.setFirstDayOfWeek(Calendar.MONDAY); 
+		   	c.add(Calendar.DATE, - days);
+		   	return c.getTime(); 
+		} catch (Exception e) {
+			e.printStackTrace();
+			return null;
+		}
+ 	 }
     
     
   	 /** 
-  	 * 取得指定日期所在周的最后一天 
+  	 * 取得指定日期的前面几天日期0点
   	 */ 
-  	 public static Date getPreDayOfNow(int days) { 
+  	 public static Date getPreDayOfNowZero(int days) { 
   		try {
 			Calendar c = Calendar.getInstance();
 		   	c.setFirstDayOfWeek(Calendar.MONDAY); 
 		   	c.add(Calendar.DATE, - days);
+		   	c.set(Calendar.HOUR_OF_DAY, 0);
+		   	c.set(Calendar.MINUTE, 0);
+		   	c.set(Calendar.SECOND, 0);
 		   	return c.getTime(); 
 		} catch (Exception e) {
 			e.printStackTrace();

+ 15 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/IndexVO.java

@@ -32,4 +32,19 @@ public class IndexVO {
 	 * 新增经销商数
 	 */
 	private Integer newSiteCnt;
+	
+	/**
+	 * 盲票销售张数
+	 */
+	private Integer ticketNum;
+	
+	/**
+	 * 盲票组名称
+	 */
+	private String title;
+	
+	/**
+	 * 经销商名称
+	 */
+	private String name;
 }

+ 21 - 0
mp-service/src/main/java/com/qs/mp/user/mapper/UserTicketOrderMapper.java

@@ -32,4 +32,25 @@ public interface UserTicketOrderMapper extends BaseMapper<UserTicketOrder> {
 	   * @return
 	   */
 	  List<IndexVO> selectIndexPayUserCntList(@Param(Constants.WRAPPER) Wrapper<UserDeliverOrder> wrapper);
+	  
+	  /**
+	   * 统计实时交易数据
+	   * @param wrapper
+	   * @return
+	   */
+	  List<IndexVO> selectIndexDailyInfoList(@Param(Constants.WRAPPER) Wrapper<UserDeliverOrder> wrapper);
+	  
+	  /**
+	   * 统计票组销售TOP10
+	   * @param wrapper
+	   * @return
+	   */
+	  List<IndexVO> selectIndexTicketBoxTop(@Param(Constants.WRAPPER) Wrapper<UserDeliverOrder> wrapper);
+	  
+	  /**
+	   * 统计经销商交易额TOP10
+	   * @param wrapper
+	   * @return
+	   */
+	  List<IndexVO> selectIndexTicketSiteTop(@Param(Constants.WRAPPER) Wrapper<UserDeliverOrder> wrapper);
 }

+ 22 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserTicketOrderService.java

@@ -73,4 +73,26 @@ public interface IUserTicketOrderService extends IService<UserTicketOrder> {
    */
   List<IndexVO> selectIndexPayUserCntList(Wrapper<UserDeliverOrder> wrapper);
   
+  /**
+   * 统计实时交易数据
+   * @param wrapper
+   * @return
+   */
+  List<IndexVO> selectIndexDailyInfoList(Wrapper<UserDeliverOrder> wrapper);
+  
+  
+  /**
+   * 统计票组销售TOP10
+   * @param wrapper
+   * @return
+   */
+  List<IndexVO> selectIndexTicketBoxTop(Wrapper<UserDeliverOrder> wrapper);
+  
+  /**
+   * 统计经销商交易额TOP10
+   * @param wrapper
+   * @return
+   */
+  List<IndexVO> selectIndexTicketSiteTop(Wrapper<UserDeliverOrder> wrapper);
+  
 }

+ 20 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserTicketOrderServiceImpl.java

@@ -481,4 +481,24 @@ public class UserTicketOrderServiceImpl extends
 	public List<IndexVO> selectIndexPayUserCntList(Wrapper<UserDeliverOrder> wrapper) {
 		return getBaseMapper().selectIndexPayUserCntList(wrapper);
 	}
+
+	@Override
+	public List<IndexVO> selectIndexDailyInfoList(Wrapper<UserDeliverOrder> wrapper) {
+		return getBaseMapper().selectIndexDailyInfoList(wrapper);
+	}
+
+	@Override
+	public List<IndexVO> selectIndexTicketBoxTop(Wrapper<UserDeliverOrder> wrapper) {
+		return getBaseMapper().selectIndexTicketBoxTop(wrapper);
+	}
+
+	@Override
+	public List<IndexVO> selectIndexTicketSiteTop(Wrapper<UserDeliverOrder> wrapper) {
+		return getBaseMapper().selectIndexTicketSiteTop(wrapper);
+	}
+	
+	
+	
+	
+	
 }

+ 44 - 1
mp-service/src/main/resources/mapper/user/UserTicketOrderMapper.xml

@@ -50,6 +50,49 @@
 		${ew.customSqlSegment}
 		GROUP BY time
 	</select>
+	
+	<!-- 统计交易实时数据列表 -->
+    <select id="selectIndexDailyInfoList" resultType="com.qs.mp.admin.domain.vo.IndexVO">
+		select 
+          DATE_FORMAT(t1.created_time, '%Y%m%d') AS time,
+          SUM(t1.pay_amt) AS payAmt,
+          SUM(IFNULL(t1.ticket_num,0)) AS 'ticketNum',
+          COUNT(DISTINCT t1.user_id) AS payUserCnt
+	     from `mp_user_ticket_order` t1
+	left join mp_channel t2 on t1.channel_id = t2.channel_id
+		${ew.customSqlSegment}
+		GROUP BY time
+	</select>
+	
+	
+	 <!-- 统计票组销售TOP10 -->
+    <select id="selectIndexTicketBoxTop" resultType="com.qs.mp.admin.domain.vo.IndexVO">
+		select a.pay_amt as payAmt,b.title
+		from (
+		select 
+          t1.box_id,
+          SUM(t1.pay_amt) AS pay_amt
+	     from `mp_user_ticket_order` t1
+	left join mp_channel t2 on t1.channel_id = t2.channel_id
+		${ew.customSqlSegment}
+		GROUP BY t1.box_id
+		ORDER BY pay_amt DESC limit 10 ) a
+		left join mp_ticket_box b on a.box_id = b.box_id
+	</select>
+	
+	<!-- 统计经销商交易额TOP10 -->
+    <select id="selectIndexTicketSiteTop" resultType="com.qs.mp.admin.domain.vo.IndexVO">
+		select a.pay_amt as payAmt,b.`name`
+		from (
+		select 
+          t1.channel_id,
+          SUM(t1.pay_amt) AS pay_amt
+	     from `mp_user_ticket_order` t1
+	left join mp_channel t2 on t1.channel_id = t2.channel_id
+		${ew.customSqlSegment}
+		GROUP BY t1.channel_id
+		ORDER BY pay_amt DESC limit 10 ) a
+		left join mp_channel b on a.channel_id = b.channel_id
+	</select>
     
-
 </mapper>