主页的数据统计

This commit is contained in:
wangh 2023-12-18 17:42:52 +08:00
parent 6e233b3f6a
commit 026b7e6d0b
19 changed files with 1082 additions and 168 deletions

View File

@ -0,0 +1,68 @@
import request from '@/utils/request'
// 流水统计
export function turnoverStatisticsApi(query) {
return request({
url: 'business/oilOrder/turnoverStatistics',
method: 'get',
params: query
})
}
// 员工销售
export function employeeSalesApi(query) {
return request({
url: 'business/oilOrder/employeeSales',
method: 'get',
params: query
})
}
// 储值卡销售额
export function prepaidCardSalesApi(query) {
return request({
url: 'business/oilOrder/prepaidCardSales',
method: 'get',
params: query
})
}
// 屯油卡销售
export function tunFuelCardSalesApi(query) {
return request({
url: 'business/oilOrder/tunFuelCardSales',
method: 'get',
params: query
})
}
// 商品销售额
export function merchandiseSalesApi(query) {
return request({
url: 'business/oilOrder/merchandiseSales',
method: 'get',
params: query
})
}
// 油品销售额
export function oilSalesApi(query) {
return request({
url: 'business/oilOrder/oilSales',
method: 'get',
params: query
})
}
// 各油品销售额
export function salesByOilProductApi(query) {
return request({
url: 'business/oilOrder/salesByOilProduct',
method: 'get',
params: query
})
}

View File

