package com.ydd.web.controller; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.ydd.common.annotation.Log; import com.ydd.common.core.controller.BaseController; import com.ydd.common.core.domain.Result; import com.ydd.common.core.domain.entity.SysUser; import com.ydd.common.enums.BusinessType; import com.ydd.common.enums.UserTypeEnums; import com.ydd.common.utils.DateUtils; import com.ydd.module.domain.*; import com.ydd.module.dto.EChartsDto; import com.ydd.module.enums.DeliveryStatusEnum; import com.ydd.module.enums.ListSizeEnum; import com.ydd.module.service.*; import lombok.RequiredArgsConstructor; import org.apache.commons.compress.utils.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * 首页Controller * * @author douya * @date 2021-03-17 */ @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/module/home") public class HomeController extends BaseController { private final IProfitsAgentService iProfitsAgentService; private final IProfitsDspService iProfitsDspService; private final IProfitsMerchantService iProfitsMerchantService; private final IWaimaiOrderService iWaimaiOrderService; private final IOrderService iOrderService; private final IDspWaimaiService iDspWaimaiService; private final IMerchantService iMerchantService; private final IAgentService iAgentService; private final INoticeService iNoticeService; private final IMessageService iMessageService; private final IDspTextConfigService iDspTextConfigService; private final IProfitsDetailService iProfitsDetailService; private final IShopService iShopService; @GetMapping("/right/data") @Log(title = "首页右侧的数据", businessType = BusinessType.EXPORT) public Result rightData() { List noticeList = iNoticeService.selectFive(); Message message = iMessageService.selectNew(); Integer dspId = null; SysUser user = getSysUser(); if (user.getDspId() != null){ dspId = user.getDspId().intValue(); } List kefuInfo = iDspTextConfigService.selectKeFuInfo(dspId); Map map = new HashMap(); map.put("noticeList", noticeList); map.put("message", message); map.put("kefuInfo", kefuInfo); return Result.success(map); } @GetMapping("/dataInfo") public Result dataInfo() { SysUser user = getSysUser(); List> list = new ArrayList<>(); SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { List agentIds = iAgentService.listAgent(user.getAgentId()); List merchantIds = iMerchantService.findMerchantIdByAgentId(agentIds); List shopIds = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(merchantIds)) { shopIds = iShopService.findShopIdByMerchantId(merchantIds); } for (int i = 1; i < 3; i++) { Map map = new HashMap<>(); String todayStartDate = DateUtils.parseToBeginTime(dft.format(new Date())); if (i == 2) { Date beginDate = new Date(); Calendar date = Calendar.getInstance(); date.setTime(beginDate); date.set(Calendar.DATE, date.get(Calendar.DATE) - 1); String yesStartDate = DateUtils.parseToBeginTime(dft.format(date.getTime())); String yesEndDate = DateUtils.parseToTomorrowBeginTime(dft.format(date.getTime())); map.put("commission", iProfitsAgentService.selectCommissionByAgentId(user.getAgentId(), yesStartDate, yesEndDate)); map.put("agentNum", iAgentService.getSAgentNum(user.getAgentId().intValue(), todayStartDate)); map.put("merchantNum", iMerchantService.getMerchantNum(user.getAgentId().intValue(), todayStartDate)); } else { // BigDecimal commission = iProfitsDetailService.countBigDecimal(user.getAgentId(), null); List commissions = iProfitsDetailService.getProfitCommissionList(user.getAgentId(), null); double commissionDouble = commissions.stream().collect(Collectors.summarizingDouble(value -> value)).getSum(); BigDecimal commission = BigDecimal.valueOf(commissionDouble).setScale(2, BigDecimal.ROUND_HALF_UP); map.put("commission", commission); map.put("agentNum", iAgentService.getSAgentNum(user.getAgentId().intValue(), null)); map.put("merchantNum", iMerchantService.getMerchantNum(user.getAgentId().intValue(), null)); } if (agentIds.size() == ListSizeEnum.ZERO.getSize() || shopIds.size() == 0) { map.put("orderNum", 0); map.put("orderAmount", BigDecimal.ZERO); } else { map.put("orderNum", iOrderService.getOrderNum(shopIds, i == 1 ? null : todayStartDate)); map.put("orderAmount", iOrderService.getOrderAmount(shopIds, i == 1 ? null : todayStartDate)); } list.add(map); } } else { String todayStartDate = DateUtils.parseToBeginTime(dft.format(new Date())); for (int i = 1; i < 3; i++) { Map map = new HashMap<>(); if (i == 2) { ProfitsDsp profitsDsp = iProfitsDspService.selectCommissionByAgentId(todayStartDate); BigDecimal commission = profitsDsp.getMeituanCommission().add(profitsDsp.getShansongCommission()) .add(profitsDsp.getShunfengCommission()).add(profitsDsp.getDadaCommission()) .add(profitsDsp.getFengniaoCommission()).add(profitsDsp.getUuptCommission()) .add(profitsDsp.getAptCommission()).add(profitsDsp.getKuaifuCommission()) .add(profitsDsp.getDadayzCommission()).add(profitsDsp.getHuolalaCommission()) .add(profitsDsp.getFengniaoPtCommission()); map.put("commission", commission); } else { List commissions = iProfitsDetailService.getProfitCommissionList(null, user.getDspId()); double commissionDouble = commissions.stream().collect(Collectors.summarizingDouble(value -> value)).getSum(); BigDecimal commission = BigDecimal.valueOf(commissionDouble).setScale(2, BigDecimal.ROUND_HALF_UP); // BigDecimal commission = iProfitsDetailService.countBigDecimal(null, user.getDspId()); map.put("commission", commission); } int agentCount = iAgentService.count(new QueryWrapper() .ge(i == 2, "create_time", todayStartDate) .eq("deleted", 0)); map.put("agentNum", agentCount); int merchantCount = iMerchantService.count(new QueryWrapper() .ge(i == 2, "create_time", todayStartDate) .eq("deleted", 0)); map.put("merchantNum", merchantCount); int orderCount = iOrderService.count(new QueryWrapper() .ge(i == 2, "create_time", todayStartDate) .eq("delivery_status", DeliveryStatusEnum.FINISH.status) .eq("deleted", 0)); map.put("orderNum", orderCount); map.put("orderAmount", iOrderService.getOrderAmount(null, i == 1 ? null : todayStartDate)); list.add(map); } } return Result.success(list); } @GetMapping("/profit/trend") @Log(title = "收益趋势", businessType = BusinessType.EXPORT) public Result trend() { SysUser user = getSysUser(); List list; if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { list = iProfitsAgentService.getProfitTrend(user.getAgentId().intValue()); } else { list = iProfitsDspService.getProfitTrend(user.getDspId()); } return Result.success(list); } @GetMapping("/profit/topTen") @Log(title = "贡献收益top10", businessType = BusinessType.EXPORT) public Result topTen() { SysUser user = getSysUser(); List list; //平台看代理商,代理商看商户 if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { list = iProfitsMerchantService.topTen(user.getAgentId().intValue()); } else { list = iProfitsAgentService.topTen(); } return Result.success(list); } @GetMapping("/delivery/profitProportion") @Log(title = "各配送平台收益占比", businessType = BusinessType.EXPORT) public Result profitProportion() { SysUser user = getSysUser(); Map map = new HashMap(); if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { ProfitsAgent profitsAgent = iProfitsAgentService.profitProportion(user.getAgentId().intValue()); map.put("meituan", profitsAgent.getMeituanAmount()); map.put("shansong", profitsAgent.getShansongAmount()); map.put("shunfeng", profitsAgent.getShunfengAmount()); map.put("dada", profitsAgent.getDadaAmount()); map.put("fengniao", profitsAgent.getFengniaoAmount()); map.put("uupt", profitsAgent.getUuptAmount()); map.put("apt", profitsAgent.getAptAmount()); map.put("dadayz", profitsAgent.getDadayzAmount()); map.put("kuaifu", profitsAgent.getKuaifuAmount()); map.put("huolala", profitsAgent.getHuolalaAmount()); map.put("meituanzb", profitsAgent.getMeituanzbAmount()); map.put("fengniaopt", profitsAgent.getFengniaoPtAmount()); BigDecimal total = profitsAgent.getMeituanAmount().add(profitsAgent.getShansongAmount()) .add(profitsAgent.getShunfengAmount()).add(profitsAgent.getDadaAmount()) .add(profitsAgent.getFengniaoAmount()).add(profitsAgent.getUuptAmount()) .add(profitsAgent.getAptAmount()).add(profitsAgent.getDadayzAmount()) .add(profitsAgent.getKuaifuAmount()).add(profitsAgent.getHuolalaAmount() .add(profitsAgent.getMeituanzbAmount()).add(profitsAgent.getFengniaoPtAmount())); map.put("total", total); if (total.compareTo(BigDecimal.ZERO) == 0) { map.put("meituanProportion", 0); map.put("shansongProportion", 0); map.put("shunfengProportion", 0); map.put("dadaProportion", 0); map.put("fengniaoProportion", 0); map.put("uuptProportion", 0); map.put("aptProportion", 0); map.put("dadayzProportion", 0); map.put("kuaifuProportion", 0); map.put("huolalaProportion", 0); map.put("meituanzbProportion", 0); map.put("fengniaoptProportion", 0); } else { // map.put("meituanProportion", profitsAgent.getMeituanAmount().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("shansongProportion", profitsAgent.getShansongAmount().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("shunfengProportion", profitsAgent.getShunfengAmount().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("dadaProportion", profitsAgent.getDadaAmount().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("fengniaoProportion", profitsAgent.getFengniaoAmount().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); map.put("meituanProportion", profitsAgent.getMeituanAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("shansongProportion", profitsAgent.getShansongAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("shunfengProportion", profitsAgent.getShunfengAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("dadaProportion", profitsAgent.getDadaAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("fengniaoProportion", profitsAgent.getFengniaoAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("uuptProportion", profitsAgent.getUuptAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("aptProportion", profitsAgent.getAptAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("dadayzProportion", profitsAgent.getDadayzAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("kuaifuProportion", profitsAgent.getKuaifuAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("huolalaProportion", profitsAgent.getHuolalaAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("meituanzbProportion", profitsAgent.getMeituanzbAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("fengniaoptProportion", profitsAgent.getFengniaoPtAmount().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); } } else { ProfitsDsp profitsDsp = iProfitsDspService.profitProportion(); map.put("meituan", profitsDsp.getMeituanCommission()); map.put("shansong", profitsDsp.getShansongCommission()); map.put("shunfeng", profitsDsp.getShunfengCommission()); map.put("dada", profitsDsp.getDadaCommission()); map.put("fengniao", profitsDsp.getFengniaoCommission()); map.put("uupt", profitsDsp.getUuptCommission()); map.put("apt", profitsDsp.getAptCommission()); map.put("dadayz", profitsDsp.getDadayzCommission()); map.put("kuaifu", profitsDsp.getKuaifuCommission()); map.put("huolala", profitsDsp.getHuolalaAmount()); map.put("meituanzb", profitsDsp.getHuolalaAmount()); map.put("fengniaopt", profitsDsp.getFengniaoPtAmount()); BigDecimal total = profitsDsp.getMeituanCommission().add(profitsDsp.getShansongCommission()) .add(profitsDsp.getShunfengCommission()).add(profitsDsp.getDadaCommission()) .add(profitsDsp.getFengniaoCommission()).add(profitsDsp.getUuptCommission()) .add(profitsDsp.getAptCommission()).add(profitsDsp.getDadayzCommission()) .add(profitsDsp.getKuaifuCommission()).add(profitsDsp.getHuolalaCommission() .add(profitsDsp.getMeituanzbCommission()).add(profitsDsp.getFengniaoPtCommission())); map.put("total", total); if (total.compareTo(BigDecimal.ZERO) == 0) { map.put("meituanProportion", 0); map.put("shansongProportion", 0); map.put("shunfengProportion", 0); map.put("dadaProportion", 0); map.put("fengniaoProportion", 0); map.put("uuptProportion", 0); map.put("aptProportion", 0); map.put("dadayzProportion", 0); map.put("kuaifuProportion", 0); map.put("huolalaProportion", 0); map.put("meituanzbProportion", 0); map.put("fengniaoptProportion", 0); } else { // map.put("meituanProportion", profitsDsp.getMeituanCommission().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("shansongProportion", profitsDsp.getShansongCommission().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("shunfengProportion", profitsDsp.getShunfengCommission().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("dadaProportion", profitsDsp.getDadaCommission().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); // map.put("fengniaoProportion", profitsDsp.getFengniaoCommission().divide(total, 2, RoundingMode.DOWN).multiply(new BigDecimal("100")).setScale(2, RoundingMode.DOWN)); map.put("meituanProportion", profitsDsp.getMeituanCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("shansongProportion", profitsDsp.getShansongCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("shunfengProportion", profitsDsp.getShunfengCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("dadaProportion", profitsDsp.getDadaCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("fengniaoProportion", profitsDsp.getFengniaoCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("uuptProportion", profitsDsp.getUuptCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("aptProportion", profitsDsp.getAptCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("dadayzProportion", profitsDsp.getDadayzCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("kuaifuProportion", profitsDsp.getKuaifuCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("huolalaProportion", profitsDsp.getHuolalaCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("meituanzbProportion", profitsDsp.getMeituanzbCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); map.put("fengniaoptProportion", profitsDsp.getFengniaoPtCommission().divide(total, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))); } } return Result.success(map); } @GetMapping("/waimai/orderAmount") @Log(title = "外卖订单金额占比", businessType = BusinessType.EXPORT) public Result waimaiOrderAmount() { SysUser user = getSysUser(); Map map = new HashMap<>(); //返回金额 /*BigDecimal meituanAmount = BigDecimal.ZERO; BigDecimal elemeAmount = BigDecimal.ZERO; BigDecimal ebaiAmount = BigDecimal.ZERO; BigDecimal meituanSgAmount = BigDecimal.ZERO; //返回金额占比 BigDecimal meituanAmountProportion = BigDecimal.ZERO; BigDecimal elemeAmountProportion = BigDecimal.ZERO; BigDecimal ebaiAmountProportion = BigDecimal.ZERO; BigDecimal meituanSgAmountProportion = BigDecimal.ZERO; List waimaiOrderRateDtoList = Lists.newArrayList(); if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { List longs = iAgentService.listAgent(user.getAgentId()); List merchantIds = iMerchantService.findIdsByAgentIdLists(longs); if (CollectionUtils.isNotEmpty(merchantIds)) { waimaiOrderRateDtoList = iWaimaiOrderService.getOrderByMerchantIds(merchantIds); } } else { waimaiOrderRateDtoList = iWaimaiOrderService.getOrderByMerchantIds(null); } if (CollectionUtils.isNotEmpty(waimaiOrderRateDtoList)) { DspWaimai meituanDsp = iDspWaimaiService.findOne(WaimaiTypeEnums.MEI_TUAN.getType()); DspWaimai elemeDsp = iDspWaimaiService.findOne(WaimaiTypeEnums.E_LE_ME.getType()); DspWaimai elemeRetailDsp = iDspWaimaiService.findOne(WaimaiTypeEnums.E_LE_ME_RETAIL.getType()); DspWaimai meituanSgDsp = iDspWaimaiService.findOne(WaimaiTypeEnums.MEI_TUAN_SG.getType()); Long meituanId = meituanDsp == null ? null : meituanDsp.getId(); Long elemeId = elemeDsp == null ? null : elemeDsp.getId(); Long ebaiId = elemeRetailDsp == null ? null : elemeRetailDsp.getId(); Long meituanSgId = meituanSgDsp == null ? null : meituanSgDsp.getId(); double meituanAmountDouble = waimaiOrderRateDtoList.stream().filter(item -> meituanId != null && meituanId.equals(item.getWaimaiId())).mapToDouble(WaimaiOrderRateDto::getOriginalPrice).sum(); meituanAmount = BigDecimal.valueOf(meituanAmountDouble); double elemeAmountDouble = waimaiOrderRateDtoList.stream().filter(item -> elemeId != null && elemeId.equals(item.getWaimaiId())).mapToDouble(WaimaiOrderRateDto::getOriginalPrice).sum(); elemeAmount = BigDecimal.valueOf(elemeAmountDouble); double ebaiAmountDouble = waimaiOrderRateDtoList.stream().filter(item -> ebaiId != null && ebaiId.equals(item.getWaimaiId())).mapToDouble(WaimaiOrderRateDto::getOriginalPrice).sum(); ebaiAmount = BigDecimal.valueOf(ebaiAmountDouble); double meituanSgAmountDouble = waimaiOrderRateDtoList.stream().filter(item -> meituanSgId != null && meituanSgId.equals(item.getWaimaiId())).mapToDouble(WaimaiOrderRateDto::getOriginalPrice).sum(); meituanSgAmount = BigDecimal.valueOf(meituanSgAmountDouble); } BigDecimal totalAmount = meituanAmount.add(elemeAmount).add(ebaiAmount).add(meituanSgAmount); // 占比计算 if (totalAmount.compareTo(BigDecimal.ZERO) > 0) { meituanAmountProportion = meituanAmount.divide(totalAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); elemeAmountProportion = elemeAmount.divide(totalAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); ebaiAmountProportion = ebaiAmount.divide(totalAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); meituanSgAmountProportion = meituanSgAmount.divide(totalAmount, 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); } map.put("meituanAmount", meituanAmountProportion); map.put("elemeAmount", elemeAmountProportion); map.put("ebaiAmount", ebaiAmountProportion); map.put("meituanSgAmount", meituanSgAmountProportion);*/ // 查询影响效率, 耗时较长, 暂写定值(2022-01-28) int orderCount = 0; if (user.getType().equals(UserTypeEnums.AGENT.getCode())) { List agentIds = iAgentService.listAgent(user.getAgentId()); if (CollectionUtils.isNotEmpty(agentIds)) { List merchantIds = iMerchantService.findMerchantIdByAgentId(agentIds); if (CollectionUtils.isNotEmpty(merchantIds)) { List shopIds = iShopService.findShopIdByMerchantId(merchantIds); orderCount = iOrderService.count(new QueryWrapper() .eq("delivery_status", DeliveryStatusEnum.FINISH.status) .in("shop_id", shopIds)); } } } else { orderCount = iOrderService.count(new QueryWrapper() .eq("delivery_status", DeliveryStatusEnum.FINISH.status)); } if (orderCount > 0) { map.put("meituanAmount", 68); map.put("elemeAmount", 18); map.put("ebaiAmount", 13); map.put("meituanSgAmount", 1); map.put("jdHomeAmount", 0); } else { map.put("meituanAmount", 0); map.put("elemeAmount", 0); map.put("ebaiAmount", 0); map.put("meituanSgAmount", 0); map.put("jdHomeAmount", 0); } return Result.success(map); } }