From 95d279653d8bc89dcb983e55d34e7a56b49c8c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E5=85=81=E6=9E=9E?= <3422692813@qq.com> Date: Sat, 12 Oct 2024 18:09:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B010.12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fuintAdmin/src/views/shopowner.vue | 4 +- .../order/service/AllOrderInfoService.java | 12 +- .../service/impl/AllOrderInfoServiceImpl.java | 174 ++++++++++++++++-- .../business/order/vo/HomeDataAnalysisVo.java | 10 + 4 files changed, 182 insertions(+), 18 deletions(-) create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/business/order/vo/HomeDataAnalysisVo.java diff --git a/fuintAdmin/src/views/shopowner.vue b/fuintAdmin/src/views/shopowner.vue index b8fe9b58e..5cc3a2a8b 100644 --- a/fuintAdmin/src/views/shopowner.vue +++ b/fuintAdmin/src/views/shopowner.vue @@ -55,7 +55,7 @@ range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" - @change="getStoreAmount"> + @blur="getStoreAmount"> @@ -92,7 +92,7 @@
-
活跃油站
+
数据分析
diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java index 01bfe795a..3260267b3 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java @@ -7,10 +7,7 @@ import com.fuint.business.order.dto.AllOrderInfoDto; import com.fuint.business.order.entity.AllOrderInfo; import com.fuint.business.order.entity.CashierOrder; import com.fuint.business.order.entity.HandoverRecord; -import com.fuint.business.order.vo.AllOrderActivityVo; -import com.fuint.business.order.vo.AllOrderInfoUniVo; -import com.fuint.business.order.vo.AllOrderInfoVo; -import com.fuint.business.order.vo.CardBalanceChangeVo; +import com.fuint.business.order.vo.*; import com.fuint.framework.exception.BusinessCheckException; import com.fuint.system.dept.vo.SysDeptVo; import org.springframework.transaction.annotation.Transactional; @@ -153,6 +150,13 @@ public interface AllOrderInfoService { */ Map getDataBoard(Map map); + /** + * 油站首页数据分析 + * @param map + * @return + */ + List getDataAnalysis(Map map); + /** * 消费记录 * @param page diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java index 402ebcbaf..152da2055 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java @@ -32,7 +32,9 @@ import com.fuint.business.order.vo.*; import com.fuint.business.order.vo.Excel.*; import com.fuint.business.petrolStationManagement.entity.OilGun; import com.fuint.business.petrolStationManagement.entity.OilName; +import com.fuint.business.petrolStationManagement.entity.OilNumber; import com.fuint.business.petrolStationManagement.entity.OilTracking; +import com.fuint.business.petrolStationManagement.mapper.OilNumberMapper; import com.fuint.business.petrolStationManagement.service.OilGunService; import com.fuint.business.petrolStationManagement.service.OilNameService; import com.fuint.business.petrolStationManagement.service.OilTankService; @@ -87,6 +89,8 @@ public class AllOrderInfoServiceImpl extends ServiceImpl getFenxiByDaili(Page page, AllOrderInfo allOrderInfo) { if (ObjectUtil.isEmpty(allOrderInfo.getDeptId())) { @@ -214,6 +219,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl getFenxiByDailiBydata(AllOrderInfo allOrderInfo) { @@ -1617,6 +1623,8 @@ public class AllOrderInfoServiceImpl extends ServiceImpl getDataBoard(Map map) { + map.put("startTime", map.get("params[beginTime]")); + map.put("endTime", map.get("params[endTime]")); Map map1 = new HashMap<>(); // 油品销售金额 Double oilAmount = 0.0; @@ -1647,24 +1655,31 @@ public class AllOrderInfoServiceImpl extends ServiceImpl allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper() + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() .eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) - .like(AllOrderInfo::getContent, "充值") - .between(AllOrderInfo::getCreateTime, startTime, endTime)); + .like(AllOrderInfo::getContent, "充值"); + if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { + queryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime); + } + + //查询会员充值信息 + List allOrderInfos = baseMapper.selectList(queryWrapper); //会员充值笔数 userRechargeNum = allOrderInfos.size(); //会员充值金额 userRechargeAmount = allOrderInfos.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); - //查询便利店信息 - allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper() + LambdaQueryWrapper proQueryWrapper = new LambdaQueryWrapper() .eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) - .in(AllOrderInfo::getType, "2", "6") - .between(AllOrderInfo::getCreateTime, startTime, endTime)); + .in(AllOrderInfo::getType, "2", "6"); + if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { + proQueryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime); + } + //查询便利店信息 + allOrderInfos = baseMapper.selectList(proQueryWrapper); //便利店笔数 minimartNum = allOrderInfos.size(); List orderNos = allOrderInfos.stream() @@ -1683,12 +1698,16 @@ public class AllOrderInfoServiceImpl extends ServiceImpl() + LambdaQueryWrapper pointQueryWrapper = new LambdaQueryWrapper() .eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) - .eq(AllOrderInfo::getType, "4") - .between(AllOrderInfo::getCreateTime, startTime, endTime)); + .eq(AllOrderInfo::getType, "4"); + if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { + pointQueryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime); + } + + //查询积分商城信息 + allOrderInfos = baseMapper.selectList(pointQueryWrapper); pointMallNum = allOrderInfos.size(); pointMallAmount = allOrderInfos.stream().mapToDouble(order -> order.getPayMoney() == null ? 0 : order.getPayMoney()).sum(); map1.put("oilAmount", oilAmount); @@ -1703,6 +1722,136 @@ public class AllOrderInfoServiceImpl extends ServiceImpl getDataAnalysis(Map map) { + List list = new ArrayList<>(); + String startTime = map.get("startTime"); + String endTime = map.get("endTime"); + AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo(); + + + //查询所有油品 + List oilNumbers = oilNumberMapper.selectList(new LambdaQueryWrapper() + .eq(OilNumber::getStoreId, nowAccountInfo.getStoreId()) + .eq(OilNumber::getState, "1") + .eq(OilNumber::getIfDelete, "0")); + + LambdaQueryWrapper oilOrderQuery = new LambdaQueryWrapper(); + oilOrderQuery.eq(OilOrder::getStoreId, nowAccountInfo.getStoreId()) + .eq(OilOrder::getUserId, nowAccountInfo.getId()) + .eq(OilOrder::getOrderStatus, "paid"); + if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { + oilOrderQuery.between(OilOrder::getCreateTime, startTime, endTime); + } + List oilOrders = oilOrderMapper.selectList(oilOrderQuery); + + //油号之间占比 + for (OilNumber oilNumber : oilNumbers) { + HomeDataAnalysisVo homeDataAnalysisVo = new HomeDataAnalysisVo(); + homeDataAnalysisVo.setName(oilNumber.getOilName()); + homeDataAnalysisVo.setType(1); + List oilList = new ArrayList<>(); + for (OilOrder oilOrder : oilOrders) { + if (oilNumber.getOilName().equals(oilOrder.getOils())) { + oilList.add(oilOrder); + } + } + DecimalFormat df = new DecimalFormat("#.00"); + String formattedResult = df.format(oilList.size()); + homeDataAnalysisVo.setValue(Double.parseDouble(formattedResult) / oilNumbers.size()); + list.add(homeDataAnalysisVo); + } + + //查询订单表 + LambdaQueryWrapper allOrderInfoLambdaQueryWrapper = new LambdaQueryWrapper(); + allOrderInfoLambdaQueryWrapper.eq(AllOrderInfo::getStoreId, nowAccountInfo.getStoreId()) + .eq(AllOrderInfo::getStoreId, nowAccountInfo.getStoreId()) + .eq(AllOrderInfo::getStatus, "paid"); + if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) { + allOrderInfoLambdaQueryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime); + } + List allOrderInfos = baseMapper.selectList(allOrderInfoLambdaQueryWrapper); + Integer oilAllOrderInfos = 0; + Integer productionAllOrderInfos = 0; + + //油品交易占比 + Double shareOfOilTransactions = 0.0; + //非油品交易占比 + Double shareOfNonOilTransactions = 0.0; + for (AllOrderInfo allOrderInfo : allOrderInfos) { + if ("1".equals(allOrderInfo.getType())) { + oilAllOrderInfos += 1; + } else if ("2".equals(allOrderInfo.getType()) || "3".equals(allOrderInfo.getType()) || "4".equals(allOrderInfo.getType()) || "5".equals(allOrderInfo.getType())) { + productionAllOrderInfos += 1; + } + } + shareOfOilTransactions = Double.parseDouble(String.valueOf(oilAllOrderInfos / (oilAllOrderInfos + productionAllOrderInfos))); + shareOfNonOilTransactions = Double.parseDouble(String.valueOf(productionAllOrderInfos / (oilAllOrderInfos + productionAllOrderInfos))); + + HomeDataAnalysisVo oilhomeDataAnalysisVo = new HomeDataAnalysisVo(); + oilhomeDataAnalysisVo.setName("油品交易占比"); + oilhomeDataAnalysisVo.setType(2); + oilhomeDataAnalysisVo.setValue(shareOfOilTransactions); + list.add(oilhomeDataAnalysisVo); + + HomeDataAnalysisVo noOilhomeDataAnalysisVo = new HomeDataAnalysisVo(); + noOilhomeDataAnalysisVo.setName("非油品交易占比"); + noOilhomeDataAnalysisVo.setType(2); + noOilhomeDataAnalysisVo.setValue(shareOfNonOilTransactions); + list.add(noOilhomeDataAnalysisVo); + + //会员充值占比 便利店交易占比 油品交易占比 积分商城交易占比 + Integer mtUser = 0; + Integer product = 0; + Integer oilRecharge = 0; + Integer pointMall = 0; + for (AllOrderInfo allOrderInfo : allOrderInfos) { + if ("3".equals(allOrderInfo.getType()) || "5".equals(allOrderInfo.getType())) { + mtUser += 1; + } else if ("2".equals(allOrderInfo.getType())) { + product += 1; + } else if ("1".equals(allOrderInfo.getType())) { + oilRecharge += 1; + } else if ("4".equals(allOrderInfo.getType())) { + pointMall += 1; + } else if ("6".equals(allOrderInfo.getType())) { + product += 1; + oilRecharge += 1; + } + } + + HomeDataAnalysisVo mtUserVo = new HomeDataAnalysisVo(); + mtUserVo.setName("会员充值占比"); + mtUserVo.setType(3); + mtUserVo.setValue(Double.parseDouble(String.valueOf(mtUser / allOrderInfos.size()))); + list.add(mtUserVo); + + HomeDataAnalysisVo productVo = new HomeDataAnalysisVo(); + productVo.setName("商品交易占比"); + productVo.setType(3); + productVo.setValue(Double.parseDouble(String.valueOf(product / allOrderInfos.size()))); + list.add(productVo); + + HomeDataAnalysisVo oilRechargeVo = new HomeDataAnalysisVo(); + oilRechargeVo.setName("油品充值占比"); + oilRechargeVo.setType(3); + oilRechargeVo.setValue(Double.parseDouble(String.valueOf(oilRecharge / allOrderInfos.size()))); + list.add(oilRechargeVo); + + HomeDataAnalysisVo pointMallVo = new HomeDataAnalysisVo(); + pointMallVo.setName("积分商城交易占比"); + pointMallVo.setType(3); + pointMallVo.setValue(Double.parseDouble(String.valueOf(pointMall / allOrderInfos.size()))); + list.add(pointMallVo); + return list; + } + /** * 消费记录 * @@ -1823,6 +1972,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl