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"> </el-date-picker> </div> </div> @@ -92,7 +92,7 @@ <div class="hui-hang"></div> <div class="d-s" > <div> - <div class="h-tt" >活跃油站</div> + <div class="h-tt" >数据分析</div> <div id="ccc" style="width: 300px;height: 200px; "></div> </div> <div class="h-r-ba"></div> 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<String ,Object> getDataBoard(Map<String,String> map); + /** + * 油站首页数据分析 + * @param map + * @return + */ + List<HomeDataAnalysisVo> getDataAnalysis(Map<String, String> 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<AllOrderInfoMapper, All @Resource AllOrderInfoMapper allOrderInfoMapper; + @Autowired + OilNumberMapper oilNumberMapper; @Override @@ -151,6 +155,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All row = baseMapper.insert(allOrderInfo); return row; } + // 支付通道分析 下面列表数据 public IPage<AllOrderInfoVo> getFenxiByDaili(Page page, AllOrderInfo allOrderInfo) { if (ObjectUtil.isEmpty(allOrderInfo.getDeptId())) { @@ -214,6 +219,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All return fenxiByDailiTypeBydata; } + // 支付通道分析 上面 统计数据 @Override public Map<String, Object> getFenxiByDailiBydata(AllOrderInfo allOrderInfo) { @@ -1617,6 +1623,8 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All @Override public Map<String, Object> getDataBoard(Map<String, String> map) { + map.put("startTime", map.get("params[beginTime]")); + map.put("endTime", map.get("params[endTime]")); Map<String, Object> map1 = new HashMap<>(); // 油品销售金额 Double oilAmount = 0.0; @@ -1647,24 +1655,31 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All String endTime = map.get("endTime"); - //查询会员充值信息 - List<AllOrderInfo> allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>() + LambdaQueryWrapper<AllOrderInfo> queryWrapper = new LambdaQueryWrapper<AllOrderInfo>() .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<AllOrderInfo> allOrderInfos = baseMapper.selectList(queryWrapper); //会员充值笔数 userRechargeNum = allOrderInfos.size(); //会员充值金额 userRechargeAmount = allOrderInfos.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); - //查询便利店信息 - allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>() + LambdaQueryWrapper<AllOrderInfo> proQueryWrapper = new LambdaQueryWrapper<AllOrderInfo>() .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<String> orderNos = allOrderInfos.stream() @@ -1683,12 +1698,16 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All } - //查询积分商城信息 - allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>() + LambdaQueryWrapper<AllOrderInfo> pointQueryWrapper = new LambdaQueryWrapper<AllOrderInfo>() .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<AllOrderInfoMapper, All return map1; } + /** + * 油站首页数据分析 + * + * @param map + * @return + */ + @Override + public List<HomeDataAnalysisVo> getDataAnalysis(Map<String, String> map) { + List<HomeDataAnalysisVo> list = new ArrayList<>(); + String startTime = map.get("startTime"); + String endTime = map.get("endTime"); + AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo(); + + + //查询所有油品 + List<OilNumber> oilNumbers = oilNumberMapper.selectList(new LambdaQueryWrapper<OilNumber>() + .eq(OilNumber::getStoreId, nowAccountInfo.getStoreId()) + .eq(OilNumber::getState, "1") + .eq(OilNumber::getIfDelete, "0")); + + LambdaQueryWrapper<OilOrder> oilOrderQuery = new LambdaQueryWrapper<OilOrder>(); + 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<OilOrder> oilOrders = oilOrderMapper.selectList(oilOrderQuery); + + //油号之间占比 + for (OilNumber oilNumber : oilNumbers) { + HomeDataAnalysisVo homeDataAnalysisVo = new HomeDataAnalysisVo(); + homeDataAnalysisVo.setName(oilNumber.getOilName()); + homeDataAnalysisVo.setType(1); + List<OilOrder> 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<AllOrderInfo> allOrderInfoLambdaQueryWrapper = new LambdaQueryWrapper<AllOrderInfo>(); + 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<AllOrderInfo> 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<AllOrderInfoMapper, All /** * 将支付金额转换为万圆 + * * @param payMoney */ public Double convertPayMoneyToWanYuan(Double payMoney) { diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/vo/HomeDataAnalysisVo.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/vo/HomeDataAnalysisVo.java new file mode 100644 index 000000000..f48734491 --- /dev/null +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/vo/HomeDataAnalysisVo.java @@ -0,0 +1,10 @@ +package com.fuint.business.order.vo; + +import lombok.Data; + +@Data +public class HomeDataAnalysisVo { + private String name; + private Double value; + private Integer type; +}