Merge remote-tracking branch 'origin/master'

# Conflicts:
#	fuintBackend/fuint-application/src/main/java/com/fuint/business/marketingActivity/activeExchange/service/impl/ActiveExchangeServiceImpl.java
This commit is contained in:
齐天大圣 2024-01-18 18:07:27 +08:00
commit 98ff3486a8
108 changed files with 2753 additions and 1028 deletions

View File

@ -16,3 +16,11 @@ export function cardValueRecordInfo(id) {
method: 'get',
})
}
// 查询会员充值统计
export function orderStatisticsApi(cardValueRecord) {
return request({
url: '/business/marketingActivity/cardValueRecord/orderStatistics',
method: 'get',
params: cardValueRecord
})
}

View File

@ -16,6 +16,7 @@ export function cashierOrder(id) {
method: 'get',
})
}
// 根据订单号查询油品订单信息
export function orderStatisticsApi(query) {
return request({
@ -24,5 +25,3 @@ export function orderStatisticsApi(query) {
params: query
})
}

View File

@ -26,3 +26,12 @@ export function getGoodsOrder(data) {
data: data,
})
}
// 查询商品订单统计
export function orderStatisticsApi(query) {
return request({
url: '/business/order/orderStatistics',
method: 'get',
params: query
})
}

View File

@ -43,3 +43,13 @@ export function getOilNameList() {
// data: data
})
}
// 查询所有油号
export function oilNumbers() {
return request({
url: '/business/petrolStationManagement/oilNumber/getOilNumber',
method: 'get',
// data: data
})
}

View File

@ -69,3 +69,14 @@ export function getOilOrderAllAmount(id) {
method: 'get',
})
}
// 订单统计
export function orderStatisticsApi(query) {
return request({
url: '/business/oilOrder/orderStatistics',
method: 'get',
params: query
})
}

View File

@ -0,0 +1,17 @@
import request from '@/utils/request'
// 退款
export function refundApi(data) {
return request({
url: '/business/allOrderInfo/refund',
method: 'post',
data: data
})
}
export function getOrderInfoApi(data) {
return request({
url: '/business/allOrderInfo/getOrderInfo',
method: 'get',
params: data
})
}

View File

@ -76,3 +76,12 @@ export function exportUsers() {
method: 'get'
})
}
//下载示例文件
export function queryUsers() {
return request({
url: '/business/userManager/user/userList',
method: 'get'
})
}

View File

@ -44,10 +44,29 @@ export function updateCommission(data) {
})
}
// 删除
// 删除工提成方案
export function delCommission(id) {
return request({
url: '/business/commission/staffCommission/' + id,
method: 'delete'
})
}
// 查询员工提成记录
export function listCommissionRecord(query) {
return request({
url: '/commissionRecord/list',
method: 'get',
params: query
})
}
// 查询员工提成总额
export function allAmountCommissionRecord(query) {
return request({
url: '/commissionRecord/allAmount',
method: 'get',
params: query
})
}

View File

