|
@@ -7,19 +7,24 @@ import com.qs.mp.admin.domain.param.IndexTicketBoxTopQueryParam;
|
|
|
import com.qs.mp.admin.domain.param.IndexTicketSiteTopQueryParam;
|
|
|
import com.qs.mp.admin.domain.vo.IndexVO;
|
|
|
import com.qs.mp.channel.domain.Channel;
|
|
|
+import com.qs.mp.channel.domain.ChannelCommission;
|
|
|
import com.qs.mp.channel.domain.ChannelOrder;
|
|
|
+import com.qs.mp.channel.service.IChannelCommissionService;
|
|
|
import com.qs.mp.channel.service.IChannelOrderService;
|
|
|
import com.qs.mp.channel.service.IChannelService;
|
|
|
import com.qs.mp.common.core.domain.AjaxResult;
|
|
|
+import com.qs.mp.common.enums.*;
|
|
|
import com.qs.mp.common.utils.DateUtils;
|
|
|
-import com.qs.mp.user.domain.UserTicketOrder;
|
|
|
-import com.qs.mp.user.service.IUserTicketOrderService;
|
|
|
-import com.qs.mp.utils.SecurityUtils;
|
|
|
+import com.qs.mp.user.domain.*;
|
|
|
+import com.qs.mp.user.domain.vo.UserCouponVO;
|
|
|
+import com.qs.mp.user.domain.vo.UserPrizeStorageVO;
|
|
|
+import com.qs.mp.user.service.*;
|
|
|
import com.qs.mp.web.controller.common.BaseApiController;
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -49,7 +54,50 @@ public class IndexMgrController extends BaseApiController {
|
|
|
@Autowired
|
|
|
private IChannelOrderService channelOrderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IChannelCommissionService commissionService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserPrizeStorageService userPrizeStorageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserCouponService userCouponService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IUserCoinLogService userCoinLogService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询实时毛利
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @PostMapping("/pay/gross")
|
|
|
+ public AjaxResult listPayGrossData(@RequestBody IndexQueryParam indeQueryParam) {
|
|
|
+ IndexQueryParam queryParam = getQueryParam(indeQueryParam);
|
|
|
|
|
|
+ List<IndexVO> list = new ArrayList<IndexVO>();
|
|
|
+ List<IndexVO> channelOrderTodayList = new ArrayList<>();
|
|
|
+
|
|
|
+ QueryWrapper<UserTicketOrder> queryWrapper1 = new QueryWrapper<>();
|
|
|
+ queryWrapper1.ge(null != queryParam && null != queryParam.getStartTime(), "t1.created_time", queryParam.getStartTime());
|
|
|
+ queryWrapper1.le(null != queryParam && null != queryParam.getEndTime(), "t1.created_time", queryParam.getEndTime());
|
|
|
+ queryWrapper1.gt("t1.`status`", 0);
|
|
|
+ list = userTicketOrderService.selectIndexDailyInfoList(queryWrapper1);
|
|
|
+
|
|
|
+ QueryWrapper<ChannelOrder> channelOrderQueryWrapper1 = new QueryWrapper<>();
|
|
|
+ channelOrderQueryWrapper1.ge(null != queryParam && null != queryParam.getStartTime(), "t1.created_time", queryParam.getStartTime());
|
|
|
+ channelOrderQueryWrapper1.le(null != queryParam && null != queryParam.getEndTime(), "t1.created_time", queryParam.getEndTime());
|
|
|
+ channelOrderQueryWrapper1.gt("t1.`status`", 0);
|
|
|
+ channelOrderQueryWrapper1.gt("t1.type" , 1);
|
|
|
+ channelOrderTodayList = channelOrderService.selectIndexChannelOrderDailyInfoList(channelOrderQueryWrapper1);
|
|
|
+ list = addPrePayOrderInfo(list, channelOrderTodayList);
|
|
|
+ for (IndexVO indexVO : list) {
|
|
|
+ IndexQueryParam queryParam1 = new IndexQueryParam();
|
|
|
+ queryParam1.setStartTime(DateUtils.parseStrToDate(indexVO.getTime(),DateUtils.YYYYMMDD));
|
|
|
+ queryParam1.setEndTime(DateUtils.getEndTimeOfNow(queryParam1.getStartTime()));
|
|
|
+ indexVO.setPayAmt(indexVO.getPayAmt() - handelCost(queryParam1));
|
|
|
+ }
|
|
|
+ return AjaxResult.success(getPayAmtList(list, queryParam));
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 查询统计交易金额
|
|
@@ -622,18 +670,25 @@ public class IndexMgrController extends BaseApiController {
|
|
|
@SuppressWarnings("unused")
|
|
|
private Map<String,Object> calcDailyInfoData(List<IndexVO> todayList, List<IndexVO> yetodayList, List<IndexVO> todaySiteList, List<IndexVO> yetodaySiteList){
|
|
|
Map<String,Object> payAmt = new HashMap<String,Object>();
|
|
|
+ Map<String,Object> realPayAmt = 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());
|
|
|
|
|
|
+ IndexQueryParam queryParam = new IndexQueryParam();
|
|
|
+ queryParam.setStartTime(DateUtils.getPreDayOfNowZero(0)); // 今天0点
|
|
|
+ queryParam.setEndTime(new Date()); // 今天
|
|
|
+
|
|
|
int todayPayAmt = 0;
|
|
|
+ int realTodayPayAmt = 0;
|
|
|
int todayPayUserCnt = 0;
|
|
|
int todayTicketNum = 0;
|
|
|
int todayNewSiteCnt = 0;
|
|
|
|
|
|
int yesterdayPayAmt = 0;
|
|
|
+ int realYesterdayPayAmt = 0;
|
|
|
int yesterdayPayUserCnt = 0;
|
|
|
int yesterdayTicketNum = 0;
|
|
|
int yesterdayNewSiteCnt = 0;
|
|
@@ -649,6 +704,11 @@ public class IndexMgrController extends BaseApiController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ Integer todayCost = handelCost(queryParam);
|
|
|
+
|
|
|
+ realTodayPayAmt = todayPayAmt - todayCost;
|
|
|
+
|
|
|
+
|
|
|
if(null != yetodayList && yetodayList.size() > 0) {
|
|
|
for(IndexVO indexVo : yetodayList) {
|
|
|
if(null != indexVo) {
|
|
@@ -659,6 +719,12 @@ public class IndexMgrController extends BaseApiController {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 昨天
|
|
|
+ queryParam.setStartTime(DateUtils.getPreDayOfNowZero(1)); // 昨天0点
|
|
|
+ queryParam.setEndTime(DateUtils.getPreDayOfNow(1)); // 今天减去24小时
|
|
|
+ Integer yesterdayCost = handelCost(queryParam);
|
|
|
+ realYesterdayPayAmt = yesterdayPayAmt - yesterdayCost;
|
|
|
+
|
|
|
if(null != todaySiteList && todaySiteList.size() > 0) {
|
|
|
for(IndexVO indexVo : todaySiteList) {
|
|
|
if(null != indexVo
|
|
@@ -679,6 +745,8 @@ public class IndexMgrController extends BaseApiController {
|
|
|
|
|
|
payAmt.put("today", todayPayAmt);
|
|
|
payAmt.put("yesterday", yesterdayPayAmt);
|
|
|
+ realPayAmt.put("realTodayPayAmt", realTodayPayAmt);
|
|
|
+ realPayAmt.put("realYesterdayPayAmt", realYesterdayPayAmt);
|
|
|
payUser.put("today", todayPayUserCnt);
|
|
|
payUser.put("yesterday", yesterdayPayUserCnt);
|
|
|
ticketNum.put("today", todayTicketNum);
|
|
@@ -688,12 +756,48 @@ public class IndexMgrController extends BaseApiController {
|
|
|
|
|
|
Map<String,Object> map = new HashMap<String,Object>();
|
|
|
map.put("payAmt", payAmt);
|
|
|
+ map.put("realPayAmt", realPayAmt);
|
|
|
map.put("payUser", payUser);
|
|
|
map.put("ticketNum", ticketNum);
|
|
|
map.put("newSite", newSite);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ private Integer handelCost(IndexQueryParam queryParam) {
|
|
|
+ // 佣金成本
|
|
|
+ List<ChannelCommission> commissions = commissionService.list(new QueryWrapper<ChannelCommission>()
|
|
|
+ .between(null != queryParam.getStartTime() && null != queryParam.getEndTime(),"created_time", queryParam.getStartTime(), queryParam.getEndTime()));
|
|
|
+ int commAmt = 0;
|
|
|
+ if (CollectionUtils.isNotEmpty(commissions)) {
|
|
|
+ commAmt = commissions.stream().mapToInt(ChannelCommission::getCommAmt).sum();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 奖品普通商品成本和盲票关联商品成本
|
|
|
+ List<UserPrizeStorageVO> allPrizeStorageGoodsList = userPrizeStorageService.listAllPrizeStorageGoodsCost(
|
|
|
+ new QueryWrapper<UserPrizeStorage>().in("t1.in_type", PrizeStorageInTypeEnum.TICKET_CASHED.getValue(), PrizeStorageInTypeEnum.TICKET_GOODS.getValue())
|
|
|
+ .eq("t1.status", PrizeStorageStatusEnum.HAS_DISTRIBUTED.getValue())
|
|
|
+ .between(null != queryParam.getStartTime() && null != queryParam.getEndTime(), "t1.created_time", queryParam.getStartTime(), queryParam.getEndTime()));
|
|
|
+ int allPrizeStorageGoodsCost = allPrizeStorageGoodsList.stream().mapToInt(UserPrizeStorageVO::getCost).sum();
|
|
|
+
|
|
|
+ // 奖品优惠劵成本
|
|
|
+ List<UserCouponVO> userCouponVOS = userCouponService.listUserCouponVO(
|
|
|
+ new QueryWrapper<UserCoupon>().eq("t1.status", UserCouponStatusEnum.USED)
|
|
|
+ .between(null != queryParam.getStartTime() && null != queryParam.getEndTime(), "t1.created_time", queryParam.getStartTime(), queryParam.getEndTime()));
|
|
|
+ AtomicReference<Integer> couponCost = new AtomicReference<>(0);
|
|
|
+ userCouponVOS.forEach(u -> {
|
|
|
+ if (CouponTypeEnum.SITE_CONSUME.equals(u.getType())) {
|
|
|
+ couponCost.updateAndGet(v1 -> v1 + u.getDiscount() * (100 - u.getChannelSharedRate()) / 100);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 盲豆成本
|
|
|
+ List<UserCoinLog> userCoins = userCoinLogService.list(
|
|
|
+ new QueryWrapper<UserCoinLog>().between(null != queryParam.getStartTime() && null != queryParam.getEndTime(), "created_time", queryParam.getStartTime(), queryParam.getEndTime()));
|
|
|
+ int userCoinCost = userCoins.stream().filter(c -> c.getLogMoney() > 0 && c.getType().getValue().equals(CoinLogTypeEnum.PRIZE.getValue())).mapToInt(UserCoinLog::getLogMoney).sum() * 10;
|
|
|
+
|
|
|
+ return commAmt + allPrizeStorageGoodsCost + couponCost.get() + userCoinCost;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询统计统计票组销售TOP10
|
|
|
* @return
|