@ -2,17 +2,20 @@
<div class="center" >
<div class="left-box">
<div class="but-box">
<div class="hui"><span class="title-hei">各油品销售额</span> <span>15天交易金额总计</span><span class="title-lan">79701</span> <span></span> </div>
<div class="hui"><span class="title-hei">各油品销售额</span>
<!-- <span>15天交易金额总计</span><span class="title-lan">79701</span> <span></span> -->
</div>
<div >
<el-radio-group v-model="radio" size="mini">
<el-radio-button label="周"></el-radio-button>
<el-radio-button label="月"></el-radio-button>
<el-radio-button label="年"></el-radio-button>
<el-radio-group v-model="radio" @change="getSalesByOilProduct()" size="mini">
<el-radio-button label="week">
</el-radio-button>
<el-radio-button label="month"></el-radio-button>
<el-radio-button label="year"></el-radio-button>
</el-radio-group>
</div>
</div>
<div id="chart" style="width: 100%; height: 400px;"></div>
<div v-loading="Loading" id="chart" style="width: 100%; height: 400px;"></div>
</div>
</div>
@ -20,18 +23,45 @@
<script>
import echarts from "echarts";
import { salesByOilProductApi } from "@/api/indexStatistics";
import { parseTime } from "@/utils/fuint"
export default {
name: "centenrindex",
data(){
return{
radio:'周'
radio:'week',
data:[],
rowData:[],
Loading :false,
}
},
mounted() {
this.initChart()
},
created() {
this.getSalesByOilProduct()
},
methods:{
getSalesByOilProduct() {
this.Loading = true
salesByOilProductApi({type: this.radio}).then(res=>{
this.data = res.data
this.rowData = []
for (let i = 0; i<res.data.length ; i++) {
let series = { type: 'bar', barCategoryGap: '40%' }
this.rowData.push(series)
}
this.initChart()
this.Loading = false
})
},
initChart() {
const chart = echarts.init(document.getElementById('chart'))
@ -52,21 +82,11 @@ export default {
legend: {},
tooltip: {},
dataset: {
source: [
['product', '#92', '#95', '#98'],
['2023.1.1', 50, 85.8, 93.7],
['2023.2.1', 83.1, 73.4, 55.1],
['2023.3.1', 86.4, 65.2, 82.5],
['2023.4.1', 72.4, 53.9, 39.1],
['2023.5.1', 72.4, 53.9, 39.1],
['2023.6.1', 72.4, 53.9, 39.1]
]
source: this.data
},
xAxis: { type: 'category' },
yAxis: {},
// Declare several bar series, each will be mapped
// to a column of dataset.source by default.
series: [{ type: 'bar', barCategoryGap: '40%' }, { type: 'bar', barCategoryGap: '40%' }, { type: 'bar', barCategoryGap: '40%' }]
series: this.rowData
};
chart.setOption(option)

View File

@ -5,31 +5,34 @@
<div class="hui"><span class="title-hei">油站商品交易笔数</span> </div>
<div >
<el-radio-group v-model="radio" size="mini">
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-group @change="getMerchandiseSales()" v-model="goodsRadio" size="mini">
<el-radio-button label="7天"></el-radio-button>
<el-radio-button label="15天"></el-radio-button>
<el-radio-button label="30天"></el-radio-button>
</el-radio-group>
</div>
</div>
<div><span>15交易金额总计</span><span class="title-lan">79701</span> <span></span></div>
<div id="charts" style="width: 100%; height: 400px;"></div>
<div><span>{{ goodsRadio }}交易金额总计</span><span class="title-lan">{{ goodsSum }}</span> <span></span></div>
<div v-loading="goodsLoading" id="charts" style="width: 100%; height: 400px;"></div>
</div>
<div class="left-box">
<div class="but-box">
<div class="hui"><span class="title-hei">油站油品交易笔数</span> </div>
<div class="hui"><span class="title-hei">油站储值卡交易笔数</span> </div>
<div >
<el-radio-group v-model="radio" size="mini">
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-group @change="getPrepaidCardSales()" v-model="cardRadio" size="mini">
<el-radio-button label="7天"></el-radio-button>
<el-radio-button label="15天"></el-radio-button>
<el-radio-button label="30天"></el-radio-button>
</el-radio-group>
</div>
</div>
<div><span>15交易金额总计</span><span class="title-lan">79701</span> <span></span></div>
<div id="chartx" style="width: 100%; height: 400px;"></div>
<div><span>{{ cardRadio }}交易金额总计</span><span class="title-lan">{{ cardSum }}</span> <span></span></div>
<div v-loading="cardLoading" id="chartx" style="width: 100%; height: 400px;"></div>
</div>
</div>
@ -37,19 +40,132 @@
<script>
import echarts from "echarts";
import { merchandiseSalesApi,prepaidCardSalesApi,tunFuelCardSalesApi } from "@/api/indexStatistics";
import { parseTime } from "@/utils/fuint"
export default {
name: "bottomindex",
data(){
return{
radio:'周'
goodsRadio:'7天',
cardRadio:'7天',
goodsSum:0,
cardSum:0,
//
goodsTimeDate:[],
goodsDate:[],
cardTimeDate:[],
cardDate:[],
// goodsTimeDate:[],
fuelDate:[],
goodsLoading:false,
cardLoading:false
}
},
mounted() {
this.initChart()
this.initChartwo()
},
created() {
this.getMerchandiseSales()
this.getPrepaidCardSales()
// this.getTunFuelCardSales()
},
methods:{
//
getMerchandiseSales() {
this.goodsLoading=true,
merchandiseSalesApi().then(res=>{
if (res.code === 200) {
this.goodsTimeDate=[]
this.goodsDate=[]
this.goodsSum = 0
let dataList = res.data
if (this.goodsRadio === '7天' && dataList.length >= 7) {
dataList = dataList.slice(0, 7);
} else if (this.goodsRadio === '15天' && dataList.length >= 15) {
dataList = dataList.slice(0, 15);
} else if (this.goodsRadio === '30天' && dataList.length >= 30) {
dataList = dataList.slice(0, 30);
}
dataList.forEach(element => {
this.goodsTimeDate.push(parseTime(element.sales_day,'{y}-{m}-{d}'));
this.goodsDate.push(element.total_sales);
this.goodsSum+=element.total_sales
});
this.initChart()
this.goodsLoading = false
// this.changeLabel();
}
})
},
//
getPrepaidCardSales() {
this.cardLoading=true
prepaidCardSalesApi().then(res=>{
if (res.code === 200) {
this.cardTimeDate=[]
this.cardDate=[]
this.cardSum = 0
let dataList = res.data
if (this.cardRadio === '7天' && dataList.length >= 7) {
dataList = dataList.slice(0, 7);
} else if (this.cardRadio === '15天' && dataList.length >= 15) {
dataList = dataList.slice(0, 15);
} else if (this.cardRadio === '30天' && dataList.length >= 30) {
dataList = dataList.slice(0, 30);
}
dataList.forEach(element => {
this.cardTimeDate.push(parseTime(element.sales_day,'{y}-{m}-{d}'));
this.cardDate.push(element.total_sales);
this.cardSum+=element.total_sales
});
this.getTunFuelCardSales()
// this.changeLabel();
}
})
},
//
getTunFuelCardSales() {
tunFuelCardSalesApi().then(res=>{
if (res.code === 200) {
this.fuelDate=[]
// this.cardSum = 0
let dataList = res.data
if (this.cardRadio === '7天' && dataList.length >= 7) {
dataList = dataList.slice(0, 7);
} else if (this.cardRadio === '15天' && dataList.length >= 15) {
dataList = dataList.slice(0, 15);
} else if (this.cardRadio === '30天' && dataList.length >= 30) {
dataList = dataList.slice(0, 30);
}
dataList.forEach(element => {
this.fuelDate.push(element.total_sales);
this.cardSum+=element.total_sales
});
this.initChartwo()
// this.changeLabel();
this.cardLoading=false
}
})
},
initChart() {
const chart = echarts.init(document.getElementById('charts'))
@ -59,28 +175,35 @@ export default {
'#86E1BB',
'#8195F5',
],
legend: {
orient: 'horizontal',
x: 'left',
y: 'top',
data: ['猜想','预期','实际']
},
xAxis: {
type: 'category',
data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
// data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
data: this.goodsTimeDate
},
yAxis: {
type: 'value'
},
series: [
{
data: [250, 230, 224, 218, 135, 147, 260],
data: this.goodsDate,
type: 'line'
},
{
data: [210, 230, 264, 318, 235, 247, 360],
// {
// data: [210, 230, 264, 318, 235, 247, 360],
type: 'line'
},
{
data: [120, 220, 214, 118, 235, 227, 110],
type: 'line'
}
// type: 'line'
// },
// {
// data: [120, 220, 214, 118, 235, 227, 110],
// type: 'line'
// }
]
};
@ -93,30 +216,28 @@ export default {
color: [
'#77A8F9',
'#86E1BB',
'#8195F5',
// '#8195F5',
],
xAxis: {
type: 'category',
data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
data: this.cardTimeDate
},
yAxis: {
type: 'value'
},
series: [
{
data: [250, 230, 224, 218, 135, 147, 140],
data: this.cardDate,
type: 'line'
},
{
data: [210, 230, 264, 318, 235, 247, 160],
data: this.fuelDate,
type: 'line'
},
{
data: [120, 220, 214, 118, 235, 227, 110],
type: 'line'
}
// {
// data: [120, 220, 214, 118, 235, 227, 110],
// type: 'line'
// }
]
};

View File

@ -1,58 +1,148 @@
<template>
<div class="center" >
<div class="left-box">
<div class="but-box">
<div class="hui"><span class="title-hei">储值卡销售额</span> </div>
<div class="hui"><span class="title-hei">油品销售额</span> </div>
<div >
<el-radio-group v-model="radio" size="mini">
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-button label=""></el-radio-button>
<el-radio-group @change="getOilSales()" v-model="radio" size="mini">
<el-radio-button label="7天"></el-radio-button>
<el-radio-button label="15天"></el-radio-button>
<el-radio-button label="30天"></el-radio-button>
</el-radio-group>
</div>
</div>
<div><span>15天交易金额总计</span><span class="title-lan">79801</span> <span></span></div>
<div id="ccccc" style="width: 100%; height: 400px;"></div>
<div><span>{{radio}}交易金额总计</span><span class="title-lan">{{sum}}</span> <span></span></div>
<div v-loading="oilLoading" id="ccccc" style="width: 100%; height: 400px;"></div>
</div>
<div class="right-box">
<div class="title-hei">员工销售排行</div>
<div class="four-box">
<div class="pm">排名</div>
<div class="mc">员工名称</div>
<div class="xs">销售笔数</div>
<div class="xse">销售额()</div>
<div class="xs">储值卡销售额</div>
<div class="xs">屯油卡销售额</div>
<div class="xs">油品销售额</div>
<div class="xse">总销售额()</div>
</div>
<div class="four-boxx" v-for="(item,index) in 10" key="index">
<template v-loading="employeLoading" >
<div class="four-boxx" v-for="(item,index) in employeList" :key="index" >
<div class="pm">{{index+1}}</div>
<div class="dis">
<div class="touxiang">
<img src="../../../src/assets/images/avatar.png" class="touxiang">
</div>
<div class="name">名字</div>
<div class="name">{{item.realName}}</div>
</div>
<div class="xs">9999</div>
<div class="xse">18975</div>
<div class="xs">{{item.cardSum}}</div>
<div class="xs">{{item.fuelSum}}</div>
<div class="xs">{{item.oilSum}}</div>
<div class="xse">{{item.totalSum}}</div>
</div>
</template>
</div>
</div>
</template>
<script>
import echarts from "echarts";
import { employeeSalesApi,oilSalesApi } from "@/api/indexStatistics";
import { parseTime } from "@/utils/fuint"
export default {
name: "centenrindex",
data(){
return{
radio:'周'
radio:'7天',
oilLoading:false,
employeLoading:false,
//
timeDate:[],
oilDate:[],
sum:0,
employeList:{
}
}
},
mounted() {
this.initChart()
async mounted() {
await this.getOilSales()
// this.initChart()
},
async created() {
// this.getOilSales()
this.getEmployeList()
},
methods:{
//
async getOilSales() {
this.oilLoading = true
await oilSalesApi().then(res=>{
if (res.code === 200) {
this.timeDate=[]
this.oilDate=[]
this.sum = 0
let dataList = res.data
if (this.radio === '7天' && dataList.length >= 7) {
dataList = dataList.slice(0, 7);
} else if (this.radio === '15天' && dataList.length >= 15) {
dataList = dataList.slice(0, 15);
} else if (this.radio === '30天' && dataList.length >= 30) {
dataList = dataList.slice(0, 30);
}
dataList.forEach(element => {
this.timeDate.push(parseTime(element.sales_day,'{y}-{m}-{d}'));
this.oilDate.push(element.total_sales);
this.sum+=element.total_sales
});
this.initChart()
// this.changeLabel();
this.oilLoading = false
}
})
},
getEmployeList() {
this.employeLoading = true
employeeSalesApi().then(res=>{
if(res.code == 200) {
if (res.data.length >=10) {
this.employeList = res.data.slice(0, 10);
} else {
this.employeList = res.data
}
this.employeLoading = false
}
})
},
changeLabel() {
if (this.radio === '7天' && this.timeDate.length >= 7) {
this.timeDate = this.timeDate.slice(0, 7);
this.oilDate = this.oilDate.slice(0, 7);
} else if (this.radio === '15天' && this.timeDate.length >= 15) {
this.timeDate = this.timeDate.slice(0, 15);
this.oilDate = this.oilDate.slice(0, 15);
} else if (this.radio === '30天' && this.timeDate.length >= 30) {
this.timeDate = this.timeDate.slice(0, 30);
this.oilDate = this.oilDate.slice(0, 30);
}
this.initChart()
},
initChart() {
const chart = echarts.init(document.getElementById('ccccc'))
@ -70,26 +160,27 @@ export default {
},
xAxis: {
type: 'category',
data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
// data: ['2023.1.1', '2023.2.1', '2023.3.1', '2023.4.1', '2023.5.1', '2023.6.1', '2023.7.1']
data: this.timeDate
},
yAxis: {
type: 'value'
},
series: [
{
data: [250, 230, 224, 218, 135, 147, 140],
data: this.oilDate,
type: 'line'
},
{
data: [210, 230, 264, 318, 235, 247, 160],
// {
// data: [210, 230, 264, 318, 235, 247, 160],
type: 'line'
},
{
data: [120, 220, 214, 118, 235, 227, 110],
type: 'line'
}
// type: 'line'
// },
// {
// data: [120, 220, 214, 118, 235, 227, 110],
// type: 'line'
// }
]
};

View File

@ -1,10 +1,10 @@
<template>
<div>
<div class="top-box">
<div class="top-box" v-loading="loading">
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
<!-- <el-popover
placement="top-start"
title="标题"
width="200"
@ -12,16 +12,54 @@
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
</el-popover> -->
</div>
<div class="box-size">
4023
{{ this.statisticsData.today_sum ? this.statisticsData.today_sum : 0 }}
</div>
<div class="box-but">
<div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
<div class="icon-lv2" v-if="this.statisticsData.today_sum_chain<=0">
<i v-if="this.statisticsData.today_sum_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.today_sum_chain }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.today_sum_chain }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
</div>
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本周流水总额</span>
</div>
<div class="box-size">
{{ this.statisticsData.this_week_sum?this.statisticsData.this_week_sum:0 }}
</div>
<div class="box-but">
<div class="icon-lv2" v-if="this.statisticsData.week_sum_chain<=0">
<i v-if="this.statisticsData.week_sum_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.week_sum_chain?this.statisticsData.week_sum_chain:0 }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.week_sum_chain?this.statisticsData.week_sum_chain:0 }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
@ -29,25 +67,30 @@
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
<span style="margin-right: 5px">本月流水总额</span>
</div>
<div class="box-size">
4023
{{this.statisticsData.this_month_sum}}
</div>
<div class="box-but">
<div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
<div class="icon-lv2" v-if="this.statisticsData.month_sum_chain<=0">
<i v-if="this.statisticsData.month_sum_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.month_sum_chain?this.statisticsData.month_sum_chain:0 }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.month_sum_chain?this.statisticsData.month_sum_chain:0 }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
@ -55,25 +98,26 @@
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
<span style="margin-right: 5px">本日流水笔数</span>
</div>
<div class="box-size">
4023
{{ this.statisticsData.today_count }}
</div>
<div class="box-but">
<div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
<div class="icon-lv2" v-if="this.statisticsData.today_count_chain<=0">
<i v-if="this.statisticsData.today_count_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.today_count_chain?this.statisticsData.today_count_chain:0 }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.today_count_chain?this.statisticsData.today_count_chain:0 }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
@ -81,25 +125,31 @@
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
<span style="margin-right: 5px">本周流水笔数</span>
</div>
<div class="box-size">
4023
{{ this.statisticsData.this_week_count }}
</div>
<div class="box-but">
<div class="icon-lv">
<!-- <div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
<span>{{ this.statisticsData.week_count_chain }}%</span>
</div> -->
<div class="icon-lv2" v-if="this.statisticsData.week_count_chain<=0">
<i v-if="this.statisticsData.week_count_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.week_count_chain?this.statisticsData.week_count_chain:0 }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.week_count_chain?this.statisticsData.week_count_chain:0 }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
@ -107,51 +157,31 @@
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
<span style="margin-right: 5px">本月流水笔数</span>
</div>
<div class="box-size">
4023
{{ this.statisticsData.this_month_count }}
</div>
<div class="box-but">
<div class="icon-lv">
<!-- <div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
</div>
<span>{{ this.statisticsData.month_count_chain }}%</span>
</div> -->
<div class="top-sl" >
<div class="box-title">
<span style="margin-right: 5px">本日流水总额</span>
<el-popover
placement="top-start"
title="标题"
width="200"
trigger="hover"
content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
<i class="el-icon-warning-outline" slot="reference" ></i>
</el-popover>
</div>
<div class="box-size">
4023
</div>
<div class="box-but">
<div class="icon-lv">
<i class="el-icon-bottom"></i>
<span>20.5%</span>
<div class="icon-lv2" v-if="this.statisticsData.month_count_chain<=0">
<i v-if="this.statisticsData.month_count_chain==0" class="el-icon-minus"></i>
<i v-else class="el-icon-bottom"></i>
<span>{{ this.statisticsData.month_count_chain?this.statisticsData.month_count_chain:0 }}</span>
</div>
<div class="icon-lv" v-else>
<i class="el-icon-top"></i>
<span>{{ this.statisticsData.month_count_chain?this.statisticsData.month_count_chain:0 }}</span>
</div>
<div>环比</div>
<div> <i class="el-icon-arrow-right"></i> </div>
</div>
@ -162,15 +192,50 @@
</template>
<script>
import { turnoverStatisticsApi } from "@/api/indexStatistics";
export default {
name: "topindex",
data(){
return{
loading:false,
statisticsData: {
today_count: 0,
today_sum: 0,
// yesterday_count: 0,
// yesterday_sum: 0.0,
today_count_chain: 0.0,
today_sum_chain: 0.0,
// last_month_count: 0,
// last_month_sum: 0.0,
this_month_count: 0,
this_month_sum: 0.0,
month_count_chain: 0.0,
month_sum_chain: 0.0,
// last_week_count: 0,
// last_week_sum: 0.0,
this_week_count: 0,
this_week_sum: 0.0,
week_count_chain: 0.0,
week_sum_chain: 0.0,
}
}
},
created() {
this.getDate()
},
methods:{
getDate() {
this.loading = true
turnoverStatisticsApi().then(res=>{
if (res.code == 200) {
this.statisticsData = res.data
this.loading = false
}
})
}
}
}
@ -223,4 +288,16 @@ export default {
font-size: 14px;
color: #2BA471;
}
.icon-lv2{
width: 71px;
height: 24px;
background: #f9e3e3;
border-radius: 3px 3px 3px 3px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
color: #a42b3b;
}
</style>

View File

@ -7,6 +7,7 @@ import com.fuint.business.marketingActivity.cardFule.entity.CardFuelRecord;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* 燃油充值表(CardFuelRecord)表数据库访问层
@ -92,5 +93,7 @@ public interface CardFuelRecordMapper {
*/
IPage<CardFuelRecordDTO> selectFuelRecord(@Param("page") Page page, CardFuelRecord cardFuelRecord);
Map<String, String> fuelStream(@Param("storeId") Integer storeId);
}

View File

@ -355,6 +355,32 @@
SELECT '屯油卡' AS recordName, recharge_balance rechargeBalance, income_litres obtain, create_time createTime FROM card_fuel_record
ORDER BY create_time;
</select>
<select id="fuelStream" resultType="java.util.Map">
SELECT
-- 当天的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_sum,
-- 当周的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_sum,
-- 当月的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_sum,
-- 昨天的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_sum,
-- 上周的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_sum,
-- 上个月的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_sum;
</select>
</mapper>

View File

@ -10,6 +10,7 @@ import com.fuint.business.marketingActivity.cardValue.vo.Excel.CardValueRecordEx
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 储值充值表(CardValueRecord)表数据库访问层
@ -26,6 +27,12 @@ public interface CardValueRecordMapper extends BaseMapper<CardValueRecord> {
List<CardValueRecordExcel> selectListExport(@Param("cardValueRecord") CardValueRecord cardValueRecord);
Map<String, String> cardStream(@Param("storeId") Integer storeId);
List<Map<String, String>> prepaidCardSales(@Param("storeId") Integer storeId);
List<Map<String, String>> tunFuelCardSales(@Param("storeId") Integer storeId);
}

View File

@ -123,6 +123,78 @@
</where>
</select>
<select id="cardStream" resultType="java.util.Map">
SELECT
-- 当天的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_sum,
-- 当周的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_sum,
-- 当月的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_sum,
-- 昨天的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_sum,
-- 上周的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_sum,
-- 上个月的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_sum;
</select>
<select id="prepaidCardSales" resultType="java.util.Map">
SELECT
date_range.date AS sales_day,
COALESCE(SUM(card_value_record.recharge_balance), 0) AS total_sales
FROM
(
SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS date
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) date_range
LEFT JOIN
card_value_record ON DATE(card_value_record.create_time) = date_range.date
WHERE
date_range.date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY
date_range.date
ORDER BY
date_range.date
</select>
<select id="tunFuelCardSales" resultType="java.util.Map">
SELECT
date_range.date AS sales_day,
COALESCE(SUM(card_fuel_record.recharge_balance), 0) AS total_sales
FROM
(
SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS date
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) date_range
LEFT JOIN
card_fuel_record ON DATE(card_fuel_record.create_time) = date_range.date
WHERE
date_range.date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY
date_range.date
ORDER BY
date_range.date
</select>
</mapper>

View File

@ -232,8 +232,8 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
Map<String, Object> msg = new HashMap<>();
msg.put("tag","cardTag");
msg.put("ordId",cardValueRecordDTO.getId().toString());
msg.put("ordNo",orderNo);
msg.put("orderId",cardValueRecordDTO.getId().toString());
msg.put("orderNo",orderNo);
msg.put("storeId",nowAccountInfo.getStoreId());
msg.put("chainStoreId",nowAccountInfo.getChainStoreId());

View File

@ -8,6 +8,8 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 店铺员工表 Mapper 接口
@ -36,4 +38,6 @@ public interface LJStaffMapper extends BaseMapper<LJStaff> {
*/
int auditPrem(@Param("id")Integer id,@Param("auditPrem") String auditPrem);
List<Map<String,String>> employeeSales(@Param("storeId") Integer storeId);
}

View File

@ -37,4 +37,24 @@
from mt_staff
where id = #{id} and audit_prem like concat('%', #{auditPrem}, '%')
</select>
<select id="employeeSales" resultType="java.util.Map">
SELECT
ms.id,
ms.real_name realName,
COALESCE(SUM(oo.pay_amount), 0) AS oilSum,
COALESCE(SUM(cvr.recharge_balance), 0) AS cardSum,
COALESCE(SUM(cfr.recharge_balance), 0) AS fuelSum,
COALESCE(SUM(oo.pay_amount), 0) +
COALESCE(SUM(cvr.recharge_balance), 0) +
COALESCE(SUM(cfr.recharge_balance), 0) AS totalSum
FROM
mt_staff ms
LEFT JOIN oil_order oo ON ms.id = oo.staff_id
LEFT JOIN card_value_record cvr ON ms.id = cvr.mt_staff_id
LEFT JOIN card_fuel_record cfr ON ms.id = cfr.mt_staff_id
GROUP BY
ms.id, ms.real_name
ORDER BY
totalSum DESC
</select>
</mapper>

View File

@ -159,4 +159,58 @@ public class OilOrderController extends BaseController {
public ResponseObject addOilOrder(@Validated @RequestBody OilOrder oilOrder){
return getSuccessResult(orderService.addOilOrder(oilOrder));
}
/**
* 信息统计
*/
// 流水统计
@GetMapping("turnoverStatistics")
public ResponseObject turnoverStatistics() {
return getSuccessResult(orderService.turnoverStatistics());
}
// 员工销售
@GetMapping("employeeSales")
public ResponseObject employeeSales() {
return getSuccessResult(orderService.employeeSales());
}
// 储值卡销售额
@GetMapping("prepaidCardSales")
public ResponseObject prepaidCardSales() {
return getSuccessResult(orderService.prepaidCardSales());
}
// 屯油卡销售额
@GetMapping("tunFuelCardSales")
public ResponseObject tunFuelCardSales() {
return getSuccessResult(orderService.tunFuelCardSales());
}
// 商品销售额
@GetMapping("merchandiseSales")
public ResponseObject merchandiseSales() {
return getSuccessResult(orderService.merchandiseSales());
}
// 油品销售额
@GetMapping("oilSales")
public ResponseObject oilSales() {
return getSuccessResult(orderService.oilSales());
}
// 各油品销售额
/**
* 根据传入的type判断年月周
* @param type
* @return
*/
@GetMapping("salesByOilProduct")
public ResponseObject salesByOilProduct(String type) {
return getSuccessResult(orderService.salesByOilProduct(type));
}
}

View File

@ -9,6 +9,7 @@ import com.fuint.business.order.vo.LJOrderVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* 订单信息 Mapper层
@ -26,4 +27,8 @@ public interface LJOrderMapper extends BaseMapper<LJOrder> {
IPage<LJOrderVo> getMtOrderList(Page page, @Param("order") LJOrder order);
Map<String, String> goodsStream(@Param("storeId") Integer storeId);
List<Map<String, String>> merchandiseSales(@Param("storeId") Integer storeId);
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.order.entity.OilOrder;
import com.fuint.business.order.vo.Excel.OilOrderExcel;
import com.fuint.business.order.vo.OilOrderVo;
import com.fuint.business.petrolStationManagement.entity.OilNumber;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -44,4 +45,11 @@ public interface OilOrderMapper extends BaseMapper<OilOrder> {
public Map<String, String> orderAmountStatistics(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("storeId") Integer storeId);
Map<String, String> oilStream(@Param("storeId") Integer storeId);
List<Map<String, String>> oilSales(@Param("storeId") Integer storeId);
// List<Map<String, String>> salesByOilProductByWeek(@Param("list") List<OilNumber> oilName,@Param("storeId") Integer storeId);
List<Map<String, String>> salesByOilProduct(@Param("list") List<OilNumber> oilName,@Param("storeId") Integer storeId,@Param("type") String type);
}

View File

@ -94,5 +94,52 @@
</if>
</where>
</select>
<select id="goodsStream" resultType="java.util.Map">
SELECT
-- 当天的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_sum,
-- 当周的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_sum,
-- 当月的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_sum,
-- 昨天的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_sum,
-- 上周的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_sum,
-- 上个月的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_sum;
</select>
<select id="merchandiseSales" resultType="java.util.Map">
SELECT
date_range.date AS sales_day,
COALESCE(SUM(mt_order.pay_amount), 0) AS total_sales
FROM
(
SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS date
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) date_range
LEFT JOIN
mt_order ON DATE(mt_order.create_time) = date_range.date
WHERE
date_range.date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY
date_range.date
ORDER BY
date_range.date;
</select>
</mapper>

View File

@ -162,5 +162,95 @@
</if>
</where>
</select>
<select id="oilStream" resultType="java.util.Map">
SELECT
-- 当天的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = CURDATE()) AS CHAR) AS today_sum,
-- 当周的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(CURDATE())) AS CHAR) AS this_week_sum,
-- 当月的数据和条数
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(CURDATE())) AS CHAR) AS this_month_sum,
-- 昨天的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)) AS CHAR) AS yesterday_sum,
-- 上周的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE WEEK(create_time) = WEEK(DATE_SUB(CURDATE(), INTERVAL 1 WEEK))) AS CHAR) AS last_week_sum,
-- 上个月的数据
CAST((SELECT COUNT(*) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_count,
CAST((SELECT SUM(pay_amount) FROM oil_order WHERE MONTH(create_time) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))) AS CHAR) AS last_month_sum;
</select>
<select id="oilSales" resultType="java.util.Map">
SELECT
date_range.date AS sales_day,
COALESCE(SUM(oil_order.pay_amount), 0) AS total_sales
FROM
(
SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS date
FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) date_range
LEFT JOIN
oil_order ON DATE(oil_order.create_time) = date_range.date
WHERE
date_range.date BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY
date_range.date
ORDER BY
date_range.date;
</select>
<!-- COUNT(*) AS count-->
<select id="salesByOilProduct" resultType="java.util.Map">
SELECT
<if test="type == 'week'">
CONCAT(YEAR(oo.create_time), '年第', WEEK(oo.create_time),'周') AS year_week,
</if>
<if test="type == 'month'">
CONCAT(YEAR(oo.create_time), '年', MONTH(oo.create_time),'月') AS year_week,
</if>
<if test="type == 'year'">
CONCAT(YEAR(oo.create_time), '年') AS year_week,
</if>
<foreach collection="list" item="list" separator=",">
SUM(CASE WHEN oo.oils = #{list.id} THEN oo.pay_amount ELSE 0 END) AS #{list.oilName}
</foreach>
FROM
oil_order oo
left join oil_name onn on onn.id = oo.oils
WHERE
<if test="type == 'week'">
oo.create_time >= CURDATE() - INTERVAL 6 WEEK
</if>
<if test="type == 'month'">
oo.create_time >= CURDATE() - INTERVAL 6 MONTH
</if>
<if test="type == 'year'">
oo.create_time >= CURDATE() - INTERVAL 6 YEAR
</if>
GROUP BY
YEAR(oo.create_time)
<if test="type == 'week'">
, WEEK(oo.create_time)
</if>
<if test="type == 'month'">
, MONTH(oo.create_time)
</if>
ORDER BY
year_week
</select>
</mapper>

View File

@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.fuint.business.order.entity.CashierOrder;
import com.fuint.business.order.entity.OilOrder;
import com.fuint.business.order.vo.OilOrderVo;
import com.fuint.framework.web.ResponseObject;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@ -104,4 +106,18 @@ public interface OilOrderService extends IService<OilOrder> {
* @return
*/
public int updateOilOrder(OilOrder order);
// 流水统计
Map<String, Double> turnoverStatistics();
List<Map<String, String>> employeeSales();
List<Map<String, String>> prepaidCardSales();
List<Map<String, String>> tunFuelCardSales();
List<Map<String, String>> merchandiseSales();
List<Map<String, String>> oilSales();
List<List<Object>> salesByOilProduct(String type);
}

View File

@ -14,7 +14,13 @@ import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.service.OilConfigService;
import com.fuint.business.convenienceSore.entity.LJGoods;
import com.fuint.business.convenienceSore.service.LJGoodsService;
import com.fuint.business.marketingActivity.cardFule.entity.CardFuelRecord;
import com.fuint.business.marketingActivity.cardFule.mapper.CardFuelRecordMapper;
import com.fuint.business.marketingActivity.cardValue.entity.CardValueRecord;
import com.fuint.business.marketingActivity.cardValue.mapper.CardValueRecordMapper;
import com.fuint.business.member.mapper.LJStaffMapper;
import com.fuint.business.order.entity.*;
import com.fuint.business.order.mapper.LJOrderMapper;
import com.fuint.business.order.mapper.OilOrderMapper;
import com.fuint.business.order.service.*;
import com.fuint.business.order.vo.Excel.OilOrderExcel;
@ -23,6 +29,7 @@ import com.fuint.business.petrolStationManagement.entity.OilName;
import com.fuint.business.petrolStationManagement.entity.OilNumber;
import com.fuint.business.petrolStationManagement.entity.OilTank;
import com.fuint.business.petrolStationManagement.entity.OilTracking;
import com.fuint.business.petrolStationManagement.mapper.OilNumberMapper;
import com.fuint.business.petrolStationManagement.service.OilNameService;
import com.fuint.business.petrolStationManagement.service.OilNumberService;
import com.fuint.business.petrolStationManagement.service.OilTankService;
@ -42,9 +49,14 @@ import com.fuint.system.config.service.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> implements OilOrderService {
@ -592,6 +604,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
return row;
}
@Autowired
private SysConfigService sysConfigService;
@Autowired
@ -690,4 +703,176 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
cardBalanceChangeService.insertCardBalance(cardBalanceChange);
}
@Resource
OilOrderMapper oilOrderMapper;
@Resource
LJOrderMapper ljOrderMapper;
@Resource
CardValueRecordMapper cardValueRecordMapper;
@Resource
CardFuelRecordMapper cardFuelRecordMapper;
@Resource
LJStaffMapper ljStaffMapper;
@Override
public Map<String, Double> turnoverStatistics() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
// 油品流水
Map<String, String> oilStreamMap = oilOrderMapper.oilStream(storeId);
// 商品流水
Map<String, String> goodsStreamMap = ljOrderMapper.goodsStream(storeId);
// 储值卡流水
Map<String, String> cardStreamMap = cardValueRecordMapper.cardStream(storeId);
// 屯油卡流水
Map<String, String> fuelStreamMap = cardFuelRecordMapper.fuelStream(storeId);
// 计算总流水
// sumStream
// 进行Map的合并
Map<String, Double> mergedMap = mergeMaps(
oilStreamMap,
goodsStreamMap,
cardStreamMap,
fuelStreamMap
);
// 计算对应的环比
chainMaps(mergedMap);
// 数据组装
return mergedMap;
}
// 员工统计
@Override
public List<Map<String, String>> employeeSales() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
// 员工统计油品
List<Map<String, String>> maps = ljStaffMapper.employeeSales(storeId);
return maps;
}
// 储值卡销售额
@Override
public List<Map<String, String>> prepaidCardSales() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
return cardValueRecordMapper.prepaidCardSales(storeId);
}
// 储值卡销售额
@Override
public List<Map<String, String>> tunFuelCardSales() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
return cardValueRecordMapper.tunFuelCardSales(storeId);
}
// 商品销售额
@Override
public List<Map<String, String>> merchandiseSales() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
List<Map<String, String>> maps = ljOrderMapper.merchandiseSales(storeId);
return maps;
}
// 油品销售额
@Override
public List<Map<String, String>> oilSales() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
return oilOrderMapper.oilSales(storeId);
}
@Resource
OilNumberMapper oilNumberMapper;
// 各油品销售额
@Override
public List<List<Object>> salesByOilProduct(String type) {
AccountInfo currentAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = currentAccountInfo.getStoreId();
if (ObjectUtil.isEmpty(type)) {
type = "week";
}
// 获取所有油品名称
List<OilNumber> oilNames = oilNumberMapper.getOilName(storeId);
// 构建结果列表
List<List<Object>> resultList = new ArrayList<>();
// 添加油品名称作为第一行
List<Object> headerRow = new ArrayList<>();
headerRow.add("product");
for (OilNumber oilNumber : oilNames) {
headerRow.add(oilNumber.getOilName());
}
resultList.add(headerRow);
// 获取销售数据
List<Map<String, String>> salesData = oilOrderMapper.salesByOilProduct(oilNames, storeId, type);
// 将销售数据转换为结果列表格式
for (Map<String, String> salesDataRow : salesData) {
List<Object> dataRow = new ArrayList<>();
dataRow.add(salesDataRow.get("year_week"));
for (OilNumber oilNumber : oilNames) {
dataRow.add(salesDataRow.get(oilNumber.getOilName()));
}
resultList.add(dataRow);
}
return resultList;
}
private static Map<String, Double> mergeMaps(Map<String, String>... maps) {
// 使用Stream API进行Map的合并
return Stream.of(maps)
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue() == null ? 0.0 : Double.parseDouble(entry.getValue()),
Double::sum));
}
// 环比计算 chain
private static Map<String, Double> chainMaps(Map<String, Double> maps) {
// 当天流水
maps.put("today_sum_chain",calculateTheRingComparison (maps.getOrDefault("today_sum",0.0),maps.getOrDefault("yesterday_sum",0.0)));
// 当天笔数
maps.put("today_count_chain",calculateTheRingComparison (maps.getOrDefault("today_count",0.0),maps.getOrDefault("yesterday_count",0.0)));
// 当周流水
maps.put("week_sum_chain",calculateTheRingComparison (maps.getOrDefault("this_week_sum",0.0),maps.getOrDefault("last_week_sum",0.0)));
// 当周笔数
maps.put("week_count_chain",calculateTheRingComparison (maps.getOrDefault("this_week_count",0.0),maps.getOrDefault("last_week_count",0.0)));
// 当月流水
maps.put("month_sum_chain",calculateTheRingComparison (maps.getOrDefault("this_month_sum",0.0),maps.getOrDefault("last_month_sum",0.0)));
// 当月笔数
maps.put("month_count_chain",calculateTheRingComparison (maps.getOrDefault("this_month_count",0.0),maps.getOrDefault("last_month_count",0.0)));
return maps;
}
private static Double calculateTheRingComparison(Double res, Double last) {
if (ObjectUtil.isEmpty(last) || last == 0) {
return 0.0;
}
// 计算环比增长率
double growthRate = (res - last) / last * 100;
// 使用DecimalFormat将结果格式化为两位小数
DecimalFormat decimalFormat = new DecimalFormat("#.##");
return Double.valueOf(decimalFormat.format(growthRate));
}
}