@ -83,7 +83,7 @@
</el-table-column>
<el-table-column label="采购吨数(t)" align="center" prop="purchaseWeight">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.purchaseWeight" @change="change(scope.row)" controls-position="right" :min="0" :step="1" style="max-width: 100%"></el-input-number>
<el-input-number :disabled="numberInput" v-model="scope.row.purchaseWeight" @change="change(scope.row)" controls-position="right" :min="0" :step="0.01" style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column :disabled="numberInput" label="采购单价(元/吨)" align="center" prop="purchasePrice">
@ -416,8 +416,10 @@ export default {
getPurchaseOrderApi(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.orderList = response.data.records;
this.total = response.data.total;
console.log("response",response.data.records[0].purchaseWeight)
console.log("orderList",this.orderList)
//
this.sumMethod(response.data.records);
// this.sumMethod(response.data.records);
})
this.loading = false;
},
@ -456,6 +458,8 @@ export default {
//
this.orderForm.discountedPrice = new BigNumber(this.orderForm.totalAmount).dividedBy(this.orderForm.purchaseVolume).toFixed(2);
this.orderForm.totalAmount = Number(this.orderForm.totalAmount);
// id
this.orderForm.purchaseId = this.purchaseId
@ -535,6 +539,7 @@ export default {
if (data.purchaseWeight > data.canUseT) {
this.$message('不能超过油罐储存的最大值!');
data.purchaseWeight = data.canUseT
return
}
//
data.purchaseVolume = new BigNumber(data.purchaseWeight).times(1000).dividedBy(data.productDensity).toFixed(2);
@ -593,9 +598,12 @@ export default {
//
const massTons = volumeLiters.times(densityGramsPerML).times(1e-3).toFixed(2);
// const massTons = volumeLiters.times(densityGramsPerML).times(1e-3).toFixed(2);
const massTons = Math.floor(volumeLiters.times(densityGramsPerML).times(1e-3) * 100) / 100;
this.canUseT = massTons; //
// console.log("canUseT",this.tankVolume)
console.log("canUseT",this.canUseT)
},
inputPurchaseWeight() {
@ -609,10 +617,10 @@ export default {
return
}
const purchaseWeight = parseFloat(this.orderForm.purchaseWeight);
const canUseT = parseFloat(this.canUseT);
console.log("purchaseWeight",purchaseWeight)
console.log("canUseT",canUseT)
if (canUseT<=0) {
this.$message('已无可用吨数!');
this.orderForm.purchaseWeight = ''

View File

@ -1,19 +1,7 @@
<!-- 收银台订单-->
<template>
<div class="app-container">
<div>
<el-card class="box-card">
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
@ -28,7 +16,7 @@
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="queryParams.orderNo" placeholder="订单号、官方单号检索"></el-input>
<el-input v-model="queryParams.orderNo" clearable placeholder="订单号检索"></el-input>
</el-form-item>
<el-form-item label="交易时间">
<el-date-picker
@ -53,9 +41,29 @@
<span>收银台订单统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总数</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">笔数</div>
<div class="size-bole">{{ orderStatistics.numberOfStrokes?orderStatistics.numberOfStrokes:0 }}</div>
</div>
<div class="box">
<div class="size-hui">订单总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfTheOrder?orderStatistics.theTotalAmountOfTheOrder:0 }}</div>
</div>
<div class="box">
<div class="size-hui">实付总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountPaid?orderStatistics.theTotalAmountPaid:0 }}</div>
</div>
<div class="box">
<div class="size-hui">油品优惠</div>
<div class="size-bole">{{ orderStatistics.oilDiscounts?orderStatistics.oilDiscounts:0 }}</div>
</div>
<div class="box">
<div class="size-hui">油品总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfOil?orderStatistics.theTotalAmountOfOil:0 }}</div>
</div>
<div class="box">
<div class="size-hui">商品总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfTheItem?orderStatistics.theTotalAmountOfTheItem:0 }}</div>
</div>
</div>
@ -63,10 +71,9 @@
<el-card class="box-card">
<div class="wgang">
<div>收银台订单列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click = "exportExcelCashier()">导出订单</el-button>
</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click = "exportExcelCashier()">导出订单</el-button>
</div>
</div>
<div class="table-box">
<el-table
@ -84,34 +91,28 @@
</el-form>
</template>
</el-table-column>
<el-table-column prop="orderNo" label="订单号" width="180"> </el-table-column>
<el-table-column prop="orderNo" label="订单号" width="220"> </el-table-column>
<el-table-column prop="amount" label="订单金额"> </el-table-column>
<el-table-column
prop="payAmount"
label="实付金额">
</el-table-column>
<el-table-column prop="payAmount" label="实付金额"> </el-table-column>
<el-table-column label="订单金额组成">
<el-table-column
prop="oilOrderAmount"
label="油品金额">
<el-table-column prop="oilOrderAmount" label="油品金额">
<template slot-scope="scope">
<span>{{scope.row.oilOrderAmount ? scope.row.oilOrderAmount : '0'}}</span>
</template>
</el-table-column>
<el-table-column
prop="goodsOrderAmount"
label="商品金额">
<el-table-column prop="goodsOrderAmount" label="商品金额">
<template slot-scope="scope">
<span>{{scope.row.goodsOrderAmount ? scope.row.goodsOrderAmount : '0'}}</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column
prop="payUser"
label="付款用户">
</el-table-column>
<el-table-column
prop="status"
label="状态">
<el-table-column prop="payUser" label="付款用户"> </el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status == 'paid'">已支付</el-tag>
<el-tag v-if="scope.row.status === 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status === 'paid'">已支付</el-tag>
<el-tag type="danger" v-else-if="scope.row.status === 'refund'">已退款</el-tag>
<el-tag type="danger" v-else>支付失败</el-tag>
</template>
</el-table-column>
@ -129,6 +130,7 @@
@click="patchwork(scope.row)"
type="primary" plain round>补打</el-button>
<el-button style="width: 60px" size="mini"
v-if = "scope.row.status !== 'refund'"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
</template>
@ -150,7 +152,7 @@
</el-card>
<!-- 订单详情-->
<!-- 订单详情-->
<el-dialog
title="订单详情"
:visible.sync="dialogVisible">
@ -188,7 +190,7 @@
</el-table-column>
<el-table-column label="油号油枪" align="center" prop="terminal">
<template slot-scope="scope">
<span>{{ getName(oilNameList,scope.row.oils) }}/{{ scope.row.oilGunNum }}号枪</span>
<span>{{ getName(oilNameList,scope.row.oils) }}/{{ scope.row.oilGunNum }}</span>
</template>
</el-table-column>
<el-table-column label="加油升数" align="center" prop="oilNum" >
@ -226,13 +228,13 @@
</el-descriptions>
</div>
</el-dialog>
<!-- 订单退款-->
<!-- 订单退款-->
<el-dialog
title="订单退款"
width="25%"
:visible.sync="dialogRefund">
<div style="text-align: center;font-weight: bold">
<span style="font-size: 35px">{{ cashierOrder.amount }}</span>
<span style="font-size: 35px">{{ cashierOrder.payAmount }}</span>
</div>
<div class="tk">退款金额</div>
<div class="tk">退款单号{{ cashierOrder.orderNo }}</div>
@ -245,13 +247,13 @@
</el-radio-group>
</div>
<div>
<el-input placeholder="请输入密码" v-model="password" show-password></el-input>
<el-input placeholder="请输入退款原因" v-model="refundRemark" show-password></el-input>
<br/>
<span style="color: grey;font-size: 12px">退款仅支持全额退款,退款金额将按照支付信息原路退回优惠券储值卡等原路退回处理</span>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="refundConfirmed()"> </el-button>
</span>
</el-dialog>
</div>
@ -264,13 +266,15 @@ import {oilOrderList, oilOrders} from "@/api/order/oilorder";
import {getOilNameList} from "@/api/order/oilnumgun";
import {getOrderGoods} from "@/api/order/goodsorder";
import {exportExcelCashierApi} from "@/api/order/exportExcel";
import {refundApi} from "@/api/order/refund";
export default {
name: "order_Cashier",
data(){
return{
// 退
password:"",
// 退
refundRemark:"",
radio1:"油号选错",
//
oilNameList:[],
@ -293,21 +297,37 @@ import {exportExcelCashierApi} from "@/api/order/exportExcel";
page: 1,
pageSize: 10,
},
orderStatistics:{
numberOfStrokes:'0',
theTotalAmountOfTheOrder:'0',
theTotalAmountPaid:'0',
oilDiscounts:'0',
theTotalAmountOfOil:'0',
theTotalAmountOfTheItem:'0',
},
total:0,
}
},
created() {
this.getList();
this.getOrderStatistics();
this.getStaffList();
},
methods:{
exportExcelCashier() {
exportExcelCashierApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'收银台订单统计.xLsx')
})
},
},
//
getOrderStatistics() {
orderStatisticsApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
this.orderStatistics = res.data
})
},
//
getRealName(list,val){
let name = "";
@ -339,9 +359,49 @@ import {exportExcelCashierApi} from "@/api/order/exportExcel";
},
// 退
handleRefund(id){
this.dialogRefund = true;
cashierOrder(id).then( response => {
this.cashierOrder = response.data
//退
this.$confirm('是否将该收银台下的订单全部退款, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.dialogRefund = true;
cashierOrder(id).then( response => {
this.cashierOrder = response.data
if (response.data.status === "refund") {
this.$message({
type: 'info',
message: '该订单已经退款'
});
this.dialogRefund = false;
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
refundConfirmed() {
this.dialogRefund = false;
console.log("cashierOrder",this.cashierOrder)
let map={
orderNo: this.cashierOrder.orderNo,
storeId: this.cashierOrder.storeId,
refundRemark:this.radio1 +"-"+ this.refundRemark,
type: "canRefund"
}
refundApi(map).then(res=>{
this.$message({
type: 'info',
message: '退款成功'
});
this.getList();
this.getOrderStatistics();
this.getStaffList();
})
},
//

View File

@ -1,6 +1,6 @@
<!--商品交易列表-->
<template>
<div class="app-container">
<div>
<el-card class="box-card">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
@ -63,28 +63,41 @@
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>商品交易统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">商品笔数</div>
<div class="size-bole">{{orderStatistics.numberOfProducts}}</div>
</div>
<div class="box">
<div class="size-hui">总金额</div>
<div class="size-bole">{{orderStatistics.theTotalAmount}}</div>
</div>
<div class="box">
<div class="size-hui">商品总数量</div>
<div class="size-bole">{{orderStatistics.theTotalNumberOfUnits}}</div>
</div>
<div class="box">
<div class="size-hui">优惠金额</div>
<div class="size-bole">{{orderStatistics.discountAmount}}</div>
</div>
<div class="box">
<div class="size-hui">微信</div>
<div class="size-bole">{{orderStatistics.wechat}}</div>
</div>
<div class="box">
<div class="size-hui">支付宝</div>
<div class="size-bole">{{orderStatistics.alipay}}</div>
</div>
<div class="box">
<div class="size-hui">现金</div>
<div class="size-bole">{{orderStatistics.cash}}</div>
</div>
</div>
</el-card>
@ -92,7 +105,7 @@
<div class="wgang">
<div>商品交易列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelGoodsOrder()">导出订单</el-button>
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelGoodsOrder()">导出订单</el-button>
</div>
</div>
<div class="table-box">
@ -111,9 +124,9 @@
</el-form>
</template>
</el-table-column>
<el-table-column label="订单ID" prop="id" width="80"/>
<!-- <el-table-column label="订单ID" prop="id" width="80"/>-->
<el-table-column label="终端" align="center" prop="terminal"/>
<el-table-column label="订单号" align="center" prop="orderNo" width="200"/>
<el-table-column label="订单号" align="center" prop="orderNo" width="220"/>
<el-table-column label="订单金额" align="center" prop="amount"/>
<el-table-column label="优惠金额" align="center" prop="discount"/>
<el-table-column label="商品数量" align="center" prop="goodsNum">
@ -127,6 +140,7 @@
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status == 'paid'">已支付</el-tag>
<el-tag type="danger" v-else-if="scope.row.status === 'refund'">已退款</el-tag>
<el-tag type="danger" v-else>支付失败</el-tag>
</template>
</el-table-column>
@ -141,17 +155,14 @@
<span>{{ parseTime(scope.row.payTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- >更多操作</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button style="width: 60px" size="mini"
v-if = "scope.row.status !== 'refund'"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
</template>
</el-table-column>
</el-table>
</div>
@ -167,6 +178,34 @@
</el-pagination>
</div>
<!-- 订单退款-->
<el-dialog
title="订单退款"
width="25%"
:visible.sync="dialogRefund">
<div style="text-align: center;font-weight: bold">
<span style="font-size: 35px">{{ goods.payAmount }}</span>
</div>
<div class="tk">退款金额</div>
<div class="tk">退款单号{{ goods.orderNo }}</div>
<div style="margin: 10px 0">
退款原因<br/>
<el-radio-group v-model="radio1" style="margin: 10px 0">
<el-radio-button label="油号选错"></el-radio-button>
<el-radio-button label="金额错误"></el-radio-button>
<el-radio-button label="其他原因"></el-radio-button>
</el-radio-group>
</div>
<div>
<el-input placeholder="请输入退款原因" v-model="refundRemark" show-password></el-input>
<br/>
<span style="color: grey;font-size: 12px">退款仅支持全额退款,退款金额将按照支付信息原路退回优惠券储值卡等原路退回处理</span>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="refundConfirmed()"> </el-button>
</span>
</el-dialog>
<!-- 商品购买详情 -->
<el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
@ -184,10 +223,11 @@
</template>
<script>
import { getOrderGoods, listOrder} from "@/api/order/goodsorder";
import {getGoodsOrder, getOrderGoods, listOrder,orderStatisticsApi} from "@/api/order/goodsorder";
import { queryStaffs } from "@/api/order/staff";
import { getDicts } from "@/api/order/data";
import { exportExcelGoodsOrderApi } from "@/api/order/exportExcel";
import {getOrderInfoApi, refundApi} from "@/api/order/refund";
export default {
name: "order_Cashier",
@ -221,24 +261,109 @@ export default {
page: 1,
pageSize: 10,
},
orderGoods:'',
//
payList:[],
dialogRefund: false,
radio1:"油号选错",
goods:{},
refundRemark:"",
orderStatistics: {
numberOfProducts:'0',
theTotalAmount:'0',
theTotalNumberOfUnits:'0',
discountAmount:'0',
wechat:'0',
alipay:'0',
cash:'0',
},
}
},
created() {
this.getList();
this.getOrderStatistics();
this.getStaffList();
this.getPayList();
},
methods:{
exportExcelGoodsOrder() {
exportExcelGoodsOrderApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'商品订单统计.xLsx')
})
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'商品订单统计.xLsx')
})
},
//
getOrderStatistics (){
orderStatisticsApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
this.orderStatistics = res.data;
})
},
// 退
async handleRefund(id){
await getGoodsOrder({"id":id}).then( response => {
this.goods = response.data
if (response.data.status === "refund") {
this.$message({
type: 'info',
message: '该订单已经退款'
});
this.dialogRefund = false;
}
})
let title = '是否将该收银台下的订单全部退款'
await getOrderInfoApi({orderNo: this.goods.orderNo,
type: 'goods'}).then(res=>{
if (res.code === 200) {
if (res.data.type === "1") {
title = '该订单下有其它商品订单,是否一并退款'
this.goods.payAmount = res.data.money
}
}
});
this.$confirm(title+', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.dialogRefund = true;
}).catch(() => {
this.$message({
type: 'info',
message: '已取消退款'
});
this.dialogRefund = false;
});
},
// 退
refundConfirmed() {
this.dialogRefund = false;
console.log("cashierOrder",this.goods)
let map={
orderNo: this.goods.orderNo,
storeId: this.goods.storeId,
refundRemark:this.radio1 +"-"+ this.refundRemark,
type: "canRefund"
}
refundApi(map).then(res=>{
if (res.code === 200){
this.$message({
type: 'info',
message: '退款成功'
});
this.created()
}
})
},
// id
queryStaf(list,id){
let name = "";
@ -271,7 +396,7 @@ export default {
getGoods(id){
this.open = true;
this.title = "商品详情"
getOrderGoods(id).then( response => {
getOrderGoods({orderId:id}).then( response => {
this.goodsList = response.data
})
},
@ -322,6 +447,7 @@ export default {
handleQuery() {
this.queryParams.page = 1;
this.getList();
this.getOrderStatistics();
},
//
resetQuery() {

View File

@ -1,113 +1,141 @@
<!--油品订单-->
<template>
<div class="app-container">
<div>
<el-card class="box-card">
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
v-model="queryParams.staffId"
clearable
placeholder="全部"
>
<el-option v-for="item in staffList" :key="item.id" :label="item.realName" :value="item.id">
<span style="float: left">{{ item.realName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.mobile }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="终端" prop="terminal">
<el-select
v-model="queryParams.terminal"
clearable
placeholder="全部"
>
<el-option v-for="item in terminalList"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="支付类型" prop="payType">
<el-select
v-model="queryParams.payType"
clearable
placeholder="全部"
>
<el-option v-for="item in payList"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="queryParams.payUser" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="油枪号" prop="oilGunNum">
<el-select
v-model="queryParams.oilGunNum"
filterable
clearable
placeholder="全部"
>
<el-option v-for="item in oilNumList"
:key="item.id"
:label="item.oilGunNum"
:value="item.id">
<span style="float: left">{{ getName(oilNameList,item.oilName) }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.oilGunNum }}号枪</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="queryParams.orderNo" placeholder="订单号、官方单号检索"></el-input>
</el-form-item>
<el-form-item label="交易时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
size="medium"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
v-model="queryParams.staffId"
clearable
placeholder="全部"
>
<el-option v-for="item in staffList" :key="item.id" :label="item.realName" :value="item.id">
<span style="float: left">{{ item.realName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.mobile }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="终端" prop="terminal">
<el-select
v-model="queryParams.terminal"
clearable
placeholder="全部"
>
<el-option v-for="item in terminalList"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="支付类型" prop="payType">
<el-select
v-model="queryParams.payType"
clearable
placeholder="全部"
>
<el-option v-for="item in payList"
:key="item.id"
:label="item.dictLabel"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="手机号">
<el-input v-model="queryParams.payUser" clearable placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="油枪号" prop="oilGunNum">
<el-select
v-model="queryParams.oilGunNum"
filterable
clearable
placeholder="全部"
>
<el-option v-for="item in oilGunList"
:key="item.id"
:label="item.gunName"
:value="item.id">
<span style="float: left">{{ item.oilName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.gunName }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="queryParams.orderNo" clearable placeholder="订单号、官方单号检索"></el-input>
</el-form-item>
<el-form-item label="交易时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
size="medium"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>油品订单统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">油品笔</div>
<div class="size-bole">{{orderStatistics.numberOfOilPens}}</div>
</div>
<div class="box">
<div class="size-hui">油品总金额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfOil}}</div>
</div>
<div class="box">
<div class="size-hui">优惠总额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfTheOffer}}</div>
</div>
<div class="box">
<div class="size-hui">交易数量</div>
<div class="size-bole">{{orderStatistics.numberOfTransactions}}</div>
</div>
<div class="box">
<div class="size-hui">实收总额</div>
<div class="size-bole">{{orderStatistics.totalAmountReceived}}</div>
</div>
<div class="box">
<div class="size-hui">微信</div>
<div class="size-bole">{{orderStatistics.wechat}}</div>
</div>
<div class="box">
<div class="size-hui">支付宝</div>
<div class="size-bole">{{orderStatistics.alipay}}</div>
</div>
<div class="box">
<div class="size-hui">现金</div>
<div class="size-bole">{{orderStatistics.cash}}</div>
</div>
</div>
</el-card>
<el-card class="box-card">
<div class="wgang">
<div>油品订单列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelOilOrder()">导出订单</el-button>
</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelOilOrder()">导出订单</el-button>
</div>
</div>
<div class="table-box">
<el-table
@ -117,7 +145,7 @@
<template slot-scope="props">
<el-form label-position="left" class="demo-table-expand" style="margin-left: 20px">
<el-form-item label="用户信息">
<span>{{ props.row.userId ? queryUser(props.row.userId):"--" }}</span>
<span>{{ props.row.userId ? queryUser(userList,props.row.userId):"--" }}</span>
</el-form-item>
<el-form-item label="收银员">
<span>{{ queryStaf(staffList,props.row.staffId) }}</span>
@ -137,74 +165,50 @@
<span>{{ getVal(terminalList,props.row.terminal) }}</span>
</template>
</el-table-column>
<el-table-column
prop="orderNo"
label="订单号"
width="200">
</el-table-column>
<el-table-column prop="orderNo" label="订单号" width="220"> </el-table-column>
<el-table-column label="订单信息" align="center">
<el-table-column
prop="oilGunNum"
label="油品/油枪" align="center"
width="120">
<el-table-column prop="oilGunNum" label="油品/油枪" align="center" width="120">
<template slot-scope="props">
<span>{{ getName(oilNameList,props.row.oils) }}/{{ props.row.oilGunNum }}</span>
<span>{{ getName(oilNameList,props.row.oils) }}/{{ getName1(oilGunList,props.row.oilGunNum) }}</span>
</template>
</el-table-column>
<el-table-column
prop="orderAmount"
label="订单金额" align="center"
width="120">
</el-table-column>
<el-table-column
prop="discountAmount"
label="优惠金额" align="center"
width="120">
</el-table-column>
<el-table-column prop="orderAmount" label="订单金额" align="center" width="120"> </el-table-column>
<el-table-column prop="discountAmount" label="优惠金额" align="center" width="120"> </el-table-column>
</el-table-column>
<el-table-column label="付款信息" align="center">
<el-table-column
prop="payAmount"
label="实付金额" align="center"
width="120">
</el-table-column>
<el-table-column
prop="payUser"
label="付款用户" align="center"
width="120">
</el-table-column>
<el-table-column
prop="orderStatus"
label="付款状态" align="center"
width="120">
<el-table-column prop="payAmount" label="实付金额" align="center" width="120"> </el-table-column>
<el-table-column prop="payUser" label="付款用户" align="center" > </el-table-column>
<el-table-column prop="payType" label="付款方式" align="center" width="120">
<template slot-scope="scope">
<el-tag v-if="scope.row.orderStatus == 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.orderStatus == 'paid'">已支付</el-tag>
<span>{{getType(payList,scope.row.payType)}}</span>
</template>
</el-table-column>
<el-table-column prop="orderStatus" label="付款状态" align="center" width="120">
<template slot-scope="scope">
<el-tag v-if="scope.row.orderStatus === 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.orderStatus === 'paid'">已支付</el-tag>
<el-tag type="danger" v-else-if="scope.row.orderStatus === 'refund'">已退款</el-tag>
<el-tag type="danger" v-else>支付失败</el-tag>
</template>
</el-table-column>
</el-table-column>
<el-table-column
prop="invoicing"
label="开票标识" align="center"
width="180">
</el-table-column>
<el-table-column prop="invoicing" label="开票标识" align="center" > </el-table-column>
<el-table-column label="交易时间" align="center" width="160" prop="payTime">
<template slot-scope="scope">
<span>{{ scope.row.payTime ? parseTime(scope.row.payTime):"--" }}</span>
</template>
</el-table-column>
<el-table-column label="交易时间" align="center" width="160" prop="payTime">
<template slot-scope="scope">
<span>{{ scope.row.payTime ? parseTime(scope.row.payTime):"--" }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button size="mini" type="text" icon="el-icon-edit" >更多操作</el-button>-->
<el-button style="width: 60px" size="mini"
@click="patchwork(scope.row)"
type="primary" plain round>补打</el-button>
<el-button style="width: 60px" size="mini"
@click="handleRefund(scope.row.id)"
v-if = "scope.row.status !== 'refund'"
type="danger" plain round>退款</el-button>
</template>
</el-table-column>
@ -223,7 +227,7 @@
</div>
</el-card>
<!-- 订单退款-->
<!-- 订单退款-->
<el-dialog
title="订单退款"
width="25%"
@ -242,13 +246,13 @@
</el-radio-group>
</div>
<div>
<el-input placeholder="请输入密码" v-model="password" show-password></el-input>
<el-input placeholder="请输入退款原因" v-model="refundRemark" show-password></el-input>
<br/>
<span style="color: grey;font-size: 12px">退款仅支持全额退款,退款金额将按照支付信息原路退回优惠券储值卡等原路退回处理</span>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="refundConfirmed()"> </el-button>
</span>
</el-dialog>
</div>
@ -257,18 +261,21 @@
<script>
import {queryStaffs} from "@/api/order/staff";
import {getDicts} from "@/api/order/data";
import {getOilNameList, getOilNumGun } from "@/api/order/oilnumgun";
import {listOilOrder, oilOrderInfo} from "@/api/order/oilorder";
import {getUser} from "@/api/order/user";
import {getOilNameList, getOilNumGun, oilNumbers} from "@/api/order/oilnumgun";
import {listOilOrder, oilOrderInfo, orderStatisticsApi} from "@/api/order/oilorder";
import {getUser, queryUsers} from "@/api/order/user";
import {exportExcelOilOrderApi} from "@/api/order/exportExcel";
import {getOilNumberGun} from "@/api/oilConfig/oilGuns";
export default {
name: "order_Oil",
data(){
return{
//
userName:"",
oilOrder:{},
// 退
password:"",
refundRemark:"",
radio1:"油号选错",
dialogRefund:false,
//
@ -285,19 +292,37 @@
dateRange: [],
//
oilOrderList:[],
payTypeList:[],
//
queryParams: {
page: 1,
pageSize: 10,
},
total:0,
//
oilGunList:[],
//
userList:[],
orderStatistics: {
numberOfOilPens:'0',
theTotalAmountOfOil:'0',
theTotalAmountOfTheOffer:'0',
numberOfTransactions:'0',
totalAmountReceived:'0',
wechat:'0',
alipay:'0',
cash:'0',
}
}
},
created() {
this.getStaffList();
this.getOrderStatistics();
this.getList();
this.getPayType();
this.getOilGunList();
this.getUserList();
},
methods:{
exportExcelOilOrder() {
@ -305,7 +330,39 @@
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'油品订单统计.xLsx')
})
},
},
getUserList(){
queryUsers().then(res => {
this.userList = res.data
})
},
//
getOilGunList(){
getOilNumberGun().then(res => {
res.data.forEach(item => {
if (item.oilGunList.length>0){
item.oilGunList.forEach(i => {
i.oilName = item.oilName
this.oilGunList.push(i)
})
}
})
})
},
getPayType(){
getDicts("payment_type").then(res => {
this.payTypeList = res.data
})
},
//
getOrderStatistics() {
orderStatisticsApi().then(res=>{
this.orderStatistics = res.data
})
},
//
patchwork(data){
const orderNo = data.orderNo
@ -316,11 +373,56 @@
}).catch(() => {});
},
// 退
handleRefund(id){
this.dialogRefund = true;
oilOrderInfo(id).then( response => {
async handleRefund(id){
await oilOrderInfo(id).then( response => {
this.oilOrder = response.data
})
let title = '是否将该收银台下的订单全部退款'
await getOrderInfoApi({orderNo: this.oilOrder.orderNo,
type: 'oil'}).then(res=>{
if (res.code === 200) {
if (res.data.type === "1") {
title = '该订单下有其它商品订单,是否一并退款'
this.oilOrder.payAmount = res.data.money
}
}
});
//退
this.$confirm(title+', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.dialogRefund = true;
}).catch(() => {
this.$message({
type: 'info',
message: '已取消退款'
});
});
},
refundConfirmed() {
this.dialogRefund = false;
console.log("cashierOrder",this.cashierOrder)
let map={
orderNo: this.oilOrder.orderNo,
storeId: this.oilOrder.storeId,
refundRemark:this.radio1 +"-"+ this.refundRemark,
type: "canRefund"
}
refundApi(map).then(res=>{
this.$message({
type: 'info',
message: '退款成功'
});
this.created()
})
},
// id
queryStaf(list,id){
@ -332,14 +434,23 @@
})
return name;
},
getType(list,val){
let name = "";
list.forEach(item => {
if (item.dictValue == val){
name = item.dictLabel
}
})
return name;
},
// id
async queryUser(id){
let result = "";
if (id!=null && id!=""){
let data = await getUser(id);
result = data.data.name + "|" + data.data.mobile
}
return result.toString();
queryUser(list,id){
list.forEach(item => {
if (item.id == id){
this.userName = item.name + "|" + item.mobile
}
})
return this.userName;
},
getVal(list,val){
let name = "";
@ -364,6 +475,7 @@
handleQuery() {
this.queryParams.page = 1;
this.getList();
this.getOrderStatistics();
},
//
resetQuery() {
@ -389,8 +501,8 @@
getOilNameList().then( response => {
this.oilNameList = response.data;
})
getOilNumGun({oilNum : "全部"}).then( response => {
this.oilNumList = response.data
oilNumbers().then(response => {
this.oilNumList = response.data;
})
},
//
@ -407,6 +519,19 @@
}
return name;
},
//
getName1(oilNameList,id){
let name = ""
let _this = this;
if(oilNameList!=null && oilNameList!=""){
oilNameList.forEach(item => {
if (item.id == id){
name = item.gunName;
}
})
}
return name;
},
}
}
</script>

View File

@ -1,6 +1,6 @@
<!--普通收款订单-->
<template>
<div class="app-container">
<div>
<el-card class="box-card">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
@ -36,15 +36,35 @@
</el-form-item>
</el-form>
</el-card>
<!-- 统计-->
<!-- 统计-->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>小程序订单统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总数</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">笔数</div>
<div class="size-bole">{{ orderStatistics.numberOfStrokes }}</div>
</div>
<div class="box">
<div class="size-hui">订单总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfTheOrder }}</div>
</div>
<div class="box">
<div class="size-hui">实付总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountPaid }}</div>
</div>
<div class="box">
<div class="size-hui">油品优惠</div>
<div class="size-bole">{{ orderStatistics.oilDiscounts }}</div>
</div>
<div class="box">
<div class="size-hui">油品总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfOil }}</div>
</div>
<div class="box">
<div class="size-hui">商品总金额</div>
<div class="size-bole">{{ orderStatistics.theTotalAmountOfTheItem?orderStatistics.theTotalAmountOfTheItem:0 }}</div>
</div>
</div>
@ -52,9 +72,9 @@
<el-card class="box-card">
<div class="wgang">
<div>小程序订单列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelApplet()">导出订单</el-button>
</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelApplet()">导出订单</el-button>
</div>
</div>
<div class="table-box">
<el-table
@ -75,7 +95,7 @@
<el-table-column
prop="terminal"
label="终端"
width="180">
width="100">
<template slot-scope="scope">
<span>{{getType(terminalList,scope.row.terminal)}}</span>
</template>
@ -83,7 +103,7 @@
<el-table-column
prop="orderNo"
label="订单号"
width="180">
width="220">
</el-table-column>
<el-table-column
prop="amount"
@ -125,15 +145,15 @@
</el-table-column>
<el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button style="width: 60px" size="mini"-->
<!-- @click="getOrdersInfo(scope.row.id)"-->
<!-- type="success" plain round>详情</el-button>-->
<!-- <el-button style="width: 60px" size="mini"-->
<!-- @click="getOrdersInfo(scope.row.id)"-->
<!-- type="success" plain round>详情</el-button>-->
<el-button style="width: 60px" size="mini"
@click="patchwork(scope.row)"
type="primary" plain round>补打</el-button>
<el-button style="width: 60px" size="mini"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
<!-- <el-button style="width: 60px" size="mini"-->
<!-- @click="handleRefund(scope.row.id)"-->
<!-- type="danger" plain round>退款</el-button>-->
</template>
</el-table-column>
@ -149,12 +169,22 @@
:limit.sync="queryParams.pageSize"
@current-change="getList">
</el-pagination>
<!-- <pagination-->
<!-- background-->
<!-- v-show="total>0"-->
<!-- layout="prev, pager, next"-->
<!-- :total="total"-->
<!-- :page.sync="queryParams.page"-->
<!-- :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
</div>
</el-card>
<!-- 订单退款-->
<!-- 订单退款-->
<el-dialog
title="订单退款"
width="25%"
@ -186,7 +216,7 @@
</template>
<script>
import {cashierOrder, listCashierOrder} from "@/api/order/cashierorder";
import {cashierOrder, listCashierOrder,orderStatisticsApi} from "@/api/order/cashierorder";
import {getDicts} from "@/api/order/data";
import {queryStaffs} from "@/api/order/staff";
import { exportExcelCashierApi } from "@/api/order/exportExcel";
@ -222,68 +252,34 @@ import { exportExcelCashierApi } from "@/api/order/exportExcel";
formLabelAlign: {
name: '',
},
// tableData: [{
// date: '2016-05-03',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-02',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-04',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-01',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-08',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-06',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-07',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }]
orderStatistics:{
numberOfStrokes:'0',
theTotalAmountOfTheOrder:'0',
theTotalAmountPaid:'0',
oilDiscounts:'0',
theTotalAmountOfOil:'0',
theTotalAmountOfTheItem:'0',
},
}
},
created() {
this.getList();
this.getOrderStatistics();
this.getTerList();
},
methods:{
methods: {
exportExcelApplet() {
exportExcelCashierApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'小程序订单统计.xLsx')
})
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'小程序订单统计.xLsx')
})
},
//
getOrderStatistics() {
orderStatisticsApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
this.orderStatistics = res.data
})
},
//
getRealName(list,val){
@ -340,7 +336,11 @@ import { exportExcelCashierApi } from "@/api/order/exportExcel";
})
},
//
getList(){
getList(val){
if (val!=undefined){
this.queryParams.page = val
}
console.log("123123123",this.queryParams)
listCashierOrder(this.addDateRange(this.queryParams, this.dateRange)).then( response => {
this.list = response.data.records;
this.total = response.data.total;
@ -350,6 +350,7 @@ import { exportExcelCashierApi } from "@/api/order/exportExcel";
handleQuery() {
this.queryParams.page = 1;
this.getList();
this.getOrderStatistics();
},
//
resetQuery() {

View File

@ -1,19 +1,19 @@
<!--未支付订单-->
<template>
<div class="app-container">
<div>
<el-card class="box-card">
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
@ -27,21 +27,21 @@
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="支付类型" prop="payType">-->
<!-- <el-select-->
<!-- v-model="queryParams.payType"-->
<!-- clearable-->
<!-- placeholder="全部"-->
<!-- >-->
<!-- <el-option v-for="item in payList"-->
<!-- :key="item.id"-->
<!-- :label="item.dictLabel"-->
<!-- :value="item.dictValue">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="支付类型" prop="payType">-->
<!-- <el-select-->
<!-- v-model="queryParams.payType"-->
<!-- clearable-->
<!-- placeholder="全部"-->
<!-- >-->
<!-- <el-option v-for="item in payList"-->
<!-- :key="item.id"-->
<!-- :label="item.dictLabel"-->
<!-- :value="item.dictValue">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="手机号">
<el-input v-model="queryParams.payUser" placeholder="请输入手机号"></el-input>
<el-input v-model="queryParams.payUser" clearable placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="油枪号" prop="oilGunNum">
<el-select
@ -50,30 +50,30 @@
clearable
placeholder="全部"
>
<el-option v-for="item in oilNumList"
<el-option v-for="item in oilGunList"
:key="item.id"
:label="item.oilGunNum"
:label="item.gunName"
:value="item.id">
<span style="float: left">{{ getName(oilNameList,item.oilName) }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.oilGunNum }}号枪</span>
<span style="float: left">{{ item.oilName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.gunName }}号枪</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="queryParams.orderNo" placeholder="订单号、官方单号检索"></el-input>
<el-input v-model="queryParams.orderNo" clearable placeholder="订单号、官方单号检索"></el-input>
</el-form-item>
<!-- <el-form-item label="交易时间">-->
<!-- <el-date-picker-->
<!-- v-model="dateRange"-->
<!-- style="width: 240px"-->
<!-- size="medium"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="交易时间">-->
<!-- <el-date-picker-->
<!-- v-model="dateRange"-->
<!-- style="width: 240px"-->
<!-- size="medium"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
@ -85,19 +85,48 @@
<span>未支付订单统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">油品笔</div>
<div class="size-bole">{{orderStatistics.numberOfOilPens}}</div>
</div>
<div class="box">
<div class="size-hui">油品总金额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfOil}}</div>
</div>
<div class="box">
<div class="size-hui">优惠总额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfTheOffer}}</div>
</div>
<div class="box">
<div class="size-hui">交易数量</div>
<div class="size-bole">{{orderStatistics.numberOfTransactions}}</div>
</div>
<div class="box">
<div class="size-hui">实收总额</div>
<div class="size-bole">{{orderStatistics.totalAmountReceived}}</div>
</div>
<div class="box">
<div class="size-hui">微信</div>
<div class="size-bole">{{orderStatistics.wechat}}</div>
</div>
<div class="box">
<div class="size-hui">支付宝</div>
<div class="size-bole">{{orderStatistics.alipay}}</div>
</div>
<div class="box">
<div class="size-hui">现金</div>
<div class="size-bole">{{orderStatistics.cash}}</div>
</div>
</div>
</el-card>
<el-card class="box-card">
<div class="wgang">
<div>未支付订单列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelOilOrder()">导出订单</el-button>
</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelOilOrder()">导出订单</el-button>
</div>
</div>
<div class="table-box">
<el-table
@ -118,7 +147,7 @@
<el-table-column prop="terminal" label="终端" align="center" width="80"></el-table-column>
<el-table-column prop="oils" label="油品/油枪" align="center">
<template slot-scope="props">
<span>{{ getName(oilNameList,props.row.oils) }}/{{ props.row.oilGunNum }}号枪</span>
<span>{{ getName(oilNameList,props.row.oils) }}/{{ getName1(oilGunList,props.row.oilGunNum) }}</span>
</template>
</el-table-column>
<el-table-column label="订单信息" align="center">
@ -137,23 +166,23 @@
<el-table-column prop="createTime" label="交易时间" align="center"></el-table-column>
<el-table-column prop="orderStatus" align="center" label="支付状态">
<el-table-column prop="orderStatus" label="支付状态">
<template slot-scope="scope">
<el-tag v-if="scope.row.orderStatus == 'unpaid'">未支付</el-tag>
<el-tag type="info" v-else>支付失败</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- >更多操作</el-button>-->
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- >更多操作</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
</div>
@ -175,7 +204,7 @@
</template>
<script>
import {listOilOrder} from "@/api/order/oilorder";
import {listOilOrder,orderStatisticsApi} from "@/api/order/oilorder";
import {getDicts} from "@/api/order/data";
import {getOilNameList, getOilNumGun} from "@/api/order/oilnumgun";
import {queryStaffs} from "@/api/order/staff";
@ -211,61 +240,24 @@
formLabelAlign: {
name: '',
},
// tableData: [{
// date: '2016-05-03',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-02',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-04',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-01',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-08',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-06',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-07',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }]
orderStatistics: {
numberOfOilPens:'0',
theTotalAmountOfOil:'0',
theTotalAmountOfTheOffer:'0',
numberOfTransactions:'0',
totalAmountReceived:'0',
wechat:'0',
alipay:'0',
cash:'0',
},
oilGunList:[],
}
},
created() {
this.getList();
this.getOrderStatistics();
this.getPayList();
this.getOilGunList();
},
methods:{
exportExcelOilOrder() {
@ -275,6 +267,40 @@
this.$download.saveAs(blob,'未支付订单统计.xLsx')
})
},
//
getOilGunList(){
getOilNumberGun().then(res => {
console.log(res)
res.data.forEach(item => {
if (item.oilGunList.length>0){
item.oilGunList.forEach(i => {
i.oilName = item.oilName
this.oilGunList.push(i)
})
}
})
})
},
//
getName1(oilNameList,id){
let name = ""
let _this = this;
if(oilNameList!=null && oilNameList!=""){
oilNameList.forEach(item => {
if (item.id == id){
name = item.gunName;
}
})
}
return name;
},
//
getOrderStatistics() {
orderStatisticsApi(this.addDateRange(this.queryParams, this.dateRange)).then(res=>{
this.orderStatistics = res.data
})
},
//
getRealName(list,val){
let name = "";

View File

@ -1,20 +1,20 @@
<!--会员充值订单-->
<template>
<div class="app-container">
<!-- 条件查询-->
<div>
<!-- 条件查询-->
<el-card class="box-card">
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div style="display: flex;">-->
<!-- <div class="top-app-sou">-->
<!-- <el-form :label-position="labelPosition" label-width="40px" :model="formLabelAlign">-->
<!-- <el-form-item label="名称">-->
<!-- <el-input v-model="formLabelAlign.name" placeholder="请输入要搜索的内容"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- <div style="margin-left: 10px">-->
<!-- <el-button type="primary" icon="el-icon-search">搜索</el-button>-->
<!-- </div>-->
<!-- </div>-->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
@ -44,45 +44,69 @@
<el-form-item label="手机号">
<el-input v-model="queryParams.mobile" placeholder="请输入会员手机号"></el-input>
</el-form-item>
<!-- <el-form-item label="交易时间">-->
<!-- <el-date-picker-->
<!-- v-model="dateRange"-->
<!-- style="width: 240px"-->
<!-- size="medium"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="交易时间">-->
<!-- <el-date-picker-->
<!-- v-model="dateRange"-->
<!-- style="width: 240px"-->
<!-- size="medium"-->
<!-- value-format="yyyy-MM-dd"-->
<!-- type="daterange"-->
<!-- range-separator="-"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期"-->
<!-- ></el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<!-- 统计-->
<!-- 统计-->
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>会员充值统计</span>
</div>
<div class="box-gang">
<div class="box" v-for="(item,index) in 7" :key="index">
<div class="size-hui">订单总数</div>
<div class="size-bole">55</div>
<div class="box">
<div class="size-hui">充值笔数</div>
<div class="size-bole">{{orderStatistics.numberOfTopUps?orderStatistics.numberOfTopUps:0}}</div>
</div>
<div class="box">
<div class="size-hui">充值总金额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfTopUp?orderStatistics.theTotalAmountOfTopUp:0}}</div>
</div>
<div class="box">
<div class="size-hui">赠送总额</div>
<div class="size-bole">{{orderStatistics.theTotalAmountOfTheCredit?orderStatistics.theTotalAmountOfTheCredit:0}}</div>
</div>
<div class="box">
<div class="size-hui">实收总额</div>
<div class="size-bole">{{orderStatistics.totalAmountReceived?orderStatistics.totalAmountReceived:0}}</div>
</div>
<div class="box">
<div class="size-hui">微信</div>
<div class="size-bole">{{orderStatistics.wechat?orderStatistics.wechat:0}}</div>
</div>
<div class="box">
<div class="size-hui">支付宝</div>
<div class="size-bole">{{orderStatistics.alipay?orderStatistics.alipay:0}}</div>
</div>
<div class="box">
<div class="size-hui">现金</div>
<div class="size-bole">{{orderStatistics.cash}}</div>
</div>
</div>
</el-card>
<!-- 表格-->
<!-- 表格-->
<el-card class="box-card">
<div class="wgang">
<div>会员充值列表</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelVip()">导出订单</el-button>
</div>
<div style="display: flex ">
<el-button type="primary" size="mini" icon="el-icon-plus" @click="exportExcelVip()">导出订单</el-button>
</div>
</div>
<div class="table-box">
<el-table
@ -138,13 +162,13 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button size="mini" type="text" icon="el-icon-edit">更多操作</el-button>-->
<!-- <el-button size="mini" type="text" icon="el-icon-edit">更多操作</el-button>-->
<el-button style="width: 60px" size="mini"
@click="patchwork(scope.row)"
type="primary" plain round>补打</el-button>
<el-button style="width: 60px" size="mini"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
<!-- <el-button style="width: 60px" size="mini"-->
<!-- @click="handleRefund(scope.row.id)"-->
<!-- type="danger" plain round>退款</el-button>-->
</template>
</el-table-column>
@ -165,7 +189,7 @@
</el-card>
<!-- 订单退款-->
<!-- 订单退款-->
<el-dialog
title="订单退款"
width="25%"
@ -190,17 +214,18 @@
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="dialogRefund = false"> </el-button>
<el-button type="primary" @click="refundConfirmed()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {cardValueRecordInfo, listCardValueRecord} from "@/api/order/cardvaluerecord";
import {cardValueRecordInfo, listCardValueRecord,orderStatisticsApi} from "@/api/order/cardvaluerecord";
import {getDicts} from "@/api/order/data";
import {queryStaffs} from "@/api/order/staff";
import { exportExcelVipApi } from "@/api/order/exportExcel";
import {refundApi} from "@/api/order/refund";
export default {
@ -232,69 +257,37 @@ export default {
formLabelAlign: {
name: '',
},
// tableData: [{
// date: '2016-05-03',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-02',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-04',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-01',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-08',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-06',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }, {
// date: '2016-05-07',
// name: '',
// province: '',
// city: '',
// address: ' 1518 ',
// zip: 200333
// }]
orderStatistics: {
numberOfTopUps:'',
theTotalAmountOfTopUp:'',
theTotalAmountOfTheCredit:'',
totalAmountReceived:'',
wechat:'',
alipay:'',
cash:'',
}
}
},
created() {
this.getList();
this.getPayList();
this.getOrderStatistics()
},
methods:{
exportExcelVip() {
exportExcelVipApi(this.queryParams).then(res=>{
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'商品订单统计.xLsx')
})
const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
this.$download.saveAs(blob,'会员充值订单统计.xLsx')
})
},
getOrderStatistics () {
orderStatisticsApi().then(res=>{
this.orderStatistics = res.data
})
},
//
patchwork(data){
const orderNo = data.name
@ -311,6 +304,22 @@ export default {
this.oilOrder = response.data
})
},
refundConfirmed() {
this.dialogRefund = false;
// 退
// cashierOrder
console.log("oilOrder",this.oilOrder)
let map={
orderNo: this.oilOrder.paymentNo,
// refundAmt: this.oilOrder.paymentNo,
storeId: this.oilOrder.storeId,
type: "oilOrder"
}
refundApi(map).then(res=>{
})
},
getType(list,val){
let name = "";
list.forEach(item => {
@ -333,6 +342,7 @@ export default {
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
this.getOrderStatistics();
},
//
resetQuery() {

View File

@ -20,7 +20,7 @@
</el-switch>
</div>
</div>
<div style="margin-top: 20px"><el-button type="primary" icon="el-icon-plus" @click="addMerchant">添加商户信息</el-button></div>
<!-- <div style="margin-top: 20px"><el-button type="primary" icon="el-icon-plus" @click="addMerchant">添加商户信息</el-button></div>-->
<div class="content-box">
<!-- <el-card class="box-card" shadow="hover" v-for="(item,index) in 10" :key="index">-->
<!-- <div slot="header" class="clearfix">-->
@ -75,7 +75,7 @@
</div>
<div class="hangbox" v-for="(item,index) in oilConfigList" :key="item.id">
<div>{{index + 1}}.通道</div>
<div class="jiaong">{{ item.merchantName }}</div>
<div class="jiaong">{{ item.merchantName }}({{ item.remark }})</div>
<div> 商户号 </div>
<div class="jiaong">{{ item.mchntCd }}</div>
<!-- <div> 交易满 </div>-->
@ -161,7 +161,7 @@
<span style="float: left">
<dict-tag :options="dict.type.payment_channel" :value="item.merchantName"/>
</span>
<span style="color: #00ff80">(111({{ item.remark ? item.remark : "--" }}))</span>
<span style="color: #30a1ff">({{ item.remark ? item.remark : "--" }})</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.mchntCd }}</span>
</el-option>
</el-select>

View File

@ -60,6 +60,13 @@
<el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
<el-table-column label="ID" align="center" prop="id" width="80" />
<el-table-column label="姓名" align="center" prop="realName" />
<el-table-column label="员工角色" align="center" prop="roleId" >
<template slot-scope="scope">
<span v-if="scope.row.roleId=='12'">油站站长</span>
<span v-if="scope.row.roleId=='15'">普通员工</span>
<span v-if="scope.row.roleId=='16'">收银员</span>
</template>
</el-table-column>
<el-table-column label="手机号" align="center" prop="mobile" width="110"/>
<el-table-column label="员工码" align="center" prop="staffCode">
@ -145,9 +152,13 @@
<el-select v-model="form.roleId" placeholder="请选择角色">
<el-option
v-for="item in roleList"
:key="item.dutyId"
:key="item.dutyId+''"
:label="item.dutyName"
:value="item.dutyId"
:value="item.dutyId+''"
></el-option>
<el-option
label="油站站长"
:value="12+''"
></el-option>
</el-select>
@ -157,7 +168,7 @@
<!-- <el-row>-->
<el-col :span="8">
<el-form-item label="登录密码" prop="password">
<el-input v-model="form.password" type="password" placeholder="请输入登录密码" maxlength="30"/>
<el-input v-model="form.password" type="password" placeholder="不填写默认123456" maxlength="30"/>
</el-form-item>
</el-col>
@ -165,25 +176,24 @@
<el-row>
</el-row>
<el-row :span="24">
<el-col :span="2" style="display: flex;margin-bottom: 10px">
<span style="margin-right: 10px;width: 70px">审核权限</span>
<!-- <el-row :span="24">-->
<!-- <el-col :span="2" style="display: flex;margin-bottom: 10px">-->
<!-- <span style="margin-right: 10px;width: 70px">审核权限</span>-->
</el-col>
<el-col :span="22" style="display: flex;margin-bottom: 10px">
<el-checkbox-group v-model="form.auditPrem" @change="getCheckbox">
<el-checkbox
v-for="dict in dict.type.shqx"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-checkbox>
</el-checkbox-group>
<!-- </el-col>-->
<!-- <el-col :span="22" style="display: flex;margin-bottom: 10px">-->
<!-- <el-checkbox-group v-model="auditPrem" @change="getCheckbox">-->
<!-- <el-checkbox-->
<!-- v-for="dict in dict.type.shqx"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- ></el-checkbox>-->
<!-- </el-checkbox-group>-->
</el-col>
<!-- </el-col>-->
<!-- </el-row>-->
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="一键加油" prop="isRefuel">
@ -250,6 +260,24 @@
</el-tooltip>
</el-form-item>
</el-col>
<el-col :span="8" >
<el-form-item label="审核权限">
<el-select
v-model="auditPrem"
multiple
collapse-tags
@change="getCheckbox"
placeholder="请选择">
<el-option
v-for="dict in dict.type.shqx"
:key="dict.label"
:label="dict.label"
:value="dict.label"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
@ -506,9 +534,10 @@ export default {
this.form.appletPrem = JSON.stringify(data);
},
getCheckbox(){
this.form.writeOff = this.writeOff.toString();
this.form.specialPrem = this.specialPrem.toString();
this.form.auditPrem = this.form.auditPrem.toString();
console.log("this.auditPrem.toString()",this.auditPrem.toString())
// this.form.writeOff = this.writeOff.toString();
// this.form.specialPrem = this.specialPrem.toString();
this.form.auditPrem = this.auditPrem.toString();
},
//
toTarget(url) {
@ -585,6 +614,8 @@ export default {
this.appletPrem = '';
this.writeOff = [];
this.form.auditPrem = [];
this.auditPrem = []
this.form = {
id:'', userId:'', mobile:'', realName:'', wechat:'', merchantId:'', storeId:'', auditedStatus:'A',
auditedTime:'', description:'', isRefuel:'yc', handoverMode:'dqmdtyjb', handoverPrem:'yqx', handoverOut:'jbtc', record:'qbjl',
@ -602,6 +633,7 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.auditPrem = this.form.auditPrem.toString();
if (!this.form.id) {
queryStaff({mobile:this.form.mobile}).then( response => {
if(response.data!=null){
@ -610,31 +642,25 @@ export default {
this.form.posPrem = JSON.stringify(this.form.posPrem);
this.form.appletPrem = JSON.stringify(this.form.appletPrem);
addStaff(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
if (response.data==1){
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}
});
}
})
} else {
// queryStaff({mobile:this.form.mobile}).then( response => {
// if (response.data != null) {
// this.$modal.msgError("");
// } else {
// this.form.posPrem = JSON.stringify(this.form.posPrem);
// this.form.appletPrem = JSON.stringify(this.form.appletPrem);
updateStaff(this.form).then(response => {
if (response.data==1){
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}else {
this.$modal.msgError("手机号已存在");
}
updateStaff(this.form).then(response => {
if (response.data==1){
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}else {
this.$modal.msgError("手机号已存在");
}
});
// }
// })
});
}
}
});
@ -651,7 +677,11 @@ export default {
this.open = true;
this.title = "编辑员工信息";
if (this.form.auditPrem.length > 0){
this.form.auditPrem = this.form.auditPrem.split(",");
// this.form.auditPrem = this.form.auditPrem.split(",");
this.auditPrem = []
this.auditPrem = this.form.auditPrem.split(",");
console.log("this.form.auditPrem",this.auditPrem)
}
if (this.writeOff.length > 0){
this.writeOff = this.form.writeOff.split(",");

View File

@ -4,15 +4,115 @@
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="油品提成方案" name="oil"></el-tab-pane>
<el-tab-pane label="非油品提成方案" name="nonOil"></el-tab-pane>
<el-tab-pane label="员工提成记录" name="staffCommission">
<div>
<el-form :model="queryParams1" ref="queryForm" size="small" :inline="true" label-width="68px">
<el-form-item label="交易员工" prop="staffId">
<el-select
v-model="queryParams1.staffId"
clearable
placeholder="全部"
>
<el-option v-for="item in staffList" :key="item.id" :label="item.realName" :value="item.id">
<span style="float: left">{{ item.realName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ item.mobile }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单类型">
<el-select
v-model="queryParams1.type"
clearable
placeholder="全部"
>
<el-option label="油品订单出售" :value="1"></el-option>
<el-option label="商品订单出售" :value="2"></el-option>
<el-option label="储值卡充值" :value="3"></el-option>
<el-option label="油品退款" :value="4"></el-option>
<el-option label="商品退款" :value="5"></el-option>
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="queryParams1.orderNo" placeholder="请输入订单号"></el-input>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="dateRange"
style="width: 240px"
size="medium"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>会员充值统计</span>
</div>
<div class="box-gang">
<div class="box">
<div class="size-hui">提成笔数</div>
<div class="size-bole">{{ total1 }}</div>
</div>
<div class="box">
<div class="size-hui">提成金额</div>
<div class="size-bole">{{ allAmount }}</div>
</div>
</div>
</el-card>
<div style="margin-top: 20px" v-if="activeName=='staffCommission'">
<el-table ref="tables" v-loading="loading" :data="commissionList">
<el-table-column label="ID" prop="id" align="center" width="60"/>
<el-table-column label="员工信息" align="center">
<el-table-column label="姓名" prop="realName" align="center"/>
<el-table-column label="手机号" prop="mobile" align="center"/>
</el-table-column>
<el-table-column label="类型" prop="type" align="center" >
<template slot-scope="scope">
<span v-if="scope.row.type==1">油品订单出售</span>
<span v-if="scope.row.type==2">商品订单出售</span>
<span v-if="scope.row.type==3">储值卡充值</span>
<span v-if="scope.row.type==4">油品退款</span>
<span v-if="scope.row.type==5">商品退款</span>
</template>
</el-table-column>
<el-table-column label="提成金额(元)" prop="amount" align="center" width="260"/>
<el-table-column label="关联订单号" prop="orderNo" align="center"/>
<el-table-column label="描述" prop="description" align="center"/>
<el-table-column label="创建时间" prop="createTime" align="center" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total1>0"
:total="total1"
:page.sync="queryParams1.page"
:limit.sync="queryParams1.pageSize"
@pagination="getCommissionList"
/>
</div>
</el-tab-pane>
</el-tabs>
<el-alert
title="方案说明"
type="info"
description="同一角色组、同一参与油品只能设置一种启用的提成方案">
v-if="activeName=='oil' || activeName=='nonOil'"
description="同一角色组、同一参与油品只能设置一种启用的提成方案,挂账订单不参与提成">
</el-alert>
<div style="margin-top: 20px">
<div style="margin-top: 20px" v-if="activeName=='oil' || activeName=='nonOil'">
<el-button
type="primary"
icon="el-icon-plus"
@ -23,21 +123,21 @@
@sort-change="handleSortChange">
<el-table-column label="ID" prop="id" align="center" width="60"/>
<el-table-column label="方案名称" prop="name" align="center"/>
<el-table-column label="员工角色" prop="staffRoleGroup" align="center">
<template slot-scope="scope">
<dict-tag :options="dict.type.staff_role" :value="scope.row.staffRoleGroup"/>
</template>
<el-table-column label="员工角色" prop="dutyName" align="center">
<!-- <template slot-scope="scope">-->
<!-- <dict-tag :options="dict.type.staff_role" :value="scope.row.staffRoleGroup"/>-->
<!-- </template>-->
</el-table-column>
<el-table-column label="提成来源" prop="commissionSource" align="center" />
<el-table-column label="满足条件" prop="meetCondition" align="center">
<el-table-column label="满足条件" prop="meetCondition" align="center" width="260">
<template slot-scope="scope">
<span v-if="form.type == 'orderAmount'">
<span v-if="scope.row.type == 'orderAmount'">
订单金额消费满{{scope.row.meetCondition}}
</span>
<span v-if="form.type == 'payAmount'">
<span v-if="scope.row.type == 'payAmount'">
实际金额消费满{{scope.row.meetCondition}}
</span>
<span v-if="form.type == 'refuleNum'">
<span v-if="scope.row.type == 'refuleNum'">
加油数量消费满{{scope.row.meetCondition}}单位/立方
</span>
</template>
@ -88,9 +188,10 @@
@pagination="getList"
/>
</div>
</el-card>
<!-- 添加或修改对话框 -->
<!-- 添加或修改提成方案对话框 -->
<el-dialog :close-on-click-modal="false" :title="title" width="40%" :visible.sync="open" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-row>
@ -106,14 +207,6 @@
<el-radio-group v-model="form.commissionSource">
<el-radio v-for="dict in dict.type.source" @change="isChange" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<!-- <el-radio-group v-model="commissionSource" ref="" @change="getCheckbox">-->
<!-- <el-checkbox-->
<!-- v-for="dict in dict.type.source"-->
<!-- :key="dict.value"-->
<!-- :label="dict.label"-->
<!-- :value="dict.value"-->
<!-- ></el-checkbox>-->
<!-- </el-radio-group>-->
</el-form-item>
</el-col>
</el-row>
@ -122,11 +215,11 @@
<el-form-item label="角色组" prop="staffRoleGroup">
<el-select v-model="form.staffRoleGroup" placeholder="请选择所属角色">
<el-option
v-for="dict in dict.type.staff_role"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
v-for="item in roleList"
:key="item.dutyId+''"
:label="item.dutyName"
:value="item.dutyId+''"
></el-option>
</el-select>
</el-form-item>
</el-col>
@ -134,9 +227,12 @@
<el-row>
<el-col :span="24">
<el-form-item label="提成类型" prop="type">
<el-radio-group v-model="form.type">
<el-radio-group v-model="form.type" v-if="form.commissionSource=='油品'">
<el-radio v-for="dict in dict.type.comissionType" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<el-radio-group v-model="form.type" v-else>
<el-radio v-for="dict in dict.type.comissionType" :label="dict.value" v-if="dict.value!='refuleNum'">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
@ -160,7 +256,7 @@
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="油品提成" prop="royaltyRate">
<el-form-item label="提成金额" prop="royaltyRate">
<el-input v-model="form.royaltyRate" placeholder="请输入提成">
<el-select v-model="select" style="width: 70px" slot="append" placeholder="请选择">
<el-option label="元" value="元"></el-option>
@ -170,21 +266,6 @@
</el-form-item>
</el-col>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item label="生效时间" prop="takeEffect">-->
<!-- <el-date-picker-->
<!-- v-model="form.takeEffect"-->
<!-- type="daterange"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- range-separator="至"-->
<!-- start-placeholder="开始日期"-->
<!-- end-placeholder="结束日期">-->
<!-- </el-date-picker>-->
<!-- <div style="font-size: 12px;color: grey">时间范围内的油品交易有效</div>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="24">
<el-form-item label="方案状态" prop="status">
@ -210,17 +291,21 @@
import {
addCommission, delCommission,
addCommission, allAmountCommissionRecord, delCommission,
getCommission,
listCommission,
listCommission, listCommissionRecord,
queryCommission,
updateCommission
} from "@/api/staffCommission/staffcommission";
import {listDuty} from "@/api/staff/duty";
import {queryStaffs} from "@/api/order/staff";
export default {
dicts: ['source','role','zhzt','comissionType','staff_role'],
data(){
return {
//
allAmount:0,
changeCom:false,
activeName: 'oil',
select:"元",
@ -231,8 +316,10 @@ export default {
title: "",
//
total: 0,
total1: 0,
//
list: [],
commissionList: [],
//
open: false,
//
@ -245,6 +332,13 @@ export default {
name: '',
commissionSource:'油品'
},
queryParams1: {
page: 1,
pageSize: 10,
},
staffList:[],
//
dateRange: [],
//
form: {
type:'orderAmount',
@ -252,6 +346,7 @@ export default {
},
//
showSearch: true,
roleList:[],
//
rules: {
name: [
@ -283,8 +378,21 @@ export default {
},
created() {
this.getList();
this.getDuty();
this.getStaffList();
},
methods:{
getStaffList(){
queryStaffs().then( response => {
this.staffList = response.data;
})
},
//
getDuty(){
listDuty().then(response => {
this.roleList = response.data
})
},
//
handleClick(tab, event) {
if (this.activeName == 'oil'){
@ -296,7 +404,8 @@ export default {
commissionSource:'油品'
};
this.getList();
}else {
}
if (this.activeName == 'nonOil') {
this.queryParams = {
page: 1,
pageSize: 10,
@ -306,6 +415,13 @@ export default {
};
this.getList();
}
if (this.activeName == 'staffCommission') {
this.queryParams1 = {
page: 1,
pageSize: 10,
};
this.getCommissionList();
}
},
getCheckbox(){
@ -320,6 +436,20 @@ export default {
this.loading = false;
});
},
//
getCommissionList(){
this.loading = true;
listCommissionRecord(this.addDateRange(this.queryParams1, this.dateRange)).then(res => {
this.commissionList = res.data.records;
this.total1 = res.data.total;
this.loading = false;
})
allAmountCommissionRecord(this.addDateRange(this.queryParams1, this.dateRange)).then(res => {
if (res.data){
this.allAmount = res.data
}
})
},
//
reset() {
this.resetForm("form");
@ -356,6 +486,22 @@ export default {
this.title = "编辑提成方案";
});
},
//
handleQuery() {
this.queryParams1.page = 1;
this.getCommissionList();
},
//
resetQuery() {
this.dateRange = [];
this.queryParams1 = {
page: 1,
pageSize: 10,
}
// this.resetForm("queryForm");
this.handleQuery();
},
//
handleDelete(row) {
const name = row.name
@ -378,70 +524,28 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
// let date = new Date();
// let year = date.getFullYear()
// let month = date.getMonth()+1
// let day = date.getDate()
// let hour = date.getHours()
// let minutes = date.getMinutes()
// let second = date.getSeconds()
// let now = year+"-"+this.add0(month)+"-"+this.add0(day)+" "+hour+":"+minutes+":"+second
// if(this.form.takeEffect[0] < now && this.form.takeEffect[1] > now){
// this.form.status = 'qy'
// }else {
// this.form.status = 'jy'
// }
// // this.form.commissionSource = this.commissionSource.toString()
// this.form.takeEffect = JSON.stringify(this.form.takeEffect)
if (this.form.id) {
if (this.changeCom){
queryCommission(this.form).then(response => {
if (response.data != null) {
if (this.changeCom) {
this.$modal.msgError("同一个角色组只能对应一个" + this.form.commissionSource + "提成方案")
}else {
this.$modal.msgError("当前时间段已存在相同油品、相同角色组的方案")
}
} else {
this.form.royaltyRate = this.form.royaltyRate + this.select
updateCommission(this.form).then(response => {
this.$modal.msgSuccess("提成方案更新成功");
this.open = false;
this.changeCom = false;
this.getList();
});
}
})
}else {
this.form.royaltyRate = this.form.royaltyRate + this.select
updateCommission(this.form).then(response => {
this.$modal.msgSuccess("提成方案更新成功");
this.open = false;
this.getList();
});
}
} else {
queryCommission(this.form).then(response => {
if (response.data != null){
if (response.data.status == 'qy'){
this.$modal.msgError("同一个角色组只能对应一个"+this.form.commissionSource+"提成方案")
if (response.data==1){
this.$modal.msgSuccess("提成方案更新成功");
this.open = false;
this.getList();
}else {
this.form.royaltyRate = this.form.royaltyRate + this.select
addCommission(this.form).then(response => {
this.$modal.msgError("同一个角色组只能对应一个" + this.form.commissionSource + "提成方案")
}
});
} else {
this.form.royaltyRate = this.form.royaltyRate + this.select
addCommission(this.form).then(response => {
if (response.data==1) {
this.$modal.msgSuccess("提成方案新增成功");
this.open = false;
this.getList();
});
}
}else {
this.form.royaltyRate = this.form.royaltyRate + this.select
addCommission(this.form).then(response => {
this.$modal.msgSuccess("提成方案新增成功");
this.open = false;
this.getList();
}else {
this.$modal.msgError("同一个角色组只能对应一个"+this.form.commissionSource+"提成方案")
}
});
}
})
}
}
});
@ -472,4 +576,33 @@ export default {
height: 100vh;
background: #f6f8f9;
}
.clearfix{
width: 100%;
}
.box-card{
width: 100%;
margin-bottom: 15px;
}
.box-gang{
width: 100%;
display: flex;
align-items: center;
}
.box{
width: 200px;
box-sizing: border-box;
padding: 10px;
background: #f9f9f9;
height: 86px;
margin-right: 10px;
}
.size-hui{
font-size: 14px;
margin-bottom: 10px;
margin-top: 10px;
}
.size-bole{
font-weight: bold;
}
</style>

View File

@ -48,7 +48,7 @@ Vue.prototype.getName = getName
Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
// Vue.prototype.pcUrl = 'http://192.168.0.121:82/'
Vue.prototype.pcUrl = 'http://192.168.0.178:82/'
Vue.prototype.pcUrl = 'http://192.168.0.121:82/'
// 全局组件挂载
Vue.component('DictTag', DictTag)

View File

@ -3,7 +3,9 @@ package com.fuint.api.fuyou.controller;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fuint.api.fuyou.entity.Const;
import com.fuint.api.fuyou.entity.MerchantConfig;
import com.fuint.api.fuyou.service.FyPayService;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.util.Utils;
import com.fuint.business.integral.service.IntegralOrdersService;
import com.fuint.business.marketingActivity.cardFule.service.CardFuelRecordService;
@ -44,6 +46,9 @@ public class FyPayController {
@Lazy
private AllOrderInfoService allOrderInfoService;
@Autowired
@Lazy
private MerchantConfigService merchantConfigService;
@Autowired
private RedisLock redisLock;
// 接收支付平台异步通知的接口
@ -62,11 +67,18 @@ public class FyPayController {
// 业务逻辑 判断订单状态
AllOrderInfo allOrderInfo = allOrderInfoService.selectAllOrderInfoByOrderNo(orderNo);
if (ObjectUtil.isNotEmpty(allOrderInfo)){
allOrderInfo.setPayMoney(Double.valueOf(settleOrderAmt));
allOrderInfo.setPayMoney(Double.valueOf(settleOrderAmt)/100);
allOrderInfo.setTransactionId(transactionId);
allOrderInfo.setStatus("paid");
allOrderInfo.setPayTime(new Date());
allOrderInfoService.updateAllOrderInfo(allOrderInfo);
// 修改配置收款账户余额信息
MerchantConfig merchantConfig = merchantConfigService.selectMeChByIdIsUse(allOrderInfo.getStoreId());
Double beforeAmount = merchantConfig.getAmount();
Double afterAmount = beforeAmount + allOrderInfo.getPayMoney();
merchantConfig.setAmount(afterAmount);
merchantConfigService.updateMerch(merchantConfig);
}
updateOrderStatus(orderNo,allOrderInfo.getType());

View File

@ -4,6 +4,8 @@ import com.fuint.api.fuyou.entity.OilConfig;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.service.OilConfigService;
import com.fuint.api.fuyou.vo.OilConfigVo;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.util.TokenUtil;
import com.fuint.framework.web.BaseController;
import com.fuint.framework.web.ResponseObject;
import org.springframework.beans.factory.annotation.Autowired;
@ -52,7 +54,8 @@ public class OilConfigController extends BaseController {
if (isOpen.equals("1")){
result = oilConfigService.judgmentProportion();
if (result==1){
oilConfigService.oilRule();
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
oilConfigService.oilRule(nowAccountInfo.getStoreId());
// 开启定时关闭规则
oilConfigService.ruleCycle(ruleCycle);
}

View File

@ -2,6 +2,9 @@ package com.fuint.api.fuyou.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fuint.api.fuyou.entity.MerchantConfig;
import io.lettuce.core.dynamic.annotation.Param;
public interface MerchantConfigMapper extends BaseMapper<MerchantConfig> {
MerchantConfig getConfig(@Param("storeId") Integer storeId,@Param("mchntCd") String mchntCd);
int subtractAmount(@Param("storeId") Integer storeId,@Param("changeTheAmount") String changeTheAmount);
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuint.api.fuyou.mapper.MerchantConfigMapper">
<update id="subtractAmount">
update Merchant_config set amount = amount-#{changeTheAmount}
where store_id = #{storeId}
</update>
<select id="getConfig" resultType="com.fuint.api.fuyou.entity.MerchantConfig">
select *
from Merchant_config
where store_id = #{storeId}
and
mchnt_cd = #{mchntCd}
limit 1
</select>
</mapper>

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuint.api.fuyou.mapper.OilConfigMapper">
<sql id="selectOilConfig">
select oc.*,mc.mchnt_cd,mc.merchant_name from oil_config oc
select oc.*,mc.mchnt_cd,mc.merchant_name,mc.remark from oil_config oc
inner join merchant_config mc on oc.merch_config_id = mc.id
</sql>

View File

@ -2,6 +2,7 @@ package com.fuint.api.fuyou.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuint.api.fuyou.entity.MerchantConfig;
import io.swagger.models.auth.In;
import java.util.List;
@ -34,7 +35,7 @@ public interface MerchantConfigService extends IService<MerchantConfig> {
* 根据店铺id查询商户信息
* @return
*/
public List<MerchantConfig> selectMeChByIsOpen();
public List<MerchantConfig> selectMeChByIsOpen(Integer storeId);
/**
* 查询所有商户配置信息
@ -97,4 +98,6 @@ public interface MerchantConfigService extends IService<MerchantConfig> {
* @return
*/
public int deleteMerch(Integer id);
boolean subtractAmount(Integer id, String changeTheAmount, String mchntCd);
}

View File

@ -13,7 +13,7 @@ public interface OilConfigService extends IService<OilConfig> {
/**
* 规则配置
*/
public void oilRule();
public void oilRule(Integer storeId);
/**
* 判断占比相加是否为100% 是返回1 不是返回0

View File

@ -9,6 +9,7 @@ import com.fuint.api.fuyou.entity.*;
import com.fuint.api.fuyou.service.FyPayService;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.util.Utils;
import com.fuint.business.commission.service.StaffCommissionService;
import com.fuint.business.integral.entity.IntegralOrders;
import com.fuint.business.integral.service.IntegralOrdersService;
import com.fuint.business.marketingActivity.cardFavorable.entity.CardFavorableRecord;
@ -45,6 +46,9 @@ public class FyPayServiceImpl implements FyPayService {
private CardFuelRecordService cardFuelRecordService;
@Resource
private IntegralOrdersService integralOrdersService;
@Autowired
private StaffCommissionService staffCommissionService;
/**
* 条码支付
* @param map1
@ -171,7 +175,7 @@ public class FyPayServiceImpl implements FyPayService {
// 油品订单
oilOrder.setOrderStatus("paid");
oilOrder.setPayTime(date);
staffCommissionService.countStaffCommission(oilOrder.getStaffId(),oilOrder.getStoreId(),oilOrder.getOrderAmount(),oilOrder.getPayAmount(),oilOrder.getOilNum(),"1",orderNo);
// 修改油罐容量
List<JSONObject> jsonObjects = JSONArray.parseArray(map1.get("oilOrder"), JSONObject.class);
if (jsonObjects.size()<=1) {
@ -193,7 +197,7 @@ public class FyPayServiceImpl implements FyPayService {
// 商品订单
goodsOrder.setStatus("paid");
goodsOrder.setPayTime(date);
staffCommissionService.countStaffCommission(goodsOrder.getStaffId(),goodsOrder.getStoreId(),goodsOrder.getAmount(),goodsOrder.getPayAmount(),0.0,"2",orderNo);
if (!map1.get("goodsOrder").equals("[]")){
List<JSONObject> goods = JSONArray.parseArray(map1.get("goodsOrder"), JSONObject.class);
OrderGoods orderGoods = new OrderGoods();
@ -224,7 +228,14 @@ public class FyPayServiceImpl implements FyPayService {
}
if (!ArrayUtil.isEmpty(list)){
if (list.size()>1){
Double oilLiters = 0.0;
for (OilOrder order : list){
oilLiters += order.getOilNum();
}
for (OilOrder order : list) {
if (order.getOrderType().equals("主订单")){
staffCommissionService.countStaffCommission(order.getStaffId(),order.getStoreId(),order.getOrderAmount(),order.getPayAmount(),oilLiters,"1",orderNo);
}
// 添加多个油品订单
order.setOrderStatus("paid");
order.setPayTime(date);
@ -263,7 +274,7 @@ public class FyPayServiceImpl implements FyPayService {
}
// 修改商户账号余额信息
Double amount = merchantConfig.getAmount();
merchantConfig.setAmount(amount+allAmount);
merchantConfig.setAmount(amount+allAmount/100);
merchantConfigService.updateMerch(merchantConfig);
resMap.put("msg","success");
}else if (reqMap.get("trans_stat").equals("USERPAYING")){
@ -400,7 +411,7 @@ public class FyPayServiceImpl implements FyPayService {
MerchantConfig merchantConfig = merchantConfigService.selectMeChByIdIsUse(receiveParameter.getStoreId());
// MerchantConfig merchantConfig = merchantConfigService.selectMeChByIdIsUse(16);
// 查询用户信息
LJUserVo userVo = userService.selectUserById(receiveParameter.getUserId());
LJUserVo userVo = userService.selectUserById(receiveParameter.getUserId(), receiveParameter.getStoreId());
// 公钥
Const.INS_PUBLIC_KEY = merchantConfig.getPublicKey();
@ -483,12 +494,19 @@ public class FyPayServiceImpl implements FyPayService {
allOrderInfo.setType(receiveParameter.getType());
allOrderInfo.setStoreId(receiveParameter.getStoreId());
allOrderInfo.setGoodsMoney(receiveParameter.getGoodsMoney());
allOrderInfo.setPayMoney(receiveParameter.getGoodsMoney());
allOrderInfo.setPayType(receiveParameter.getPayType());
allOrderInfo.setUserId(receiveParameter.getUserId());
allOrderInfo.setPayChannel("cashier");
allOrderInfo.setStatus(payStatus);
if (payStatus.equals("paid")){
allOrderInfo.setPayTime(new Date());
}
allOrderInfo.setContent(receiveParameter.getContent());
allOrderInfoService.insertAllOrderInfo(allOrderInfo);
AllOrderInfo allOrderInfo1 = allOrderInfoService.selectAllOrderInfoByOrderNo(receiveParameter.getOrderNo());
if (ObjectUtil.isEmpty(allOrderInfo1)){
allOrderInfoService.insertAllOrderInfo(allOrderInfo);
}
}
/**
@ -505,7 +523,10 @@ public class FyPayServiceImpl implements FyPayService {
allOrderInfo.setPayChannel("applet");
allOrderInfo.setStatus("unpaid");
allOrderInfo.setContent(receiveParameter.getContent());
allOrderInfoService.insertAllOrderInfo(allOrderInfo);
AllOrderInfo allOrderInfo1 = allOrderInfoService.selectAllOrderInfoByOrderNo(receiveParameter.getOrderNo());
if (ObjectUtil.isEmpty(allOrderInfo1)){
allOrderInfoService.insertAllOrderInfo(allOrderInfo);
}
}
@Override

View File

@ -7,10 +7,16 @@ import com.fuint.api.fuyou.entity.FuYouPublicMerchant;
import com.fuint.api.fuyou.entity.MerchantConfig;
import com.fuint.api.fuyou.mapper.MerchantConfigMapper;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.service.OilConfigService;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.util.RedisLock;
import com.fuint.common.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
@ -18,6 +24,10 @@ import java.util.List;
*/
@Service
public class MerchantConfigServiceImpl extends ServiceImpl<MerchantConfigMapper, MerchantConfig> implements MerchantConfigService {
@Autowired
@Lazy
private OilConfigService oilConfigService;
@Override
public MerchantConfig selectMeChByIsUse(String isUse) {
QueryWrapper queryWrapper = new QueryWrapper<>();
@ -28,6 +38,10 @@ public class MerchantConfigServiceImpl extends ServiceImpl<MerchantConfigMapper,
@Override
public MerchantConfig selectMeChByIdIsUse(int storeId) {
List<MerchantConfig> list = this.selectMeChByIsOpen(storeId);
if (list.size()>0){
oilConfigService.oilRule(storeId);
}
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_use","1");
queryWrapper.eq("store_id",storeId);
@ -46,9 +60,10 @@ public class MerchantConfigServiceImpl extends ServiceImpl<MerchantConfigMapper,
}
@Override
public List<MerchantConfig> selectMeChByIsOpen() {
public List<MerchantConfig> selectMeChByIsOpen(Integer storeId) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("is_open_rule","1");
queryWrapper.eq("store_id",storeId);
List list = baseMapper.selectList(queryWrapper);
return list;
}
@ -166,4 +181,27 @@ public class MerchantConfigServiceImpl extends ServiceImpl<MerchantConfigMapper,
public int deleteMerch(Integer id) {
return baseMapper.deleteById(id);
}
@Resource
RedisLock redisLock;
public boolean subtractAmount(Integer storeId, String changeTheAmount, String mchntCd) {
String lock = "MerchantConfig"+storeId+mchntCd;
redisLock.lock(lock);
try {
MerchantConfig config = baseMapper.getConfig(storeId,mchntCd);
if (ObjectUtil.isNotEmpty(config)) {
if (new BigDecimal(changeTheAmount).compareTo(new BigDecimal(config.getAmount().toString()))<=0) {
baseMapper.subtractAmount(storeId, changeTheAmount);
}
}
}catch (Exception e){
return false;
} finally {
redisLock.unlock(lock);
}
return true;
}
}

View File

@ -27,10 +27,10 @@ public class OilConfigServiceImpl extends ServiceImpl<OilConfigMapper, OilConfig
private MerchantConfigService merchantConfigService;
@Override
public void oilRule() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
public void oilRule(Integer storeId) {
// AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("store_id",nowAccountInfo.getStoreId());
queryWrapper.eq("store_id",storeId);
List<OilConfig> list = baseMapper.selectList(queryWrapper);
Double amountAll = 0.0;
// 百分占比
@ -54,7 +54,7 @@ public class OilConfigServiceImpl extends ServiceImpl<OilConfigMapper, OilConfig
}
}
// 将其他使用的账户关掉
merchantConfigService.updateMerchOrter(nowAccountInfo.getStoreId());
merchantConfigService.updateMerchOrter(storeId);
// 改变目前使用账户
MerchantConfig merchantConfig = merchantConfigService.selectMerchById(list.get(index).getMerchConfigId());
merchantConfig.setIsUse("1");

View File

@ -7,4 +7,5 @@ import lombok.Data;
public class OilConfigVo extends OilConfig {
private String merchantName;
private String mchntCd;
private String remark;
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.CommissionRecord;
import com.fuint.business.commission.service.CommissionRecordService;
import com.fuint.business.commission.vo.CommissionRecordVo;
import com.fuint.framework.web.BaseController;
import com.fuint.framework.web.ResponseObject;
import org.springframework.web.bind.annotation.*;
@ -89,7 +90,31 @@ public class CommissionRecordController extends BaseController {
return getSuccessResult(this.commissionRecordService.deleteById(id));
}
/**
* 根据条件分页查询提成记录信息
* @param commissionRecord
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("list")
public ResponseObject list(CommissionRecordVo commissionRecord,
@RequestParam(value = "page",defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize) {
Page page = new Page(pageNo, pageSize);
IPage< CommissionRecordVo> iPageList = this.commissionRecordService.selectCommissionList(page, commissionRecord);
return getSuccessResult(iPageList);
}
/**
* 消费总金额
* @param commissionRecord
* @return
*/
@GetMapping("allAmount")
public ResponseObject allAmount(CommissionRecordVo commissionRecord) {
return getSuccessResult(commissionRecordService.selectAllAmount(commissionRecord));
}
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.StaffCommission;
import com.fuint.business.commission.service.StaffCommissionService;
import com.fuint.business.commission.vo.StaffCommissionVo;
import com.fuint.framework.web.BaseController;
import com.fuint.framework.web.ResponseObject;
import org.springframework.beans.factory.annotation.Autowired;
@ -31,7 +32,7 @@ public class StaffCommissionController extends BaseController {
@RequestParam(value = "page",defaultValue = "1") Integer pageNo,
@RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize){
Page page =new Page(pageNo,pageSize);
IPage<StaffCommission> list = commissionService.selectCommissionList(page,commission);
IPage<StaffCommissionVo> list = commissionService.selectCommissionList(page,commission);
return getSuccessResult(list);
}

View File

@ -39,7 +39,7 @@ public class CommissionRecord extends BaseEntity {
@ApiModelProperty("员工id")
private Integer staffId;
/**
* 类型
* 类型 1.油品订单出售2.商品订单出售3.储值卡充值4.油品退款5.商品退款
*/
@ApiModelProperty("类型")
private String type;

View File

@ -1,8 +1,10 @@
package com.fuint.business.commission.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.CommissionRecord;
import com.fuint.business.commission.vo.CommissionRecordVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import java.util.List;
@ -13,7 +15,7 @@ import java.util.List;
* @author wangh
* @since 2023-11-14 13:40:03
*/
public interface CommissionRecordMapper {
public interface CommissionRecordMapper extends BaseMapper<CommissionRecord> {
/**
* 通过ID查询单条数据
@ -81,5 +83,19 @@ public interface CommissionRecordMapper {
*/
int deleteById(Integer id);
/**
* 根据条件分页查询员工提成记录信息
* @param page
* @param commissionRecord
* @return
*/
IPage<CommissionRecordVo> selectCommissionList(@Param("page") Page page,@Param("commissionRecord") CommissionRecordVo commissionRecord);
/**
* 根据条件查询提成总额
* @return
*/
Double selectAllAmount(@Param("commissionRecord") CommissionRecordVo commissionRecord);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.StaffCommission;
import com.fuint.business.commission.vo.StaffCommissionVo;
import org.apache.ibatis.annotations.Param;
public interface StaffCommissionMapper extends BaseMapper<StaffCommission> {
@ -12,5 +13,5 @@ public interface StaffCommissionMapper extends BaseMapper<StaffCommission> {
* @param page
* @return
*/
public IPage<StaffCommission> selectCommissionList(Page page,@Param("commission") StaffCommission commission);
public IPage<StaffCommissionVo> selectCommissionList(Page page, @Param("commission") StaffCommission commission);
}

View File

@ -183,5 +183,55 @@
delete from commission_record where id = #{id}
</delete>
<select id="selectCommissionList" resultType="com.fuint.business.commission.vo.CommissionRecordVo">
select cr.*,ms.real_name,ms.mobile from commission_record cr
left join mt_staff ms on cr.staff_id = ms.id
<where>
<if test="commissionRecord.storeId != null and commissionRecord.storeId != ''">
and cr.store_id = #{commissionRecord.storeId}
</if>
<if test="commissionRecord.staffId != null and commissionRecord.staffId != ''">
and cr.staff_id = #{commissionRecord.staffId}
</if>
<if test="commissionRecord.type != null and commissionRecord.type != ''">
and cr.type like concat('%', #{commissionRecord.type}, '%')
</if>
<if test="commissionRecord.orderNo != null and commissionRecord.orderNo != ''">
and cr.order_no like concat('%', #{commissionRecord.orderNo}, '%')
</if>
<if test="commissionRecord.params.beginTime != null and commissionRecord.params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(cr.create_time,'%y%m%d') &gt;= date_format(#{commissionRecord.params.beginTime},'%y%m%d')
</if>
<if test="commissionRecord.params.endTime != null and commissionRecord.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(cr.create_time,'%y%m%d') &lt;= date_format(#{commissionRecord.params.endTime},'%y%m%d')
</if>
</where>
order by cr.create_time desc
</select>
<select id="selectAllAmount" resultType="java.lang.Double"
parameterType="com.fuint.business.commission.vo.CommissionRecordVo">
select sum(amount) from commission_record
<where>
<if test="commissionRecord.storeId != null and commissionRecord.storeId != ''">
and store_id = #{commissionRecord.storeId}
</if>
<if test="commissionRecord.staffId != null and commissionRecord.staffId != ''">
and staff_id = #{commissionRecord.staffId}
</if>
<if test="commissionRecord.type != null and commissionRecord.type != ''">
and type like concat('%', #{commissionRecord.type}, '%')
</if>
<if test="commissionRecord.orderNo != null and commissionRecord.orderNo != ''">
and order_no like concat('%', #{commissionRecord.orderNo}, '%')
</if>
<if test="commissionRecord.params.beginTime != null and commissionRecord.params.beginTime != ''"><!-- 开始时间检索 -->
and date_format(create_time,'%y%m%d') &gt;= date_format(#{commissionRecord.params.beginTime},'%y%m%d')
</if>
<if test="commissionRecord.params.endTime != null and commissionRecord.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(create_time,'%y%m%d') &lt;= date_format(#{commissionRecord.params.endTime},'%y%m%d')
</if>
</where>
</select>
</mapper>

View File

@ -2,14 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuint.business.commission.mapper.StaffCommissionMapper">
<sql id="selectCommission">
select * from staff_commission
select sc.*,td.duty_name from staff_commission sc left join t_duty td on sc.staff_role_group = td.duty_id
</sql>
<select id="selectCommissionList" resultType="com.fuint.business.commission.entity.StaffCommission">
<select id="selectCommissionList" resultType="com.fuint.business.commission.vo.StaffCommissionVo">
<include refid="selectCommission"></include>
<where>
store_id = #{commission.storeId}
and commission_source = #{commission.commissionSource}
sc.store_id = #{commission.storeId}
and sc.commission_source = #{commission.commissionSource}
</where>
</select>
</mapper>

View File

@ -3,6 +3,7 @@ package com.fuint.business.commission.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.CommissionRecord;
import com.fuint.business.commission.vo.CommissionRecordVo;
import io.lettuce.core.dynamic.annotation.Param;
@ -56,4 +57,33 @@ public interface CommissionRecordService {
*/
boolean deleteById(Integer id);
/**
* 添加提成记录信息
* @param commissionRecord
* @return
*/
int insertRecord(CommissionRecord commissionRecord);
/**
* 根据条件分页查询员工提成记录信息
* @param page
* @param commissionRecord
* @return
*/
IPage<CommissionRecordVo> selectCommissionList(Page page, CommissionRecordVo commissionRecord);
/**
* 根据条件查询提成总额
* @return
*/
Double selectAllAmount(CommissionRecordVo commissionRecord);
/**
* 添加退款提成记录信息
* @param orderNo 订单号
* @param type 订单类型1油品2商品
* @param staffId 员工id
* @param storeId 店铺id
*/
void addRefundRecord(String orderNo,String type,Integer staffId,Integer storeId);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuint.business.commission.entity.StaffCommission;
import com.fuint.business.commission.vo.StaffCommissionVo;
import java.util.List;
import java.util.Map;
@ -17,7 +18,7 @@ public interface StaffCommissionService extends IService<StaffCommission> {
* @param page
* @return
*/
public IPage<StaffCommission> selectCommissionList(Page page, StaffCommission commission);
public IPage<StaffCommissionVo> selectCommissionList(Page page, StaffCommission commission);
/**
* 根据id查询员工提成方案信息
@ -53,4 +54,15 @@ public interface StaffCommissionService extends IService<StaffCommission> {
*/
public int updateStaffCommission(StaffCommission commission);
/**
* 根据员工id计算提成金额
* @param staffId 员工id
* @param storeId 店铺id
* @param amount 订单金额
* @param payAmount 实付金额
* @param oilLiters 油品消费升数
* @param type 订单类型油品非油品
* @param orderNo 关联订单号
*/
void countStaffCommission(Integer staffId,Integer storeId,Double amount,Double payAmount,Double oilLiters,String type,String orderNo);
}

View File

@ -1,10 +1,13 @@
package com.fuint.business.commission.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.commission.entity.CommissionRecord;
import com.fuint.business.commission.mapper.CommissionRecordMapper;
import com.fuint.business.commission.service.CommissionRecordService;
import com.fuint.business.commission.vo.CommissionRecordVo;
import org.springframework.stereotype.Service;
import com.fuint.common.util.TokenUtil;
import io.lettuce.core.dynamic.annotation.Param;
@ -66,6 +69,9 @@ public class CommissionRecordServiceImpl implements CommissionRecordService {
@Override
public CommissionRecord insert2(CommissionRecord commissionRecord) {
int insert = this.commissionRecordMapper.insert(commissionRecord);
return commissionRecord;
}
@ -92,4 +98,63 @@ public class CommissionRecordServiceImpl implements CommissionRecordService {
public boolean deleteById(Integer id) {
return this.commissionRecordMapper.deleteById(id) > 0;
}
@Override
public int insertRecord(CommissionRecord commissionRecord) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("staff_id",commissionRecord.getStaffId());
queryWrapper.eq("store_id",commissionRecord.getStoreId());
queryWrapper.eq("type",commissionRecord.getType());
queryWrapper.eq("order_no",commissionRecord.getOrderNo());
CommissionRecord commissionRecord1 = commissionRecordMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(commissionRecord1)){
return 0;
}
return commissionRecordMapper.insert(commissionRecord);
}
@Override
public IPage<CommissionRecordVo> selectCommissionList(Page page, CommissionRecordVo commissionRecord) {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
commissionRecord.setStoreId(nowAccountInfo.getStoreId());
return commissionRecordMapper.selectCommissionList(page, commissionRecord);
}
@Override
public Double selectAllAmount(CommissionRecordVo commissionRecord) {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
commissionRecord.setStoreId(nowAccountInfo.getStoreId());
return commissionRecordMapper.selectAllAmount(commissionRecord);
}
@Override
public void addRefundRecord(String orderNo, String type, Integer staffId, Integer storeId) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("staff_id",staffId);
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("type",type);
queryWrapper.eq("order_no",orderNo);
CommissionRecord commissionRecord = commissionRecordMapper.selectOne(queryWrapper);
if (ObjectUtil.isNotEmpty(commissionRecord)){
CommissionRecord record = new CommissionRecord();
if (type.equals("1")){
record.setType("4");
record.setStaffId(staffId);
record.setStoreId(storeId);
record.setDescription("油品退款订单");
record.setOrderNo(orderNo);
record.setAmount(-commissionRecord.getAmount());
commissionRecordMapper.insert(record);
}
if (type.equals("2")){
record.setType("5");
record.setStaffId(staffId);
record.setStoreId(storeId);
record.setDescription("商品退款订单");
record.setOrderNo(orderNo);
record.setAmount(-commissionRecord.getAmount());
commissionRecordMapper.insert(record);
}
}
}
}

View File

@ -1,14 +1,21 @@
package com.fuint.business.commission.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fuint.business.commission.entity.CommissionRecord;
import com.fuint.business.commission.entity.StaffCommission;
import com.fuint.business.commission.mapper.StaffCommissionMapper;
import com.fuint.business.commission.service.CommissionRecordService;
import com.fuint.business.commission.service.StaffCommissionService;
import com.fuint.business.commission.vo.StaffCommissionVo;
import com.fuint.business.member.entity.LJStaff;
import com.fuint.business.member.service.ILJStaffService;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.util.TokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
@ -26,26 +33,12 @@ import java.util.Map;
@Service
public class StaffCommissionServiceImpl extends ServiceImpl<StaffCommissionMapper, StaffCommission> implements StaffCommissionService {
@Override
public IPage<StaffCommission> selectCommissionList(Page page, StaffCommission commission) {
public IPage<StaffCommissionVo> selectCommissionList(Page page, StaffCommission commission) {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
commission.setStoreId(storeId);
IPage<StaffCommission> staffCommissionIPage = baseMapper.selectCommissionList(page, commission);
for (StaffCommission record : staffCommissionIPage.getRecords()) {
if (record.getTakeEffect()!=null && record.getTakeEffect().equals("")){
String substring = record.getTakeEffect().substring(24, 43);
Date date = new Date();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String now = dateFormat.format(date);
int row = substring.compareTo(now);
if (row == -1){
record.setStatus("jy");
baseMapper.updateById(record);
}
}
}
IPage<StaffCommission> commissionIPage = baseMapper.selectCommissionList(page, commission);
return commissionIPage;
IPage<StaffCommissionVo> staffCommissionIPage = baseMapper.selectCommissionList(page, commission);
return staffCommissionIPage;
}
@Override
@ -74,18 +67,129 @@ public class StaffCommissionServiceImpl extends ServiceImpl<StaffCommissionMappe
@Override
public int insertStaffCommission(StaffCommission commission) {
StaffCommission staffCommission = this.selectCommissionByRole(commission);
int row = 0;
// 判断当前店铺是否存在同角色的同一提成方案
if (ObjectUtil.isNotEmpty(staffCommission)){
row = 0;
return row;
}
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
commission.setStoreId(storeId);
int row = baseMapper.insert(commission);
row = baseMapper.insert(commission);
return row;
}
@Override
public int updateStaffCommission(StaffCommission commission) {
int row = baseMapper.updateById(commission);
StaffCommission staffCommission = this.selectCommissionByRole(commission);
int row = 0;
// 判断当前店铺是否存在同角色的同一提成方案
if (ObjectUtil.isNotEmpty(staffCommission) && staffCommission.getId()!=commission.getId()){
row = 0;
return row;
}
row = baseMapper.updateById(commission);
return row;
}
@Autowired
private CommissionRecordService commissionRecordService;
@Autowired
private ILJStaffService staffService;
@Override
public void countStaffCommission(Integer staffId,Integer storeId,Double amount,Double payAmount,Double oilLiters,String type,String orderNo) {
LJStaff staff = staffService.selectStaffById(staffId);
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("store_id",storeId);
queryWrapper.eq("status","qy");
// 查询当前店铺启用的提成方案信息
List<StaffCommission> list = baseMapper.selectList(queryWrapper);
if (list.size()>0 && ObjectUtil.isNotEmpty(staff)){
for (StaffCommission staffCommission : list) {
CommissionRecord commissionRecord = new CommissionRecord();
if (type.equals("1") && staffCommission.getCommissionSource().equals("油品")
&& staff.getRoleId().equals(staffCommission.getStaffRoleGroup())){
commissionRecord.setStaffId(staffId);
commissionRecord.setStoreId(storeId);
commissionRecord.setType(type);
commissionRecord.setDescription(staffCommission.getCommissionSource()+"订单出售提成");
commissionRecord.setOrderNo(orderNo);
Double royaltyRate = Double.valueOf(staffCommission.getRoyaltyRate().substring(0,staffCommission.getRoyaltyRate().length()-1));
String unit = staffCommission.getRoyaltyRate().substring(staffCommission.getRoyaltyRate().length()-1);
// 按照订单金额计算提成
if (staffCommission.getType().equals("orderAmount")){
if (amount>=Double.valueOf(staffCommission.getMeetCondition())){
if (unit.equals("")){
commissionRecord.setAmount(royaltyRate);
}
if (unit.equals("%")){
commissionRecord.setAmount(amount*(royaltyRate/100));
}
commissionRecordService.insertRecord(commissionRecord);
}
}
// 按照实付金额计算提成
if (staffCommission.getType().equals("payAmount")){
if (payAmount>=Double.valueOf(staffCommission.getMeetCondition())){
if (unit.equals("")){
commissionRecord.setAmount(royaltyRate);
}
if (unit.equals("%")){
commissionRecord.setAmount(payAmount*(royaltyRate/100));
}
commissionRecordService.insertRecord(commissionRecord);
}
}
// 按照加油数量计算提成
if (staffCommission.getType().equals("refuleNum")){
if (oilLiters>=Double.valueOf(staffCommission.getMeetCondition())){
if (unit.equals("")){
commissionRecord.setAmount(royaltyRate);
}
if (unit.equals("%")){
commissionRecord.setAmount(oilLiters*(royaltyRate/100));
}
commissionRecordService.insertRecord(commissionRecord);
}
}
}
if (type.equals("2") && staffCommission.getCommissionSource().equals("非油品")
&& staff.getRoleId().equals(staffCommission.getStaffRoleGroup())){
commissionRecord.setStaffId(staffId);
commissionRecord.setStoreId(storeId);
commissionRecord.setType(staffCommission.getCommissionSource()+"订单出售");
commissionRecord.setDescription(staffCommission.getCommissionSource()+"订单出售提成");
commissionRecord.setOrderNo(orderNo);
Double royaltyRate = Double.valueOf(staffCommission.getRoyaltyRate().substring(0,staffCommission.getRoyaltyRate().length()-1));
String unit = staffCommission.getRoyaltyRate().substring(staffCommission.getRoyaltyRate().length()-1);
// 按照订单金额计算提成
if (staffCommission.getType().equals("orderAmount")){
if (amount>=Double.valueOf(staffCommission.getMeetCondition())){
if (unit.equals("")){
commissionRecord.setAmount(royaltyRate);
}
if (unit.equals("%")){
commissionRecord.setAmount(amount*(royaltyRate/100));
}
}
}
// 按照实付金额计算提成
if (staffCommission.getType().equals("payAmount")){
if (payAmount>=Double.valueOf(staffCommission.getMeetCondition())){
if (unit.equals("")){
commissionRecord.setAmount(royaltyRate);
}
if (unit.equals("%")){
commissionRecord.setAmount(payAmount*(royaltyRate/100));
}
}
}
commissionRecordService.insertRecord(commissionRecord);
}
}
}
}
}

View File

@ -1,4 +1,16 @@
package com.fuint.business.commission.vo;
public class CommissionRecordVo {
import com.fuint.business.commission.entity.CommissionRecord;
import lombok.Data;
@Data
public class CommissionRecordVo extends CommissionRecord {
/**
* 员工姓名
*/
private String realName;
/**
* 员工手机号
*/
private String mobile;
}

View File

@ -0,0 +1,12 @@
package com.fuint.business.commission.vo;
import com.fuint.business.commission.entity.StaffCommission;
import lombok.Data;
@Data
public class StaffCommissionVo extends StaffCommission {
/**
* 角色名
*/
private String dutyName;
}

View File

@ -12,5 +12,8 @@ public class LJGoodsDto extends LJGoods {
// 变动原因
private String document;
private String oddNumber;
}

View File

@ -55,6 +55,6 @@ public interface StockStatisticService extends IService<StockStatistic> {
public void deleteStock(Integer goodsId);
public int editStock(StockStatistic stock);
int editStockCostAmount(StockStatistic stock);
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -240,12 +241,12 @@ public class LJGoodsServiceImpl extends ServiceImpl<LJGoodsMapper, LJGoods> impl
// 添加统计信息
public boolean addStockStatistic(LJGoodsDto goods) {
StockStatistic stock = new StockStatistic();
stock.setId(goods.getId());
stock.setGoodsId(goods.getId());
BigDecimal Price = new BigDecimal(goods.getBuyingPrice());
BigDecimal Stock = new BigDecimal(goods.getStock());
BigDecimal multiply = Price.multiply(Stock);
stock.setCostAmount(multiply.doubleValue());
int i = stockService.editStock(stock);
int i = stockService.editStockCostAmount(stock);
return i>0;
}
@ -257,6 +258,7 @@ public class LJGoodsServiceImpl extends ServiceImpl<LJGoodsMapper, LJGoods> impl
stockTrack.setStoreId(goods.getStoreId());
stockTrack.setDocument(goods.getDocument());
stockTrack.setChangeNumber(goods.getNumberOfChanges());
stockTrack.setOddNumber(goods.getOddNumber());
int i = trackService.insertStockTrack(stockTrack);
return i>0;
}

View File

@ -1,6 +1,7 @@
package com.fuint.business.convenienceSore.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -98,4 +99,13 @@ public class StockStatisticServiceImpl extends ServiceImpl<StockStatisticMapper,
}
@Override
public int editStockCostAmount(StockStatistic stock) {
LambdaUpdateWrapper<StockStatistic> lambdaUpdateWrapper = new LambdaUpdateWrapper();
lambdaUpdateWrapper.set(StockStatistic::getCostAmount,stock.getCostAmount());
lambdaUpdateWrapper.eq(StockStatistic::getGoodsId,stock.getGoodsId());
return baseMapper.update(stock,lambdaUpdateWrapper);
}
}

View File

@ -508,7 +508,7 @@ public class IntegralOrdersServiceImpl implements IntegralOrdersService {
if (flag) {
// 调用支付接口
// 判断是否开启支付规则
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen();
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen(integralOrdersList.getStoreId());
// if (list.size() > 0) {
// oilConfigService.oilRule();
// }

View File

@ -60,7 +60,7 @@ public class ActiveNewlywedsRecordsServiceImpl extends ServiceImpl<ActiveNewlywe
//用户信息
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer userId = nowAccountInfo.getId();
LJUserVo ljUserVo = userService.selectUserById(userId);
LJUserVo ljUserVo = userService.selectUserById(userId,activeNewlywedsRecords.getStoreId());
//保存新人有礼记录
ActiveNewlywedsVO activeNewlyweds = activeNewlywedsService.getOneByStoreId(activeNewlywedsRecords.getStoreId());
activeNewlywedsRecords.setActiveNewlywedsId(activeNewlyweds.getId());

View File

@ -13,6 +13,7 @@ import com.fuint.business.marketingActivity.cardFavorable.service.CardFavorableR
import com.fuint.business.marketingActivity.cardFavorable.service.CardFavorableService;
import com.fuint.business.marketingActivity.cardFavorable.vo.CardFavorableRecordVO;
import com.fuint.business.petrolStationManagement.service.OilNameService;
import com.fuint.business.userManager.entity.LJUser;
import com.fuint.business.userManager.service.LJUserService;
import com.fuint.business.userManager.vo.LJUserVo;
import com.fuint.common.dto.AccountInfo;
@ -118,7 +119,7 @@ public class CardFavorableRecordServiceImpl extends ServiceImpl<CardFavorableRec
boolean save = false;
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer userId = nowAccountInfo.getId();
LJUserVo ljUserVo = userService.selectUserById(userId);
LJUser ljUserVo = userService.queryUserByUserId(userId);;
CardFavorableRecord cardFavorableRecord = new CardFavorableRecord();
//优惠券
for (Integer id : idList.getIdList()) {

View File

@ -95,12 +95,19 @@
bid_balance bidBalance,
recharge_balance rechargeBalance,
gift_balance giftBalance,
payment_type paymentType,
CASE
WHEN payment_type = 'WECHAT' THEN '微信支付'
WHEN payment_type = 'ALIPAY' THEN '支付宝支付'
WHEN payment_type = 'CASH' THEN '现金支付'
ELSE '其他'
END AS paymentType,
CASE
WHEN pay_status = 'paid' THEN '已支付'
WHEN pay_status = 'payFail' THEN '支付失败'
WHEN pay_status = 'unpaid' THEN '未支付'
ELSE '未知'
WHEN pay_status = 'refund' THEN '已退款'
ELSE '未知'
END AS payStatus,
remark remark,
fringe_benefit fringeBenefit,
@ -124,6 +131,8 @@
</if>
</where>
order by create_time desc
</select>
<select id="cardStream" resultType="java.util.Map">
SELECT

View File

@ -318,7 +318,7 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
bigDecimal = bigDecimal.add(new BigDecimal(cardValueRecordDTO.getGiftBalance()).add(new BigDecimal(cardValueRecordDTO.getRechargeBalance().toString())));
cardValueRecordDTO.setBidBalance(bigDecimal.doubleValue());
}
if (ObjectUtils.isEmpty(cardValueRecordDTO.getMtStaffId())) {
if (ObjectUtils.isEmpty(cardValueRecordDTO.getMtStaffId()) || cardValueRecordDTO.getMtStaffId() == 0) {
cardValueRecordDTO.setMtStaffId(nowAccountInfo.getStaffId());
}
baseMapper.insert(cardValueRecordDTO);
@ -472,7 +472,7 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
// 成长值变动明细
// 员工提成
if (!ObjectUtil.isEmpty(cardValueRecord.getRoyaltyType()) && !"1".equals(cardValueRecord.getRoyaltyType())) {
if (ObjectUtil.isNotEmpty(cardValueRecord.getMtStaffId()) && !ObjectUtil.isEmpty(cardValueRecord.getRoyaltyType()) && !"1".equals(cardValueRecord.getRoyaltyType())) {
CommissionRecord commissionRecord = employeeCommissions(cardValueRecord);
commissionRecordService.insert2(commissionRecord);
}
@ -529,6 +529,7 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
cardValueRecord.setStatus("1");
baseMapper.updateById(updateCardValueRecord);
redisLock.unlock(lockKey);
} else {
redisLock.unlock(lockKey);
@ -562,8 +563,9 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
if (ObjectUtil.isEmpty(ljUserVos.getPoints())) ljUserVos.setPoints(0);
if (ObjectUtil.isEmpty(ljUserVos.getGrowthValue())) ljUserVos.setGrowthValue(0);
// 计算之后修改对应余额
BigDecimal bigBidBalance = new BigDecimal(cardValueRecordDTO.getBidBalance());
BigDecimal bigBidBalance = new BigDecimal(cardValueRecordDTO.getRechargeBalance());
BigDecimal addCardValance = bigBidBalance.add(new BigDecimal(ljUserVos.getCardBalance())); //
@ -605,7 +607,7 @@ public class CardValueRecordServiceImpl extends ServiceImpl<CardValueRecordMappe
commissionRecord.setAmount(cardValueRecord.getAmountCommission());
commissionRecord.setOrderNo(cardValueRecord.getPaymentNo());
commissionRecord.setDescription("余额充值提成");
commissionRecord.setType("余额充值");
commissionRecord.setType("3");
commissionRecord.setStoreId(cardValueRecord.getStoreId());
return commissionRecord;
}

View File

@ -210,6 +210,7 @@ public class LJStaffServiceImpl extends ServiceImpl<LJStaffMapper, LJStaff> impl
if (StringUtils.isNotEmpty(staff.getPassword())){
TAccount tAccount = accountService.selectAccountByStaffId(staff.getId());
tAccount.setPassword(staff.getPassword());
tAccount.setAccountName(staff.getMobile());
accountService.entryptPassword(tAccount);
try {
accountService.editAccount(tAccount,null);

View File

@ -71,4 +71,9 @@ public class AllOrderInfoController extends BaseController {
public ResponseObject refund(@RequestBody Map<String,String> map){
return getSuccessResult(allOrderInfoService.refund(map));
}
@GetMapping("/getOrderInfo")
public ResponseObject getOrderInfo(String orderNo, String type) {
return getSuccessResult(allOrderInfoService.getOrderInfo(orderNo,type));
}
}

View File

@ -103,6 +103,11 @@ public class HandoverRecordController extends BaseController {
return getSuccessResult(handoverRecordService.handover());
}
@GetMapping("handoverByAllOrder")
public ResponseObject handoverByAllOrder() {
return getSuccessResult(handoverRecordService.handoverByAllOrder());
}
/**
* 本地打印
* @return

View File

@ -98,5 +98,9 @@ public class CashierOrder extends BaseEntity implements Serializable {
* 退款备注
*/
private String refundRemark;
/**
* 支付方式
*/
private String payType;
}

View File

@ -125,7 +125,7 @@ public class OilOrder extends BaseEntity implements Serializable {
/**
* 油罐id
*/
@TableField(exist = false)
// @TableField(exist = false)
private Integer tankId;
}

View File

@ -39,17 +39,17 @@ public interface HangBillMapper extends BaseMapper<HangBill> {
* 查询当前店铺所有的订单总额
* @return
*/
double selectAllAmount(@Param("storeId") int storeId);
Double selectAllAmount(@Param("storeId") int storeId);
/**
* 查询当前店铺归还的账单总额
* @return
*/
double selectReturnAmount(@Param("storeId") int storeId);
Double selectReturnAmount(@Param("storeId") int storeId);
/**
* 查询当前店铺未归还的账单总额
* @return
*/
double selectNoReturnAmount(@Param("storeId") int storeId);
Double selectNoReturnAmount(@Param("storeId") int storeId);
}

View File

@ -54,7 +54,7 @@
<if test="allOrderInfo.params.endTime != null and allOrderInfo.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(pay_time,'%y%m%d') &lt;= date_format(#{allOrderInfo.params.endTime},'%y%m%d')
</if>
order by pay_time desc
order by aoi.create_time desc
</select>
<select id="sumPayMoney" resultType="java.lang.String">
select

View File

@ -18,7 +18,7 @@
<if test="order.status != null and order.status != ''">
and cvco.status = #{order.status}
</if>
order by cvco.pay_time desc
order by cvco.create_time desc
</where>
</select>
</mapper>

View File

@ -24,7 +24,7 @@
<if test="order.params.endTime != null and order.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(pay_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
order by pay_time desc
order by create_time desc
</where>
</select>
<select id="selectCashierOrderById" resultType="com.fuint.business.order.vo.CashierOrderVo"
@ -50,6 +50,7 @@
WHEN co.status = 'paid' THEN '已支付'
WHEN co.status = 'payFail' THEN '支付失败'
WHEN co.status = 'unpaid' THEN '未支付'
WHEN co.status = 'refund' THEN '已退款'
ELSE '未知'
END AS status,
co.pay_time payTime
@ -72,6 +73,7 @@
<if test="order.params.endTime != null and order.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(pay_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
order by co.create_time Desc
</where>
</select>

View File

@ -208,9 +208,9 @@ limit 1
<select id="oilOrderStatistics" resultType="java.util.Map">
select
sum(order_amount) oilOrder,-- 油品订单
sum(if(order_status='refund',discount_amount,0)) oilRefund, -- 退款
sum(if(order_status='paid',pay_amount,0)) oilPaid,
sum(if(order_status='paid',discount_amount,0)) oilDiacount
sum(if(order_status='refund',discount_amount,0.00)) oilRefund, -- 退款
sum(if(order_status='paid',pay_amount,0.00)) oilPaid,
sum(if(order_status='paid',discount_amount,0.00)) oilDiacount
from oil_order
where store_id = #{storeId}
and create_time BETWEEN #{startTime} AND #{endTime};
@ -321,6 +321,7 @@ limit 1
left join oil_name onn on on1.oil_name = onn.id
left join oil_order oo on oo.oils = onn.id
where on1.store_id = #{storeId}
and oo.store_id = 60
and oo.create_time BETWEEN #{startTime} AND #{endTime}
GROUP BY oo.oils
</select>

View File

@ -36,6 +36,7 @@
<if test="hangBill.params.endTime != null and hangBill.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(hb.create_time,'%y%m%d') &lt;= date_format(#{hangBill.params.endTime},'%y%m%d')
</if>
order by create_time desc
</where>
</select>
<select id="selectHangBillById" resultType="com.fuint.business.order.vo.HangBillVo" parameterType="int">
@ -52,13 +53,13 @@
</where>
</select>
<select id="selectAllAmount" resultType="double">
<select id="selectAllAmount" resultType="java.lang.Double">
select sum(amount) from hang_bill where store_id = #{storeId}
</select>
<select id="selectReturnAmount" resultType="double">
<select id="selectReturnAmount" resultType="java.lang.Double">
select sum(repaid_amount) from hang_bill where store_id = #{storeId}
</select>
<select id="selectNoReturnAmount" resultType="double">
<select id="selectNoReturnAmount" resultType="java.lang.Double">
select sum(outstand_amount) from hang_bill where store_id = #{storeId}
</select>
</mapper>

View File

@ -30,7 +30,7 @@
<if test="order.params.endTime != null and order.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(create_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
order by pay_time desc
order by create_time desc
</where>
</select>
<select id="getMtOrderList" resultType="com.fuint.business.order.vo.LJOrderVo">
@ -66,12 +66,18 @@
oo.goods_num goodsNum,
oo.pay_amount payAmount,
oo.pay_user payUser,
oo.pay_type payType,
CASE
WHEN oo.pay_type = 'WECHAT' THEN '微信支付'
WHEN oo.pay_type = 'ALIPAY' THEN '支付宝支付'
WHEN oo.pay_type = 'CASH' THEN '现金支付'
ELSE '其他'
END AS payType,
oo.pay_time payTime,
CASE
WHEN oo.status = 'paid' THEN '已支付'
WHEN oo.status = 'payFail' THEN '支付失败'
WHEN oo.status = 'unpaid' THEN '未支付'
WHEN oo.status = 'refund' THEN '已退款'
ELSE '未知'
END AS status
from mt_order oo
@ -97,6 +103,7 @@
and date_format(oo.create_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
</where>
order by oo.create_time desc
</select>
<select id="goodsStream" resultType="java.util.Map">
SELECT

View File

@ -39,7 +39,7 @@
<if test="order.params.endTime != null and order.params.endTime != ''"><!-- 结束时间检索 -->
and date_format(pay_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
order by pay_time desc
order by create_time desc
</where>
</select>
<select id="selectOilOrderByOrderNo" resultType="com.fuint.business.order.vo.OilOrderVo"
@ -75,7 +75,7 @@
<if test="order.remark != null and order.remark != ''">
and remark = #{order.remark}
</if>
order by pay_time desc
order by create_time desc
</where>
</select>
@ -116,7 +116,7 @@
co.terminal terminal,
onu.oil_name oilName,
co.order_no orderNo,
CONCAT(onu.oil_name ,'/', co.oil_gun_num) oilGunNum,
CONCAT(onu.oil_name ,'/', og.gun_name) oilGunNum,
co.order_amount orderAmount,
co.discount_amount discountAmount,
co.pay_amount payAmount,
@ -125,12 +125,14 @@
WHEN co.order_status = 'paid' THEN '已支付'
WHEN co.order_status = 'payFail' THEN '支付失败'
WHEN co.order_status = 'unpaid' THEN '未支付'
ELSE '未知'
WHEN co.order_status = 'refund' THEN '已退款'
ELSE '未知'
END AS orderStatus,
co.invoicing invoicing,
co.pay_time payTime
from oil_order co
left join oil_name onu on co.oils = onu.id
left join oil_gun og on co.oil_gun_num = og.id
left join mt_staff st on co.staff_id = st.id
<where>
co.store_id = #{order.storeId}
@ -165,6 +167,7 @@
and date_format(pay_time,'%y%m%d') &lt;= date_format(#{order.params.endTime},'%y%m%d')
</if>
</where>
order by co.create_time desc
</select>
<select id="oilStream" resultType="java.util.Map">

View File

@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fuint.business.order.mapper.OrderGoodsMapper">
<sql id="selectOrderGoods">
select mog.id,mog.order_id,mog.goods_id,mg.name,mg.retail_price,mg.member_price,mog.num
select mog.id,mog.order_id,mog.goods_id as goods_id,mg.id as goodsId,mg.name,mg.retail_price,mg.member_price,mog.num
from mt_order_goods mog inner join mt_goods mg on mog.goods_id = mg.id
</sql>

View File

@ -12,7 +12,7 @@
<include refid="selectReturnRecord"></include>
<where>
rd.hang_bill_id = #{returnRecord.hangBillId}
order by pay_time desc
order by rd.create_time desc
</where>
</select>
<!-- <select id="selectHangBillById" resultType="com.fuint.business.order.vo.HangBillVo" parameterType="int">-->

View File

@ -60,4 +60,7 @@ public interface AllOrderInfoService {
public int getOrderNum(Integer StoreId);
Map<String,String> getOrderInfo(String orderNo, String type);
}

View File

@ -61,6 +61,8 @@ public interface HandoverRecordService {
public Map<String, Object> handover();
public Map<String, Object> handoverByAllOrder();
public void printLocally(Map<String, Object> aa);

View File

@ -83,7 +83,7 @@ public interface HangBillService extends IService<HangBill> {
* 查询当前店铺所有的订单总额
* @return
*/
double selectAllAmount();
Double selectAllAmount();
/**
* 查询当前店铺归还账单的数量
@ -95,11 +95,11 @@ public interface HangBillService extends IService<HangBill> {
* 查询当前店铺归还的账单总额
* @return
*/
double selectReturnAmount();
Double selectReturnAmount();
/**
* 查询当前店铺未归还的账单总额
* @return
*/
double selectNoReturnAmount();
Double selectNoReturnAmount();
}

View File

@ -11,6 +11,7 @@ import com.fuint.api.fuyou.entity.Const;
import com.fuint.api.fuyou.entity.MerchantConfig;
import com.fuint.api.fuyou.service.FyPayService;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.business.commission.service.CommissionRecordService;
import com.fuint.business.convenienceSore.dto.LJGoodsDto;
import com.fuint.business.convenienceSore.entity.StockStatistic;
import com.fuint.business.convenienceSore.entity.StockTrack;
@ -24,7 +25,9 @@ import com.fuint.business.order.mapper.AllOrderInfoMapper;
import com.fuint.business.order.service.*;
import com.fuint.business.order.vo.AllOrderInfoVo;
import com.fuint.business.order.vo.OrderGoodsVo;
import com.fuint.business.petrolStationManagement.entity.OilGun;
import com.fuint.business.petrolStationManagement.entity.OilTracking;
import com.fuint.business.petrolStationManagement.service.OilGunService;
import com.fuint.business.petrolStationManagement.service.OilTankService;
import com.fuint.business.petrolStationManagement.service.OilTrackingService;
import com.fuint.repository.mapper.MtOpenGiftMapper;
@ -32,9 +35,11 @@ import com.fuint.repository.model.MtOrderGoods;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@ -76,7 +81,13 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
@Override
public int insertAllOrderInfo(AllOrderInfo allOrderInfo) {
return baseMapper.insert(allOrderInfo);
int row = 0;
AllOrderInfo allOrderInfo1 = this.selectAllOrderInfoByOrderNo(allOrderInfo.getOrderNo());
if (ObjectUtil.isNotEmpty(allOrderInfo1)){
return row;
}
row = baseMapper.insert(allOrderInfo);
return row;
}
@ -124,7 +135,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
LJOrderService ljOrderService;
@Resource
StockTrackService service;
@Resource
OrderGoodsService orderGoodsService;
@Resource
OilTankService oilTankService;
@ -132,29 +143,34 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
OilOrderService oilOrderService;
@Resource
OilTrackingService oilTrackingService;
@Resource
CommissionRecordService commissionRecordService;
@Override
@Transactional
public int refund(Map<String, String> map) {
Map<String, String> refund = null;
Map<String, String> refund = new HashMap<>();
try {
AllOrderInfo allOrderInfo = selectAllOrderInfoByOrderNo(map.get("orderNo"));
if (ObjectUtil.isEmpty(map.get("type"))) {
throw new RuntimeException("该订单不支持退款,无退款类别!");
}else if ("oilOrder".equals(map.get("type")) || "goodsOrder".equals(map.get("type"))) {
}else if ("canRefund".equals(map.get("type"))) {
// 根据订单号查询订单
if ("APPLET_CODE".equals(allOrderInfo.getPayType())) { // 储值卡不支持退款
throw new RuntimeException("该订单不支持退款!");
}
// 判断是否有退款金额
if (ObjectUtil.isNotEmpty(allOrderInfo.getPayMoney()) && ObjectUtil.isNotEmpty(map.get("refundAmt"))) {
// 判断是否有退款金额 && ObjectUtil.isNotEmpty(map.get("refundAmt") // 目前全退
if (ObjectUtil.isNotEmpty(allOrderInfo.getPayMoney())) {
Integer money = (int)(allOrderInfo.getPayMoney() * 100);
// 总金额金钱的传值需要×100
BigDecimal payMoneyBig = new BigDecimal(allOrderInfo.getPayMoney().toString());
BigDecimal payMoneyBefBig = payMoneyBig.multiply(new BigDecimal("100"));
// BigDecimal payMoneyBig = new BigDecimal(allOrderInfo.getPayMoney().toString());
// BigDecimal payMoneyBefBig = payMoneyBig.multiply(new BigDecimal("100")).stripTrailingZeros();
// 退款金额(暂不支持部分退款)
// BigDecimal refundAmtBig = new BigDecimal(map.get("refundAmt"));
// BigDecimal refundAmtBefBig = refundAmtBig.multiply(new BigDecimal("100"));
map.put("totalAmt",payMoneyBefBig.toString());
map.put("refundAmt",payMoneyBefBig.toString());
map.put("totalAmt",money.toString());
map.put("refundAmt",money.toString());
map.put("orderNo",allOrderInfo.getOrderNo());
map.put("payType",allOrderInfo.getPayType());
@ -168,46 +184,67 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
} else {
throw new RuntimeException("该订单类型不支持退款!");
}
refund = fyPayService.refund(map);
// 处理退款结果
if (ObjectUtil.isNotEmpty(refund.get("result_msg"))) {
if ("SUCCESS".equals(refund.get("result_msg"))) {
// 修改该总订单的数据
allOrderInfo.setPayType("refund");
// allOrderInfo.setReasonRefund("refund");
// allOrderInfo.setRefOrderNo("refund");
baseMapper.updateById(allOrderInfo);
// 处理油品订单
OilOrder oilOrder = oilOrderService.selectOilOrderByOrderNo(map.get("orderNo"));
// 处理商品订单
LJOrder ljOrder = ljOrderService.selectGoodsOrder(map.get("orderNo"));
// 处理收银台订单
CashierOrder orderNo = cashierOrderService.selectCashierOrder(map.get("orderNo"));
if (ObjectUtil.isNotEmpty(orderNo)) {
orderNo.setStatus("refund");
cashierOrderService.updateById(orderNo);
}
if (ObjectUtil.isNotEmpty(oilOrder)) {
disposeOil(oilOrder);
}
if (ObjectUtil.isNotEmpty(ljOrder)) {
disposeGoods(ljOrder);
}
}else {
throw new RuntimeException("退款失败");
}
boolean flag = false;
if (!"CASH".equals(allOrderInfo.getPayType())) {
refund = fyPayService.refund(map);
}else {
// 现金退款处理
refund.put("result_msg","SUCCESS");
flag = true;
}
log.info("支付返回信息{}",refund);
// 处理退款结果
if ("SUCCESS".equals(refund.get("result_msg"))) {
// 修改该总订单的数据
allOrderInfo.setStatus("refund");
allOrderInfo.setReasonRefund(map.get("refundRemark"));
allOrderInfo.setRefOrderNo(map.get("refundOrderNo"));
baseMapper.updateById(allOrderInfo);
// 处理油品订单
OilOrder oilOrder = oilOrderService.selectOilOrderByOrderNo(map.get("orderNo"));
// 处理商品订单
LJOrder ljOrder = ljOrderService.selectGoodsOrder(map.get("orderNo"));
// 处理收银台订单
CashierOrder orderNo = cashierOrderService.selectCashierOrder(map.get("orderNo"));
if (ObjectUtil.isNotEmpty(orderNo)) {
orderNo.setStatus("refund");
cashierOrderService.updateById(orderNo);
}
if (ObjectUtil.isNotEmpty(oilOrder)) {
disposeOil(oilOrder,map.get("refundOrderNo"));
commissionRecordService.addRefundRecord(oilOrder.getOrderNo(),"1",oilOrder.getStaffId(),oilOrder.getStoreId());
}
if (ObjectUtil.isNotEmpty(ljOrder)) {
disposeGoods(ljOrder,map.get("refundOrderNo"));
commissionRecordService.addRefundRecord(ljOrder.getOrderNo(),"2",ljOrder.getStaffId(),ljOrder.getStoreId());
}
if (flag) {
return 1;// 当前为现金支付
}
if (!flag) {
String mchntCd = refund.get("mchnt_cd");
merchantConfigService.subtractAmount(allOrderInfo.getStoreId(), map.get("refundAmt"),mchntCd);
}
// 修改商户配置
}else {
throw new RuntimeException("退款失败");
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("退款失败");
}
log.info("refund{}",refund);
return 0;
}
private static String formatBigDecimal(BigDecimal value) {
DecimalFormat decimalFormat = new DecimalFormat("0.00");
return decimalFormat.format(value);
}
// 处理商户号
private Map<String, String> getMerchantConfig(AllOrderInfo allOrderInfo){
Map<String, String> map = new HashMap<>();
@ -224,8 +261,11 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
return map;
}
@Resource
OilGunService oilGunService;
// 处理油品
private void disposeOil(OilOrder oilOrder) {
private void disposeOil(OilOrder oilOrder,String refundOrderNo) {
// 处理订单状态
oilOrder.setOrderStatus("refund");
oilOrderService.updateById(oilOrder);
@ -234,38 +274,67 @@ public class AllOrderInfoServiceImpl extends ServiceImpl<AllOrderInfoMapper,AllO
List<OilOrder> oilOrders = oilOrderService.selectOilOrder(oilOrder.getOrderNo());
// 获取油罐数据
for (OilOrder order : oilOrders) {
OilGun oilGun = oilGunService.queryById(Integer.valueOf(order.getOilGunNum()));
// 处理库存
oilTankService.addStoredQuantity(order.getTankId(),order.getOilNum());
oilTankService.addStoredQuantity(oilGun.getTankId(),order.getOilNum());
// 处理库存跟踪
OilTracking oilTracking = new OilTracking();
oilTracking.setDocument("油品退款");
oilTracking.setQuantityChange(-order.getOilNum());
oilTracking.setQuantityChange(order.getOilNum());
oilTracking.setStoreId(order.getStoreId());
oilTracking.setTankId(order.getTankId());
oilTracking.setTankId(oilGun.getTankId());
oilTracking.setOrderNumber(refundOrderNo);
OilTracking insert = oilTrackingService.insert(oilTracking);
}
/**
* todo
* 油品总价计算
*/
}
// 处理商品
private void disposeGoods(LJOrder ljOrder) {
private void disposeGoods(LJOrder ljOrder,String refundOrderNo) {
// 处理订单状态
ljOrder.setStatus("refund");
ljOrderService.updateById(ljOrder);
// 获取订单的商品数据
List<OrderGoodsVo> orderGoodsVos = orderGoodsService.selectOrderGoods(ljOrder.getId());
// 处理库存
for (OrderGoodsVo orderGoodsVo : orderGoodsVos) {
LJGoodsDto goods = new LJGoodsDto();
goods.setId(orderGoodsVo.getOrderId());
goods.setId(orderGoodsVo.getGoodsId());
goods.setNumberOfChanges(ljOrder.getGoodsNum());
goods.setDocument("商品退款");
goods.setOddNumber(refundOrderNo);
ljGoodsService.editGoodsInventory(goods);
}
}
/**
* 查询退款提醒
*/
public Map<String,String> getOrderInfo(String orderNo, String type) {
Map<String,String> res = new HashMap<>();
// 处理油品订单
OilOrder oilOrder = oilOrderService.selectOilOrderByOrderNo(orderNo);
// 处理商品订单
LJOrder ljOrder = ljOrderService.selectGoodsOrder(orderNo);
CashierOrder cashierOrder = cashierOrderService.selectCashierOrder(orderNo);
res.put("type","0");
if ("oil".equals(type)) {
if (ObjectUtil.isNotEmpty(ljOrder)) {
res.put("money",cashierOrder.getPayAmount().toString());
res.put("type","1");
}
}else if ("goods".equals(type)) {
if (ObjectUtil.isNotEmpty(oilOrder)) {
res.put("money",cashierOrder.getPayAmount().toString());
res.put("type","1");
}
}
return res;
}
}

View File

@ -1,5 +1,6 @@
package com.fuint.business.order.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -73,7 +74,13 @@ public class CashierOrderServiceImpl extends ServiceImpl<CashierOrderMapper, Cas
@Override
public int insertCashierOrder(CashierOrder order) {
int row = baseMapper.insert(order);
CashierOrder cashierOrder = this.selectCashierOrder(order.getOrderNo());
int row = 0;
if (ObjectUtil.isNotEmpty(cashierOrder)){
row = 0;
return row;
}
row = baseMapper.insert(order);
return row;
}

View File

@ -155,12 +155,12 @@ public class HandoverRecordServiceImpl implements HandoverRecordService {
}
LJStaff ljStaff = iljStaffService.selectStaffById(nowAccountInfo.getStaffId());
String handover = iSysDictDataService.selectDictLabel("handover", ljStaff.getHandoverMode());
String handoverType = "未知";
// String handover = iSysDictDataService.selectDictLabel("handover", ljStaff.getHandoverMode());
String handoverType = "暂无";
if (!ObjectUtil.isEmpty(handover)) {
handoverType = handover;
}
// if (!ObjectUtil.isEmpty(handover)) {
// handoverType = handover;
// }
// 填充 baseInfo
Map<String, Object> baseInfo = new HashMap<>();
baseInfo.put("storeName", mtStore.getName());
@ -168,8 +168,8 @@ public class HandoverRecordServiceImpl implements HandoverRecordService {
baseInfo.put("handoverType", handoverType);
baseInfo.put("startTime", startTime);
baseInfo.put("endTime", formattedEndTime);
baseInfo.put("handoverPrem", ljStaff.getHandoverPrem()); // 交班权限
baseInfo.put("handoverOut", ljStaff.getHandoverOut()); // 交班是否退出
// baseInfo.put("handoverPrem", ljStaff.getHandoverPrem()); // 交班权限
// baseInfo.put("handoverOut", ljStaff.getHandoverOut()); // 交班是否退出
handoverMap.put("baseInfo",baseInfo);
// 获取订单汇总
Map<String, Object> orderSummaryMap = orderSummary(startTime, formattedEndTime);
@ -199,6 +199,7 @@ public class HandoverRecordServiceImpl implements HandoverRecordService {
public Map<String, Object> orderSummary(String startTime, String endTime) {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Map<String, Object> allStatistics = new HashMap<>();
// 油品订单(订单) 油品订单(退款) 油品订单(实收) 油品优惠(实收) 油品交易(实收)
Map<String, Object> oilOrderStatistics = handoverRecordMapper.oilOrderStatistics(startTime, endTime, nowAccountInfo.getStoreId());
// 会员储值(订单) 会员储值(退款) 会员储值(实收) 储值赠送(订单) 储值赠送(退款) 储值赠送(实际)
@ -207,18 +208,41 @@ public class HandoverRecordServiceImpl implements HandoverRecordService {
// 普通收款(订单) 普通收款(退款) 普通收款(实收)
Map<String, Object> goodsOrderStatistics = handoverRecordMapper.goodsOrderStatistics(startTime, endTime, nowAccountInfo.getStoreId());
if (!ObjectUtil.isEmpty(oilOrderStatistics)) {
if(!ObjectUtil.isEmpty(cardOrderStatistics)) {
oilOrderStatistics.putAll(cardOrderStatistics);
}
if(!ObjectUtil.isEmpty(fuelOrderStatistics)) {
oilOrderStatistics.putAll(fuelOrderStatistics);
}
if(!ObjectUtil.isEmpty(goodsOrderStatistics)) {
oilOrderStatistics.putAll(goodsOrderStatistics);
}
allStatistics.putAll(oilOrderStatistics);
}else{
allStatistics.put("oilOrder",0.00);
allStatistics.put("oilRefund",0.00);
allStatistics.put("oilPaid",0.00);
allStatistics.put("oilDiacount",0.00);
}
if(!ObjectUtil.isEmpty(cardOrderStatistics)) {
allStatistics.putAll(cardOrderStatistics);
}else {
allStatistics.put("cardOrder",0.00);
allStatistics.put("cardRefund",0.00);
allStatistics.put("cardPaid",0.00);
allStatistics.put("cardGiftOrder",0.00);
allStatistics.put("cardGiftRefund",0.00);
allStatistics.put("cardGiftPaid",0.00);
}
if(!ObjectUtil.isEmpty(fuelOrderStatistics)) {
allStatistics.putAll(fuelOrderStatistics);
} else {
allStatistics.put("fuelOrder",0.00);
allStatistics.put("fuelRefund",0.00);
allStatistics.put("fuelPaid",0.00);
return oilOrderStatistics;
}
if(!ObjectUtil.isEmpty(goodsOrderStatistics)) {
allStatistics.putAll(goodsOrderStatistics);
}else {
allStatistics.put("goodsOrder",0.00);
allStatistics.put("goodsRefund",0.00);
allStatistics.put("goodsPaid",0.00);
}
// }
return allStatistics;
}
/**
@ -388,6 +412,47 @@ public class HandoverRecordServiceImpl implements HandoverRecordService {
return map;
}
@Override
public Map<String, Object> handoverByAllOrder() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
MtStore mtStore = new MtStore();
try {
mtStore = storeService.queryStoreById2(nowAccountInfo.getStoreId());
} catch (BusinessCheckException e) {
e.printStackTrace();
}
// 获取当前日期
LocalDate today = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化当前时间
String formattedEndTime = LocalDateTime.now().format(formatter);
Map<String, Object> handoverMap = new HashMap<>();
String startTime = "2023-01-01 12:12:12";
HandoverRecord handoverRecord = selectByTime();
if (!ObjectUtil.isEmpty(handoverRecord) && !ObjectUtil.isEmpty(handoverRecord.getEndTime())) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
startTime = sdf.format(handoverRecord.getEndTime());
}
LJStaff ljStaff = iljStaffService.selectStaffById(nowAccountInfo.getStaffId());
// String handover = iSysDictDataService.selectDictLabel("handover", ljStaff.getHandoverMode());
String handoverType = "暂无";
Map<String, Object> baseInfo = new HashMap<>();
baseInfo.put("storeName", mtStore.getName());
baseInfo.put("realName", nowAccountInfo.getRealName());
baseInfo.put("handoverType", handoverType);
baseInfo.put("startTime", startTime);
baseInfo.put("endTime", formattedEndTime);
handoverMap.put("baseInfo",baseInfo);
return null;
}
private static final String LOAD_LIBRARY = "TSCLIB";
//打印机

View File

@ -254,7 +254,7 @@ public class HangBillServiceImpl extends ServiceImpl<HangBillMapper, HangBill> i
}
@Override
public double selectAllAmount() {
public Double selectAllAmount() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
return baseMapper.selectAllAmount(nowAccountInfo.getStoreId());
}
@ -269,13 +269,13 @@ public class HangBillServiceImpl extends ServiceImpl<HangBillMapper, HangBill> i
}
@Override
public double selectReturnAmount() {
public Double selectReturnAmount() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
return baseMapper.selectReturnAmount(nowAccountInfo.getStoreId());
}
@Override
public double selectNoReturnAmount() {
public Double selectNoReturnAmount() {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
return baseMapper.selectNoReturnAmount(nowAccountInfo.getStoreId());
}
@ -290,9 +290,9 @@ public class HangBillServiceImpl extends ServiceImpl<HangBillMapper, HangBill> i
if (!map.get("repaidAmount").equals("0") && !payType.equals("CASH")){
Integer allAmount = (int) (Double.valueOf(map.get("repaidAmount"))*100);
// 判断是否开启支付规则
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen();
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen(storeId);
if (list.size()>0){
oilConfigService.oilRule();
oilConfigService.oilRule(storeId);
}
// 根据店铺id查询商户配置信息
MerchantConfig merchantConfig = merchantConfigService.selectMeChByIdIsUse(storeId);

View File

@ -13,6 +13,7 @@ import com.fuint.api.fuyou.entity.ReceiveParameter;
import com.fuint.api.fuyou.service.FyPayService;
import com.fuint.api.fuyou.service.MerchantConfigService;
import com.fuint.api.fuyou.service.OilConfigService;
import com.fuint.business.commission.service.StaffCommissionService;
import com.fuint.business.convenienceSore.entity.LJGoods;
import com.fuint.business.convenienceSore.service.LJGoodsService;
import com.fuint.business.marketingActivity.cardFule.entity.CardFuelRecord;
@ -89,6 +90,8 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
private OilConfigService oilConfigService;
@Autowired
private LJGoodsService goodsService;
@Autowired
private StaffCommissionService staffCommissionService;
@Override
public IPage<OilOrder> selectOilOrderList(Page page, OilOrder order) {
@ -245,8 +248,6 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
payStatus = "unpaid";
}
Map<String,Object> orders = new HashMap<>();
OilOrder oilOrder1 = null;
@ -278,6 +279,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
ljOrder.setStaffId(staffId);
ljOrder.setStatus(payStatus);
if (payType.equals("CASH")){
staffCommissionService.countStaffCommission(staffId,storeId,goodsAmount,goodsActualPay,0.0,"2",orderNo);
ljOrder.setPayTime(new Date());
}
// 将商品订单的json数据转换为数组
@ -309,27 +311,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
ljOrder1 = orderService.selectGoodsOrder(orderNo);
}
// 添加收银台订单信息
CashierOrder cashierOrder = new CashierOrder();
cashierOrder.setStaffId(staffId);
cashierOrder.setStoreId(storeId);
cashierOrder.setPayUser(payUser);
cashierOrder.setAmount(oilAmount+goodsAmount);
cashierOrder.setStatus(payStatus);
if (payType.equals("CASH")){
cashierOrder.setPayAmount(Double.valueOf(map.get("authCode")));
cashierOrder.setPayTime(new Date());
this.insertAllOrderInfo(orderNo,storeId,Double.valueOf(map.get("allAmount")),payType,userId,"PC","6","paid");
}else {
cashierOrder.setPayAmount(oilActualPay+goodsActualPay);
}
cashierOrder.setSeekZero(seekZero);
cashierOrder.setOrderNo(orderNo);
cashierOrder.setGoodsOrderAmount(goodsAmount);
cashierOrder.setGoodsDiscountAmount(goodsDiscount);
cashierOrder.setOilOrderAmount(oilAmount);
cashierOrder.setOilDiscountAmount(oilDiscount);
cashierOrder.setTerminal(terminal);
Double oilLiters = 0.0;
// 添加油品订单信息
if (!oilOrder.equals("[]")){
@ -340,11 +322,15 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
Double amount = Double.valueOf(jsonObjects.get(i).get("amount").toString());
Double oilPrice = Double.valueOf(jsonObjects.get(i).get("oilPrice").toString());
Double oilNum = amount/oilPrice;
oilLiters += oilNum;
if (i==0){
order.setOrderType("主订单");
order.setOrderAmount(amount);
order.setPayAmount(oilActualPay);
order.setOrderNo(orderNo);
if (payType.equals("CASH")){
staffCommissionService.countStaffCommission(staffId,storeId,oilAmount,oilActualPay,oilLiters,"1",orderNo);
}
}else {
order.setOrderType("子订单");
order.setOrderAmount(amount);
@ -369,6 +355,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
order.setPayType(payType);
order.setInvoicing("未开票");
order.setOrderStatus(payStatus);
order.setTankId(Integer.valueOf(jsonObjects.get(0).get("tankId").toString()));
if (payType.equals("CASH")){
order.setPayTime(new Date());
this.addOilTrack(jsonObjects.get(i),storeId);
@ -382,13 +369,36 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
}
}
// 添加收银台订单信息
CashierOrder cashierOrder = new CashierOrder();
cashierOrder.setStaffId(staffId);
cashierOrder.setStoreId(storeId);
cashierOrder.setPayUser(payUser);
cashierOrder.setAmount(oilAmount+goodsAmount);
cashierOrder.setStatus(payStatus);
if (payType.equals("CASH")){
cashierOrder.setPayAmount(Double.valueOf(map.get("authCode")));
cashierOrder.setPayTime(new Date());
this.insertAllOrderInfo(orderNo,storeId,Double.valueOf(map.get("allAmount")),payType,userId,"PC","6","paid");
}else {
cashierOrder.setPayAmount(oilActualPay+goodsActualPay);
}
cashierOrder.setSeekZero(seekZero);
cashierOrder.setOrderNo(orderNo);
cashierOrder.setGoodsOrderAmount(goodsAmount);
cashierOrder.setGoodsDiscountAmount(goodsDiscount);
cashierOrder.setOilOrderAmount(oilAmount);
cashierOrder.setOilDiscountAmount(oilDiscount);
cashierOrder.setTerminal(terminal);
cashierOrder.setPayType(payType);
// 如果金额不等于0调用第三方支付接口
if (!map.get("allAmount").equals("0") && !map.get("payType").equals("CASH")){
Integer allAmount = (int) (Double.valueOf(map.get("allAmount"))*100);
// 判断是否开启支付规则
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen();
List<MerchantConfig> list = merchantConfigService.selectMeChByIsOpen(storeId);
if (list.size()>0){
oilConfigService.oilRule();
oilConfigService.oilRule(storeId);
}
// 处理支付需要的数据
@ -475,7 +485,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
// 根据userId查询用户储值卡信息
UserBalance balance = userBalanceService.selectUserBalanceByStorId(userId,storeId);
// 根据用户id查询用户信息
LJUserVo userVo1 = userService.selectUserById(userId);
LJUserVo userVo1 = userService.selectUserById(userId,storeId);
// 根据日期生成订单信息
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
@ -503,6 +513,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
// 添加收银台订单信息
CashierOrder cashierOrder = new CashierOrder();
boolean flag = false;
Double oilLiters = 0.0;
for (int i = 0;i < oilOrders.size();i++) {
if (oilOrders.get(i).get("oilName").equals(oilName.getId().toString())){
Double amount = Double.valueOf(oilOrders.get(i).get("amount").toString());
@ -511,6 +522,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
flag = true;
status = "paid";
Double oilNum = amount / oilPrice;
oilLiters += oilNum;
if (i == 0) {
order.setOrderType("主订单");
order.setOrderAmount(amount);
@ -547,6 +559,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
flag = true;
status = "paid";
Double oilNum = amount / oilPrice;
oilLiters += oilNum;
if (i == 0) {
order.setOrderType("主订单");
order.setOrderAmount(amount);
@ -583,6 +596,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
flag = true;
status = "paid";
Double oilNum = amount / oilPrice;
oilLiters += oilNum;
if (i == 0) {
order.setOrderType("主订单");
order.setOrderAmount(amount);
@ -615,7 +629,6 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
oilOrder = this.selectOilOrderByOrderNo(orderNo);
this.updateGrowthValue1(oilAmount,userId, Integer.valueOf(oilOrder.getOils()),0.0,storeId,orderNo);
// this.insertCardBalance((Double.valueOf(oilOrders.get(i).get("liters").toString())-refuelMoneyLiters)*oilPrice,userId,storeId);
}else {
res.put("error","囤油卡或储值卡余额不足!");
}
@ -637,8 +650,10 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
cashierOrder.setTerminal(map.get("terminal"));
cashierOrder.setOilOrderId(oilOrder.getId());
cashierOrder.setSeekZero(0.0);
cashierOrder.setPayType(map.get("payType"));
cashierOrderService.insertCashierOrder(cashierOrder);
this.insertAllOrderInfo(orderNo, storeId, oilAmount, map.get("payType"), userId, "PC", "1", status);
staffCommissionService.countStaffCommission(Integer.valueOf(map.get("staffId")),storeId,oilAmount,oilAmount,oilLiters,"1",orderNo);
res.put("success","success");
}
}
@ -647,10 +662,12 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
if (cardBalance>=oilAmount){
// 添加油品订单信息
OilOrder order = new OilOrder();
Double oilLiters = 0.0;
for (int i = 0;i < oilOrders.size();i++) {
Double amount = Double.valueOf(oilOrders.get(i).get("amount").toString());
Double oilPrice = Double.valueOf(oilOrders.get(i).get("oilPrice").toString());
Double oilNum = amount / oilPrice;
oilLiters += oilNum;
if (i == 0) {
order.setOrderType("主订单");
order.setOrderAmount(amount);
@ -697,10 +714,11 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
cashierOrder.setTerminal(map.get("terminal"));
cashierOrder.setOilOrderId(oilOrder.getId());
cashierOrder.setSeekZero(0.0);
cashierOrder.setPayType(map.get("payType"));
cashierOrderService.insertCashierOrder(cashierOrder);
this.updateGrowthValue1(oilAmount,userId, Integer.valueOf(oilOrder.getOils()),0.0,storeId,orderNo);
this.insertAllOrderInfo(orderNo,accountInfo.getStoreId(),oilAmount,map.get("payType"),userId,"PC","1","paid");
staffCommissionService.countStaffCommission(Integer.valueOf(map.get("staffId")),storeId,oilAmount,oilAmount,oilLiters,"1",orderNo);
// this.insertCardBalance(oilAmount,userId,storeId);
res.put("success","success");
}else {
@ -849,7 +867,14 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
oilOrder.setInvoicing("未开票");
oilOrder.setRemark("未评价");
oilOrder.setUserId(nowAccountInfo.getId());
LJUserVo userVo = userService.selectUserById(nowAccountInfo.getId());
// 判断当前店铺是否存在此用户的会员信息没有的话进行添加
LJStore store = storeService.selectStoreByStoreId(oilOrder.getStoreId());
UserBalance balance = userBalanceService.selectUserBalance(oilOrder.getUserId(), store.getChainStoreId());
if (ObjectUtil.isEmpty(balance)){
userBalanceService.initBalance(oilOrder.getUserId(),store.getChainStoreId());
}
LJUserVo userVo = userService.selectUserById(oilOrder.getUserId(),oilOrder.getStoreId());
oilOrder.setPayUser(userVo.getMobile());
baseMapper.insert(oilOrder);
@ -866,6 +891,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
cashierOrder.setOilDiscountAmount(oilOrder.getDiscountAmount());
cashierOrder.setTerminal(oilOrder.getTerminal());
cashierOrder.setSeekZero(0.0);
cashierOrder.setPayType(oilOrder.getPayType());
cashierOrderService.insertCashierOrder(cashierOrder);
return orderNo;
}
@ -992,6 +1018,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
this.updateGrowthValue(payAmount,userId, Integer.valueOf(oilOrder.getOils()),oilCardAmount,oilOrder.getStoreId(),orderNo);
this.addOilTracks(oilOrder,oilOrder.getStoreId());
this.insertCardOrder(oilOrder.getUserId(),oilOrder.getStoreId(),orderNo,oilOrder.getOrderAmount(),"paid", Double.valueOf(balanceAmount),payAmount);
staffCommissionService.countStaffCommission(oilOrder.getStaffId(),oilOrder.getStoreId(),oilOrder.getOrderAmount(),oilOrder.getOrderAmount(),oilOrder.getOilNum(),"1",orderNo);
oilOrder.setPayAmount(payAmount);
oilOrder.setDiscountAmount(Double.valueOf(discountAmount));
oilOrder.setPayTime(new Date());
@ -1062,8 +1089,11 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
}
this.updateGrowthValue(oilOrder.getPayAmount(),userId, Integer.valueOf(oilOrder.getOils()),null,oilOrder.getStoreId(),orderNo);
this.addOilTracks(oilOrder,oilOrder.getStoreId());
staffCommissionService.countStaffCommission(oilOrder.getStaffId(),oilOrder.getStoreId(),oilOrder.getOrderAmount(),oilOrder.getPayAmount(),oilOrder.getOilNum(),"1",orderNo);
CashierOrder cashierOrder = cashierOrderService.selectCashierOrder(orderNo);
if (ObjectUtil.isNotEmpty(cashierOrder)){
cashierOrder.setOilOrderId(oilOrder.getId());
cashierOrder.setPayTime(new Date());
cashierOrder.setStatus("paid");
cashierOrder.setOilDiscountAmount(oilOrder.getDiscountAmount());
@ -1173,7 +1203,7 @@ public class OilOrderServiceImpl extends ServiceImpl<OilOrderMapper, OilOrder> i
int growth = balance.getGrowthValue();
if (refuelMoney==null){
String refuelMoney1 = balance.getRefuelMoney();
if (StringUtils.isNotEmpty(refuelMoney1)){
if (StringUtils.isNotEmpty(refuelMoney1) && !"null".equals(refuelMoney1) && StringUtils.isNotEmpty(refuelMoney)){
JSONArray objects = JSONArray.parseArray(refuelMoney);
JSONArray objects1 = JSONArray.parseArray(refuelMoney1);
List<RefuelMoney> list = new ArrayList<>();

View File

@ -7,6 +7,7 @@ public class OrderGoodsVo {
private Integer id;
private Integer orderId;
private Integer goods_id;
private Integer goodsId;
private String name;
private String retailPrice;
private String memberPrice;

View File

@ -52,6 +52,12 @@ public class OilGunController extends BaseController {
return getSuccessResult(oilGunVOS);
}
@GetMapping("selectByNumber/{storeId}")
public ResponseObject selectByNumberTGUn(@PathVariable Integer storeId) {
List<OilGunVO> oilGunVOS = this.oilGunService.selectByNumberTGUn2(storeId);
return getSuccessResult(oilGunVOS);
}
/**

View File

@ -73,7 +73,10 @@ public class OilPurchase extends BaseEntity {
*/
private Integer storeId;
private Integer theDocumentAmount;
/**
* 总计
*/
private Double theDocumentAmount;

View File

@ -86,7 +86,7 @@ public interface OilTankMapper {
* @return 影响行数
*/
int update(OilTank oilTank);
int addStoredQuantityByLock(@Param("tankId") Integer tankId,@Param("changeNum") Double changeNum,Double totalAmount,Double discountedPrice);
int addStoredQuantityByLock(@Param("tankId") Integer tankId,@Param("changeNum") Double changeNum,@Param("totalAmount") Double totalAmount, @Param("discountedPrice")Double discountedPrice);
int subtractStoredQuantityByLock(@Param("tankId") Integer tankId,@Param("changeNum") Double changeNum);

View File

@ -103,7 +103,8 @@
</where>
</select>
<select id="getOilName" resultType="com.fuint.business.petrolStationManagement.vo.OilGunVO">
select onm.number_id numberId,name.oil_name oilName, name.oil_type oilType,onm.oil_price oilPrice ,onm.gb_price gbPrice, name.oil_density oilDensity,onm.unit unit
select onm.number_id numberId,name.oil_name oilName, name.oil_type oilType,onm.oil_price oilPrice ,onm.gb_price gbPrice,
name.oil_density oilDensity,onm.unit unit,name.id oilNameId
from oil_number onm
left join oil_name name on onm.oil_name = name.id
<where>

View File

@ -138,7 +138,7 @@
</select>
<select id="selectOilNumberNameByStoreId" resultType="com.fuint.business.petrolStationManagement.vo.OilNumberNameVo"
parameterType="java.lang.Integer">
select onu.*,ona.oil_type,ona.oil_name oilNames,ona.id oilId,ot.id tankId from oil_tank ot
select onu.*,ona.oil_type,ona.oil_name oilNames,ona.id oilId,ot.id tankId,ot.tank_name from oil_tank ot
left join oil_number onu on ot.number_id = onu.number_id
left join oil_name ona on onu.oil_name = ona.id
<where>

View File

@ -429,7 +429,7 @@
total_price = total_price + #{totalAmount},
</if>
<if test="discountedPrice != null and discountedPrice != ''">
discounted_price = #{discountedPrice}
discounted_price = #{discountedPrice},
</if>
update_time = NOW()
where id = #{tankId}

View File

@ -37,6 +37,8 @@ public interface OilGunService {
IPage<OilGun> queryByPage(@Param("page") Page page, @Param("oilGun") OilGun oilGun);
List<OilGunVO> selectByNumberTGUn(OilGun oilGun);
List<OilGunVO> selectByNumberTGUn2(Integer storeId);
/**
* 新增数据
*

View File

@ -81,6 +81,30 @@ public class OilGunServiceImpl implements OilGunService {
return oilName;
}
@Override
public List<OilGunVO> selectByNumberTGUn2(Integer storeId) {
// 根据店铺id查询所有油类
List<OilGunVO> oilName = oilGunDao.getOilName(storeId);
OilGun oilGun = new OilGun();
oilGun.setStoreId(storeId);
oilGun.setStatus("启用");
// 根据店铺id查询所有油枪
List<OilGun> allList = oilGunDao.getAllList(oilGun);
if (oilName.size() <= 0 || allList.size() <= 0){
return oilName;
}
for (OilGunVO oilNumber : oilName) {
List<OilGun> oilGunList = new ArrayList<>();
for (OilGun gun : allList) {
if (oilNumber.getNumberId().equals(gun.getNumberId())) {
oilGunList.add(gun);
}
}
oilNumber.setOilGunList(oilGunList);
}
return oilName;
}
/**
* 新增数据
*

View File

@ -131,13 +131,15 @@ public class OilTankServiceImpl implements OilTankService {
// 根据油罐id加锁 同一时间只能
String lockKey = "oilTank-"+tankId;
Boolean isLock = redisLock.tryLock(lockKey,500,5000, TimeUnit.MILLISECONDS);
if (isLock) {
OilTank oilTank = oilTankDao.queryById(tankId);
// 计算总升数
// 计算总升数(相加)
// BigDecimal tankVolumeBigDecimal = new BigDecimal(oilTank.getTankVolume().toString());
BigDecimal changeNumBigDecimal = new BigDecimal(changeNum.toString());
BigDecimal storedQuantityBigDecimal = changeNumBigDecimal.subtract(new BigDecimal(oilTank.getStoredQuantity().toString()));
BigDecimal storedQuantityBigDecimal = changeNumBigDecimal.add(new BigDecimal(oilTank.getStoredQuantity().toString()));
if (storedQuantityBigDecimal.toString().compareTo(oilTank.getTankVolume().toString())>0) {
if (storedQuantityBigDecimal.compareTo(new BigDecimal(oilTank.getTankVolume()))>0) {
redisLock.unlock(lockKey);
throw new RuntimeException(""+ oilTank.getTankName() +"”油罐中容量不足,无法进行增加!");
}
@ -196,7 +198,7 @@ public class OilTankServiceImpl implements OilTankService {
// 单价*油量
BigDecimal disPrice = new BigDecimal(oilTank.getDiscountedPrice().toString());
BigDecimal multiply = disPrice.multiply(new BigDecimal(changeNum));
return this.oilTankDao.addStoredQuantityByLock(tankId, changeNum, multiply.doubleValue(),null) >0 ;
return this.oilTankDao.addStoredQuantityByLock(tankId, changeNum, Double.valueOf(multiply.toString()),null) >0 ;
}
/**

View File

@ -23,5 +23,5 @@ public class OilGunVO extends OilGun {
private String unit; //
private Integer storeId; //
private Double oilDensity; //油品密度
private Integer oilNameId;
}

View File

@ -13,4 +13,6 @@ public class OilNumberNameVo extends OilNumber {
private String tankId;
// 油品id
private Integer oilId;
// 油罐名称
private String tankName;
}

View File

@ -1,5 +1,6 @@
package com.fuint.business.storeInformation.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -10,12 +11,15 @@ import com.fuint.business.storeInformation.entity.LJStore;
import com.fuint.business.storeInformation.mapper.LJStoreMapper;
import com.fuint.business.storeInformation.service.ILJStoreService;
import com.fuint.business.userManager.entity.ChainStoreConfig;
import com.fuint.business.userManager.entity.UserBalance;
import com.fuint.business.userManager.service.ChainStoreConfigService;
import com.fuint.business.userManager.service.UserBalanceService;
import com.fuint.common.dto.AccountInfo;
import com.fuint.common.util.StringUtils;
import com.fuint.common.util.TokenUtil;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import java.util.*;
@ -25,6 +29,10 @@ import java.util.*;
*/
@Service
public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> implements ILJStoreService {
@Autowired
@Lazy
private UserBalanceService userBalanceService;
/**
* 根据id查询店铺信息
* @return
@ -54,7 +62,8 @@ public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> impl
@Override
public LJStore selectStoreByStoreId(int storeId) {
return baseMapper.selectById(storeId);
LJStore store = baseMapper.selectById(storeId);
return store;
}
@Override
@ -66,7 +75,7 @@ public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> impl
LJStore ljStore = new LJStore();
Double distance = 0.0;
double earthRadius = 6371; // 地球半径单位为公里
if (storeId==null){
if (StringUtils.isEmpty(storeId)){
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("if_delete","0");
queryWrapper.eq("status","qy");
@ -83,6 +92,7 @@ public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> impl
double min = earthRadius * c;
ljStore = list.get(0);
storeId = ljStore.getId().toString();
// 计算最小距离
for (int i = 0; i < list.size(); i++){
@ -99,6 +109,7 @@ public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> impl
if ((earthRadius * c1) < min){
min = earthRadius * c1;
ljStore = list.get(i);
storeId = ljStore.getId().toString();
}
}
}
@ -119,6 +130,13 @@ public class LJStoreServiceImpl extends ServiceImpl<LJStoreMapper, LJStore> impl
ljStore = store;
}
// 判断当前店铺是否存在此用户的会员信息没有的话进行添加
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
LJStore store = this.selectStoreByStoreId(Integer.valueOf(storeId));
UserBalance balance = userBalanceService.selectUserBalance(nowAccountInfo.getId(), store.getChainStoreId());
if (ObjectUtil.isEmpty(balance)){
userBalanceService.initBalance(nowAccountInfo.getId(),store.getChainStoreId());
}
Map<String,Object> map1 = new HashMap<>();
map1.put("distance",distance);

View File

@ -97,8 +97,8 @@ public class LJUserController extends BaseController {
* @return
*/
@GetMapping("/statistic")
public ResponseObject getStatistic(){
Map<String, Object> map = userService.selectStatistic();
public ResponseObject getStatistic(LJUserVo user){
Map<String, Object> map = userService.selectStatistic(user);
return getSuccessResult(map);
}
@ -109,7 +109,7 @@ public class LJUserController extends BaseController {
*/
@GetMapping("/{id}")
public ResponseObject userInfo(@PathVariable Integer id){
LJUserVo user = userService.selectUserById(id);
LJUserVo user = userService.selectUserById(id,null);
return getSuccessResult(user);
}

View File

@ -55,7 +55,10 @@
</select>
<!-- 查询会员统计信息-->
<select id="selectSumByStore" resultType="java.lang.Double" parameterType="int">
select sum(${sumValue}) from mt_user_balance where chain_store_id = #{chainStoreId}
select sum(${sumValue}) from mt_user_balance
<where>
chain_store_id = #{chainStoreId}
</where>
</select>
<!-- 根据手机号查询会员信息-->
<select id="selectUserByMobile" resultType="com.fuint.business.userManager.vo.LJUserVo"

View File

@ -44,14 +44,14 @@ public interface LJUserService extends IService<LJUser> {
* 查询会员统计信息
* @return
*/
public Map<String ,Object> selectStatistic();
public Map<String ,Object> selectStatistic(LJUserVo user);
/**
* 根据id查询会员信息
* @param id
* @return
*/
public LJUserVo selectUserById(int id);
public LJUserVo selectUserById(int id,Integer storeId);
/**
* 根据storeId获取连锁店id 根据连锁店id查询用户信息

View File

@ -92,7 +92,7 @@ public class LJUserServiceImpl extends ServiceImpl<LJUserMapper, LJUser> impleme
* @return
*/
@Override
public Map<String, Object> selectStatistic() {
public Map<String, Object> selectStatistic(LJUserVo user) {
Map<String ,Object> map = new HashMap<>();
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
Integer storeId = nowAccountInfo.getStoreId();
@ -127,9 +127,12 @@ public class LJUserServiceImpl extends ServiceImpl<LJUserMapper, LJUser> impleme
* @return
*/
@Override
public LJUserVo selectUserById(int id) {
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
LJStore store = storeService.selectStoreByStoreId(nowAccountInfo.getStoreId());
public LJUserVo selectUserById(int id,Integer storeId) {
if (storeId==null){
AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo();
storeId = nowAccountInfo.getStoreId();
}
LJStore store = storeService.selectStoreByStoreId(storeId);
return baseMapper.queryUserByChainStoreId(id,store.getChainStoreId());
}

View File

@ -231,6 +231,8 @@ public class AccountServiceImpl extends ServiceImpl<TAccountMapper, TAccount> im
// 所属的连锁店类型
String deptType = param.get("deptType") == null ? "0" : param.get("deptType").toString();
// 判断是否能创建站长 z001为站长的枚举值 后期需要创建一个角色的枚举类
if (!"3".equals(deptType) && "z001".equals(code) ) {
throw new RuntimeException("用户角色与组织架构不匹配!");
@ -295,9 +297,9 @@ public class AccountServiceImpl extends ServiceImpl<TAccountMapper, TAccount> im
}
ljStaffMapper.insert(staff);
LJStaff staff1 = ljStaffMapper.selectById(staff.getId());
if (ObjectUtil.isNotEmpty(staff1)){
editTAccount.setStaffId(staff1.getId());
// LJStaff staff1 = ljStaffMapper.selectById(staff.getId());
if (ObjectUtil.isNotEmpty(staff.getId())){
editTAccount.setStaffId(staff.getId());
updateAccount(editTAccount);
}
@ -459,7 +461,7 @@ public class AccountServiceImpl extends ServiceImpl<TAccountMapper, TAccount> im
}
if (id > 0 ) {
return this.getAccountInfoById(id);
return this.getAccountInfoById(account.getAcctId());
} else {
throw new BusinessRuntimeException("创建账号错误");
}
@ -555,7 +557,8 @@ public class AccountServiceImpl extends ServiceImpl<TAccountMapper, TAccount> im
@Transactional(rollbackFor = Exception.class)
@OperationServiceLog(description = "修改后台账户")
public void updateAccount(TAccount tAccount) {
tAccountMapper.updateById(tAccount);
int i = tAccountMapper.updateById(tAccount);
System.out.println("1119"+i);
}
/**

View File

@ -62,33 +62,37 @@ export function editHangBill(data) {
}
// 当前店铺归还账单的数量
export function hangBillReturnTotal() {
export function hangBillReturnTotal(query) {
return request({
url: '/business/hangBill/returnTotal',
method: 'get',
params: query
})
}
// 当前店铺归还账单的数量
export function hangBillAllAmount() {
export function hangBillAllAmount(query) {
return request({
url: '/business/hangBill/allAmount',
method: 'get',
params: query
})
}
// 当前店铺归还账单的数量
export function hangBillAllReturnAmount() {
export function hangBillAllReturnAmount(query) {
return request({
url: '/business/hangBill/allReturnAmount',
method: 'get',
params: query
})
}
// 当前店铺归还账单的数量
export function hangBillAllNoReturnAmount() {
export function hangBillAllNoReturnAmount(query) {
return request({
url: '/business/hangBill/allNoReturnAmount',
method: 'get',
params: query
})
}

View File

@ -8,3 +8,10 @@ export function refundApi(data) {
data: data
})
}
export function getOrderInfoApi(data) {
return request({
url: '/business/allOrderInfo/getOrderInfo',
method: 'get',
params: data
})
}

View File

@ -370,7 +370,8 @@
<div class="app-bottom">
<el-card >
<div class="bottom-xz">
<div class="anniu" v-if="handoverList && handoverList.baseInfo && handoverList.baseInfo.handoverPrem == 'yqx'" @click="shift">交班</div>
<!-- <div class="anniu" v-if="handoverList && handoverList.baseInfo && handoverList.baseInfo.handoverPrem == 'yqx'" @click="shift">交班</div>-->
<div class="anniu" @click="shift">交班</div>
<!-- <div class="anniu-lv">云打印</div> -->
<div class="anniu-lv" @click="printLocally()">本地打印</div>
<div ><el-link type="primary" @click="recording">交班记录</el-link></div>
@ -501,7 +502,7 @@ import {removeUserId} from "@/utils/auth";
})
},
//
shift() {
async shift() {
let msg = '交班并退出系统, 是否继续?'
let flag = false
if (this.handoverList && this.handoverList.baseInfo && this.handoverList.baseInfo.handoverOut == 'jbtc') {
@ -529,7 +530,9 @@ import {removeUserId} from "@/utils/auth";
location.href = '/';
})
}
this.getHandover();
})
this.getHandover();
//
// this.$message({
// type: 'success',

View File

@ -554,6 +554,21 @@
</div>
</el-dialog>
<!-- 立即结算-->
<el-dialog
title="扫码支付"
:visible.sync="dialogVisiblejLoading"
width="30%"
:close-on-click-modal="false">
<div>
<el-result icon="info" title="支付状态未查询成功,请移至订单查看">
<template slot="extra">
<el-button type="primary" @click="handClose"> </el-button>
</template>
</el-result>
</div>
</el-dialog>
<!-- 批量挂账归还-->
<el-dialog title="批量挂账归还" :visible.sync="open3" append-to-body>
<el-form ref="form3" :model="form3">
@ -757,6 +772,7 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
open3:false,
open4:false,
dialogVisiblej:false,
dialogVisiblejLoading: false,
//
isQuery:true,
//
@ -784,7 +800,7 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
this.getUnitList();
this.getPayList();
this.getLists();
this.getStatistic();
// this.getStatistic();
},
directives: {
// v-focus
@ -802,17 +818,23 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
methods:{
//
getStatistic(){
hangBillReturnTotal().then(res => {
hangBillReturnTotal(this.addDateRange(this.queryParams, this.dateRange)).then(res => {
this.returnTotal = res.data
})
hangBillAllAmount().then(res => {
this.allAmount = res.data
hangBillAllAmount(this.addDateRange(this.queryParams, this.dateRange)).then(res => {
if (res.data) {
this.allAmount = res.data
}
})
hangBillAllReturnAmount().then(res => {
this.returnAllAmount = res.data
hangBillAllReturnAmount(this.addDateRange(this.queryParams, this.dateRange)).then(res => {
if (res.data) {
this.returnAllAmount = res.data
}
})
hangBillAllNoReturnAmount().then(res => {
this.noReturnAllAmount = res.data
hangBillAllNoReturnAmount(this.addDateRange(this.queryParams, this.dateRange)).then(res => {
if (res.data) {
this.noReturnAllAmount = res.data
}
})
},
getPayMeth(list,val){
@ -935,6 +957,7 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
this.repaidAmount = repaidAmount
},
handClose(){
this.dialogVisiblejLoading = false
this.isPay = true;
this.isPaySuccess = false;
this.dialogVisiblej = false;
@ -996,15 +1019,18 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
response.data.forEach(item => {
if (item.payStatus == "unpaid"){
_this.isQuery = true;
_this.dialogVisiblejLoading = true
}
if (item.payStatus == "paid"){
_this.isPaySuccess = true;
_this.isPay = false;
_this.isQuery = false;
_this.loading = false;
clearInterval(timer);
}
if (item.payStatus == "payFail"){
_this.isPaySuccess = false;
_this.isPay = false;
_this.isQuery = false;
_this.loading = false;
clearInterval(timer);
@ -1015,15 +1041,15 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
let timer2 = setInterval(function () {
if (_this.isBatch) {
if (_this.isQuery || !_this.open3 || !_this.open4){
_this.loading = false;
_this.isPay = false;
// _this.loading = false;
// _this.isPay = false;
clearInterval(timer);
clearTimeout(timer3);
}
}else {
if (_this.isQuery || !_this.open2) {
_this.loading = false;
_this.isPay = false;
// _this.loading = false;
// _this.isPay = false;
clearInterval(timer);
clearTimeout(timer3);
}
@ -1174,6 +1200,7 @@ import {listReturnRecord, returnRecordByOrderNo, returnRecordInfo} from "@/api/c
this.hangBillList = response.data.records
this.total = response.data.total;
})
this.getStatistic();
},
//
handleQuery() {

View File

@ -508,7 +508,22 @@
</div>
</el-dialog>
<!-- 会员登录-->
<!-- 立即结算-->
<el-dialog
title="扫码支付"
:visible.sync="dialogVisiblejLoading"
width="30%"
:close-on-click-modal="false">
<div>
<el-result icon="info" title="支付状态未查询成功,请移至订单查看">
<template slot="extra">
<el-button type="primary" @click="handClose"> </el-button>
</template>
</el-result>
</div>
</el-dialog>
<!-- 会员登录-->
<el-dialog
title="会员信息"
:visible.sync="dialogVisiblevip"
@ -883,8 +898,11 @@
oilGunList:[],
//
payList:[],
//
timestamp: 15,
dialogVisible: false,
dialogVisiblej: false,
dialogVisiblejLoading: false,
dialogVisiblevip:false,
dialogVisibleamount:false,
dialogVisibleMember:false,
@ -2299,6 +2317,7 @@
},
//
resetting(){
this.seekZero = 0;
this.oilOrder = [];
this.oilActualPay = 0;
this.oilTotal = 0;
@ -2339,7 +2358,6 @@
//
getOilTank(this.form.tankId).then(res => {
console.log(res)
if (res.data.storedQuantity-this.form.liters<0){
this.$modal.msgError("所加油的升数大于油罐内的升数,请重新选择加油升数")
return;
@ -2546,7 +2564,7 @@
return;
}
}
if (!this.authCode){
if (!this.authCode && ((+this.oilActualPay) + (+this.goodsActualPay))>0){
this.$modal.msgError("请先扫码");
return;
}
@ -2654,6 +2672,7 @@
_this.oilOrder = []
_this.goodsOrder = []
_this.amount = 0
_this.seekZero = 0;
};
this.userNo = ""
this.map = {
@ -2724,6 +2743,7 @@
if (response.data!=null){
if (response.data.status == "unpaid"){
_this.isQuery = true;
_this.dialogVisiblejLoading = true
}
if (response.data.status == "paid"){
_this.isPay = true;
@ -2749,7 +2769,8 @@
let timer2 = setInterval(function () {
if (_this.isQuery || !_this.dialogVisiblej) {
_this.loading = false;
_this.isPay = true;
// _this.isPay = true;
// _this.countdown()
clearInterval(timer);
clearTimeout(timer3);
@ -2764,7 +2785,22 @@
this.isPaySuccess = false;
}, 10000)
},
//
countdown(){
let _this = this
let timer = setInterval(() => {
// countdown1
_this.timestamp--;
// 0
if(_this.timestamp === 0) {
clearInterval(timer)
_this.timestamp = 15
}
}, 1000);
},
handClose(){
this.dialogVisiblejLoading = false
// this.resetting1()
this.authCode = "";
this.userNo = ""

View File

@ -110,8 +110,9 @@
<el-table-column prop="payUser" label="付款用户"> </el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status == 'paid'">已支付</el-tag>
<el-tag v-if="scope.row.status === 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status === 'paid'">已支付</el-tag>
<el-tag type="danger" v-else-if="scope.row.status === 'refund'">已退款</el-tag>
<el-tag type="danger" v-else>支付失败</el-tag>
</template>
</el-table-column>
@ -129,6 +130,7 @@
@click="patchwork(scope.row)"
type="primary" plain round>补打</el-button>
<el-button style="width: 60px" size="mini"
v-if = "scope.row.status !== 'refund'"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
</template>
@ -356,23 +358,48 @@ import {refundApi} from "@/api/cashier/refund";
},
// 退
handleRefund(id){
this.dialogRefund = true;
cashierOrder(id).then( response => {
this.cashierOrder = response.data
})
//退
this.$confirm('是否将该收银台下的订单全部退款, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.dialogRefund = true;
cashierOrder(id).then( response => {
this.cashierOrder = response.data
if (response.data.status === "refund") {
this.$message({
type: 'info',
message: '该订单已经退款'
});
this.dialogRefund = false;
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
},
refundConfirmed() {
this.dialogRefund = false;
// 退
// cashierOrder
console.log("cashierOrder",this.cashierOrder)
let map={
orderNo: this.cashierOrder.orderNo,
storeId: this.cashierOrder.storeId,
type: "cashierOrder"
refundRemark:this.radio1 +"-"+ this.refundRemark,
type: "canRefund"
}
refundApi(map).then(res=>{
this.$message({
type: 'info',
message: '退款成功'
});
this.getList();
this.getOrderStatistics();
this.getStaffList();
})
},

View File

@ -140,6 +140,7 @@
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 'unpaid'">未支付</el-tag>
<el-tag type="success" v-else-if="scope.row.status == 'paid'">已支付</el-tag>
<el-tag type="danger" v-else-if="scope.row.status === 'refund'">已退款</el-tag>
<el-tag type="danger" v-else>支付失败</el-tag>
</template>
</el-table-column>
@ -154,17 +155,14 @@
<span>{{ parseTime(scope.row.payTime) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- >更多操作</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="操作" align="center" width="300" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button style="width: 60px" size="mini"
v-if = "scope.row.status !== 'refund'"
@click="handleRefund(scope.row.id)"
type="danger" plain round>退款</el-button>
</template>
</el-table-column>
</el-table>
</div>
@ -225,10 +223,12 @@
</template>
<script>
import {getOrderGoods, listOrder,orderStatisticsApi} from "@/api/cashier/goodsorder";
import {getGoodsOrder, getOrderGoods, listOrder, orderStatisticsApi} from "@/api/cashier/goodsorder";
import {queryStaffs} from "@/api/cashier/staff";
import {getDicts} from "@/api/dict/data";
import { exportExcelGoodsOrderApi } from "@/api/order/exportExcel";
import {cashierOrder} from "@/api/cashier/cashierorder";
import {refundApi, getOrderInfoApi} from "@/api/cashier/refund";
export default {
name: "order_Cashier",
@ -262,6 +262,7 @@ export default {
page: 1,
pageSize: 10,
},
orderGoods:'',
//
payList:[],
dialogRefund: false,
@ -299,6 +300,70 @@ export default {
this.orderStatistics = res.data;
})
},
// 退
async handleRefund(id){
await getGoodsOrder({"id":id}).then( response => {
this.goods = response.data
if (response.data.status === "refund") {
this.$message({
type: 'info',
message: '该订单已经退款'
});
this.dialogRefund = false;
}
})
let title = '是否将该收银台下的订单全部退款'
await getOrderInfoApi({orderNo: this.goods.orderNo,
type: 'goods'}).then(res=>{
if (res.code === 200) {
if (res.data.type === "1") {
title = '该订单下有其它商品订单,是否一并退款'
this.goods.payAmount = res.data.money
}
}
});
this.$confirm(title+', 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.dialogRefund = true;
}).catch(() => {
this.$message({
type: 'info',
message: '已取消退款'
});
this.dialogRefund = false;
});
},
// 退
refundConfirmed() {
this.dialogRefund = false;
console.log("cashierOrder",this.goods)
let map={
orderNo: this.goods.orderNo,
storeId: this.goods.storeId,
refundRemark:this.radio1 +"-"+ this.refundRemark,
type: "canRefund"
}
refundApi(map).then(res=>{
if (res.code === 200){
this.$message({
type: 'info',
message: '退款成功'
});
this.created()
}
})
},
// id
queryStaf(list,id){
let name = "";

Some files were not shown because too many files have changed in this diff Show More