更新10.12

This commit is contained in:
许允枞 2024-10-12 18:09:59 +08:00
parent 48f29f4873
commit 95d279653d
4 changed files with 182 additions and 18 deletions

View File

@ -55,7 +55,7 @@
range-separator="至" range-separator="至"
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
@change="getStoreAmount"> @blur="getStoreAmount">
</el-date-picker> </el-date-picker>
</div> </div>
</div> </div>
@ -92,7 +92,7 @@
<div class="hui-hang"></div> <div class="hui-hang"></div>
<div class="d-s" > <div class="d-s" >
<div> <div>
<div class="h-tt" >活跃油站</div> <div class="h-tt" >数据分析</div>
<div id="ccc" style="width: 300px;height: 200px; "></div> <div id="ccc" style="width: 300px;height: 200px; "></div>
</div> </div>
<div class="h-r-ba"></div> <div class="h-r-ba"></div>

View File

@ -7,10 +7,7 @@ import com.fuint.business.order.dto.AllOrderInfoDto;
import com.fuint.business.order.entity.AllOrderInfo; import com.fuint.business.order.entity.AllOrderInfo;
import com.fuint.business.order.entity.CashierOrder; import com.fuint.business.order.entity.CashierOrder;
import com.fuint.business.order.entity.HandoverRecord; import com.fuint.business.order.entity.HandoverRecord;
import com.fuint.business.order.vo.AllOrderActivityVo; import com.fuint.business.order.vo.*;
import com.fuint.business.order.vo.AllOrderInfoUniVo;
import com.fuint.business.order.vo.AllOrderInfoVo;
import com.fuint.business.order.vo.CardBalanceChangeVo;
import com.fuint.framework.exception.BusinessCheckException; import com.fuint.framework.exception.BusinessCheckException;
import com.fuint.system.dept.vo.SysDeptVo; import com.fuint.system.dept.vo.SysDeptVo;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -153,6 +150,13 @@ public interface AllOrderInfoService {
*/ */
Map<String ,Object> getDataBoard(Map<String,String> map); Map<String ,Object> getDataBoard(Map<String,String> map);
/**
* 油站首页数据分析
* @param map
* @return
*/
List<HomeDataAnalysisVo> getDataAnalysis(Map<String, String> map);
/** /**
* 消费记录 * 消费记录
* @param page * @param page

View File

@ -32,7 +32,9 @@ import com.fuint.business.order.vo.*;
import com.fuint.business.order.vo.Excel.*; import com.fuint.business.order.vo.Excel.*;
import com.fuint.business.petrolStationManagement.entity.OilGun; import com.fuint.business.petrolStationManagement.entity.OilGun;
import com.fuint.business.petrolStationManagement.entity.OilName; 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.entity.OilTracking;
import com.fuint.business.petrolStationManagement.mapper.OilNumberMapper;
import com.fuint.business.petrolStationManagement.service.OilGunService; import com.fuint.business.petrolStationManagement.service.OilGunService;
import com.fuint.business.petrolStationManagement.service.OilNameService; import com.fuint.business.petrolStationManagement.service.OilNameService;
import com.fuint.business.petrolStationManagement.service.OilTankService; import com.fuint.business.petrolStationManagement.service.OilTankService;
@ -87,6 +89,8 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
@Resource @Resource
AllOrderInfoMapper allOrderInfoMapper; AllOrderInfoMapper allOrderInfoMapper;
@Autowired
OilNumberMapper oilNumberMapper;
@Override @Override
@ -151,6 +155,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
row = baseMapper.insert(allOrderInfo); row = baseMapper.insert(allOrderInfo);
return row; return row;
} }
// 支付通道分析 下面列表数据 // 支付通道分析 下面列表数据
public IPage<AllOrderInfoVo> getFenxiByDaili(Page page, AllOrderInfo allOrderInfo) { public IPage<AllOrderInfoVo> getFenxiByDaili(Page page, AllOrderInfo allOrderInfo) {
if (ObjectUtil.isEmpty(allOrderInfo.getDeptId())) { if (ObjectUtil.isEmpty(allOrderInfo.getDeptId())) {
@ -214,6 +219,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
return fenxiByDailiTypeBydata; return fenxiByDailiTypeBydata;
} }
// 支付通道分析 上面 统计数据 // 支付通道分析 上面 统计数据
@Override @Override
public Map<String, Object> getFenxiByDailiBydata(AllOrderInfo allOrderInfo) { public Map<String, Object> getFenxiByDailiBydata(AllOrderInfo allOrderInfo) {
@ -1617,6 +1623,8 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
@Override @Override
public Map<String, Object> getDataBoard(Map<String, String> map) { 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<>(); Map<String, Object> map1 = new HashMap<>();
// 油品销售金额 // 油品销售金额
Double oilAmount = 0.0; Double oilAmount = 0.0;
@ -1647,24 +1655,31 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
String endTime = map.get("endTime"); String endTime = map.get("endTime");
//查询会员充值信息 LambdaQueryWrapper<AllOrderInfo> queryWrapper = new LambdaQueryWrapper<AllOrderInfo>()
List<AllOrderInfo> allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>()
.eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStatus, "paid")
.eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId())
.like(AllOrderInfo::getContent, "充值") .like(AllOrderInfo::getContent, "充值");
.between(AllOrderInfo::getCreateTime, startTime, endTime)); if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
queryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime);
}
//查询会员充值信息
List<AllOrderInfo> allOrderInfos = baseMapper.selectList(queryWrapper);
//会员充值笔数 //会员充值笔数
userRechargeNum = allOrderInfos.size(); userRechargeNum = allOrderInfos.size();
//会员充值金额 //会员充值金额
userRechargeAmount = allOrderInfos.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); userRechargeAmount = allOrderInfos.stream().mapToDouble(AllOrderInfo::getPayMoney).sum();
//查询便利店信息 LambdaQueryWrapper<AllOrderInfo> proQueryWrapper = new LambdaQueryWrapper<AllOrderInfo>()
allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>()
.eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStatus, "paid")
.eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId())
.in(AllOrderInfo::getType, "2", "6") .in(AllOrderInfo::getType, "2", "6");
.between(AllOrderInfo::getCreateTime, startTime, endTime)); if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
proQueryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime);
}
//查询便利店信息
allOrderInfos = baseMapper.selectList(proQueryWrapper);
//便利店笔数 //便利店笔数
minimartNum = allOrderInfos.size(); minimartNum = allOrderInfos.size();
List<String> orderNos = allOrderInfos.stream() List<String> orderNos = allOrderInfos.stream()
@ -1683,12 +1698,16 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
} }
//查询积分商城信息 LambdaQueryWrapper<AllOrderInfo> pointQueryWrapper = new LambdaQueryWrapper<AllOrderInfo>()
allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper<AllOrderInfo>()
.eq(AllOrderInfo::getStatus, "paid") .eq(AllOrderInfo::getStatus, "paid")
.eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId()) .eq(AllOrderInfo::getStoreId, TokenUtil.getNowAccountInfo().getStoreId())
.eq(AllOrderInfo::getType, "4") .eq(AllOrderInfo::getType, "4");
.between(AllOrderInfo::getCreateTime, startTime, endTime)); if (ObjectUtil.isNotEmpty(startTime) && ObjectUtil.isNotEmpty(endTime)) {
pointQueryWrapper.between(AllOrderInfo::getCreateTime, startTime, endTime);
}
//查询积分商城信息
allOrderInfos = baseMapper.selectList(pointQueryWrapper);
pointMallNum = allOrderInfos.size(); pointMallNum = allOrderInfos.size();
pointMallAmount = allOrderInfos.stream().mapToDouble(order -> order.getPayMoney() == null ? 0 : order.getPayMoney()).sum(); pointMallAmount = allOrderInfos.stream().mapToDouble(order -> order.getPayMoney() == null ? 0 : order.getPayMoney()).sum();
map1.put("oilAmount", oilAmount); map1.put("oilAmount", oilAmount);
@ -1703,6 +1722,136 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper, All
return map1; 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 * @param payMoney
*/ */
public Double convertPayMoneyToWanYuan(Double payMoney) { public Double convertPayMoneyToWanYuan(Double payMoney) {

View File

@ -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;
}