mirror of
https://gitee.com/niucloud-team/javashop.git
synced 2026-04-25 11:18:23 +00:00
0.0.2
This commit is contained in:
parent
490b56d4f1
commit
000d7ec17e
70
webroot/addon/recharge/admin/api/recharge.ts
Normal file
70
webroot/addon/recharge/admin/api/recharge.ts
Normal file
@ -0,0 +1,70 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 充值订单 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取充值订单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderList(params: Record<string, any>) {
|
||||
return request.get(`recharge/order`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单统计
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeStat(params: Record<string, any>) {
|
||||
return request.get(`recharge/order/stat`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单详情
|
||||
* @param order_id
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderInfo(order_id: number) {
|
||||
return request.get(`recharge/order/${order_id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单状态列表
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderStatusList() {
|
||||
return request.get(`recharge/order/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款记录
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefund(params: Record<string, any>) {
|
||||
return request.get(`recharge/refund`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款状态
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefundStatus() {
|
||||
return request.get(`recharge/refund/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单发起退款
|
||||
* @returns
|
||||
*/
|
||||
export function rechargeRefund(order_id: number) {
|
||||
return request.put(`recharge/refund/${order_id}`, {}, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款统计
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefundStat() {
|
||||
return request.get(`recharge/refund/stat`);
|
||||
}
|
||||
19
webroot/addon/recharge/admin/lang/zh-cn/order.detail.json
Normal file
19
webroot/addon/recharge/admin/lang/zh-cn/order.detail.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"orderInfo":"订单详情",
|
||||
"orderDiscountMoney":"优惠金额",
|
||||
"ip":"下单IP",
|
||||
"payTime":"支付时间",
|
||||
"remark":"商家留言",
|
||||
"memberMessage":"买家留言",
|
||||
"orderNo":"订单编号",
|
||||
"orderStatus":"订单状态",
|
||||
"orderNoPlaceholder":"请输入订单编号",
|
||||
"createTime":"创建时间",
|
||||
"rechargeMoney":"充值金额",
|
||||
"orderMoney":"订单金额",
|
||||
"member":"买家",
|
||||
"orderFromName":"订单来源",
|
||||
"payTypeName":"支付方式",
|
||||
"startDate":"开始时间",
|
||||
"endDate":"结束时间"
|
||||
}
|
||||
23
webroot/addon/recharge/admin/lang/zh-cn/order.list.json
Normal file
23
webroot/addon/recharge/admin/lang/zh-cn/order.list.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"totalRechargeRefundMoney":"充值退款(元)",
|
||||
"totalRechargeMoney":"充值金额(元)",
|
||||
"rechargeRefundMoney":"充值退款",
|
||||
"rechargeNo":"充值单号",
|
||||
"orderStatus":"订单状态",
|
||||
"rechargeNoPlaceholder":"请输入充值单号",
|
||||
"createTime":"充值时间",
|
||||
"rechargeMoney":"充值金额",
|
||||
"orderMoney":"订单金额",
|
||||
"member":"会员信息",
|
||||
"orderFromName":"订单来源",
|
||||
"payTypeName":"支付方式",
|
||||
"startDate":"开始时间",
|
||||
"endDate":"结束时间",
|
||||
"namePlaceholder":"请选择",
|
||||
"refundBtn":"退款",
|
||||
"refundContent":"是否确认退款",
|
||||
"payTime": "支付时间",
|
||||
"refundStatus": "退款状态",
|
||||
"startMoney": "起始金额",
|
||||
"endMoney": "结束金额"
|
||||
}
|
||||
24
webroot/addon/recharge/admin/lang/zh-cn/order.refund.json
Normal file
24
webroot/addon/recharge/admin/lang/zh-cn/order.refund.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"refundNumber":"退款单号",
|
||||
"userInfo":"用户信息",
|
||||
"sourceNumber":"来源单号",
|
||||
"refundAmount":"退款金额",
|
||||
"refundTime":"退款时间",
|
||||
"detail": "详情",
|
||||
"statusName": "状态",
|
||||
"memberInfo": "会员信息",
|
||||
"refundSource": "退款来源",
|
||||
"startDate":"开始时间",
|
||||
"endDate":"结束时间",
|
||||
"refundStatus": "退款状态",
|
||||
"accumulateRefundMoney": "累计退款金额(元)",
|
||||
"haveRefundMoney": "退款中金额(元)",
|
||||
"refundSuccessMonry": "退款成功金额(元)",
|
||||
"refundFailMoney": "退款失败金额(元)",
|
||||
"memberInfoPlaceholder":"请输入会员编号/昵称/手机号",
|
||||
"refundNumberPlaceholder":"请输入退款单号",
|
||||
"orderNumber": "来源单号",
|
||||
"orderNumberPlaceholder": "请输入来源单号",
|
||||
"refundDetail": "退款详情",
|
||||
"nickname": "会员昵称"
|
||||
}
|
||||
103
webroot/addon/recharge/admin/views/order/detail.vue
Normal file
103
webroot/addon/recharge/admin/views/order/detail.vue
Normal file
@ -0,0 +1,103 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<el-form :model="formData" label-width="150px" ref="formRef" class="page-form" v-loading="loading">
|
||||
<el-card class="box-card !border-none relative" shadow="never" v-if="formData">
|
||||
<h3 class="panel-title">{{ t('orderInfo') }}</h3>
|
||||
|
||||
<el-form-item :label="t('orderNo')">
|
||||
<div class="input-width">{{ formData.order_no }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderMoney')">
|
||||
<div class="input-width">{{ formData.order_money }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderDiscountMoney')">
|
||||
<div class="input-width">{{ formData.order_discount_money }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('member')">
|
||||
<div class="input-width">
|
||||
<div class="flex flex flex-col cursor-pointer" @click="toMember(formData.member_id)">
|
||||
<span>{{ formData.member.nickname || '' }}</span>
|
||||
<span>{{ formData.member.mobile || '' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('ip')">
|
||||
<div class="input-width">{{ formData.ip }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderFromName')">
|
||||
<div class="input-width">{{ formData.order_from_name }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderStatus')">
|
||||
<div class="input-width">{{ formData.order_status_info.name }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('payTypeName')">
|
||||
<div class="input-width">{{ formData.pay_type_name }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('createTime')">
|
||||
<div class="input-width">{{ formData.create_time || '' }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('payTime')">
|
||||
<div class="input-width">{{ formData.pay_time || '' }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('remark')">
|
||||
<div class="input-width">{{ formData.remark || '' }}</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('memberMessage')">
|
||||
<div class="input-width">{{ formData.member_message || '' }}</div>
|
||||
</el-form-item>
|
||||
|
||||
</el-card>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { getRechargeOrderInfo } from '@/addon/recharge/api/recharge'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const orderId: number = parseInt(route.query.order_id as string)
|
||||
const loading = ref(true)
|
||||
|
||||
const formData: Record<string, any> | null = ref(null)
|
||||
|
||||
const setFormData = async (orderId: number = 0) => {
|
||||
loading.value = true
|
||||
formData.value = null
|
||||
await getRechargeOrderInfo(orderId).then(({ data }) => {
|
||||
formData.value = data
|
||||
})
|
||||
loading.value = false
|
||||
}
|
||||
|
||||
if (orderId) setFormData(orderId)
|
||||
else loading.value = false
|
||||
|
||||
const formRef = ref<FormInstance>()
|
||||
|
||||
/**
|
||||
* 会员详情
|
||||
*/
|
||||
const toMember = (memberId: number) => {
|
||||
router.push(`/member/detail?id=${memberId}`)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
297
webroot/addon/recharge/admin/views/order/list.vue
Normal file
297
webroot/addon/recharge/admin/views/order/list.vue
Normal file
@ -0,0 +1,297 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-page-title">{{ pageName }}</span>
|
||||
</div>
|
||||
|
||||
<el-card class="box-card !border-none table-search-wra base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
<el-col :span="12" class="min-w-[100px]">
|
||||
<el-statistic :value="rechargeStatistics.recharge_money ? Number.parseFloat(rechargeStatistics.recharge_money).toFixed(2) : '0.00'">
|
||||
<template #title>
|
||||
<div class="text-[14px] mb-[9px]">{{ t('totalRechargeMoney') }}</div>
|
||||
</template>
|
||||
</el-statistic>
|
||||
</el-col>
|
||||
<el-col :span="12" class="min-w-[100px]">
|
||||
<el-statistic :value="rechargeStatistics.recharge_refund_money ? Number.parseFloat(rechargeStatistics.recharge_refund_money).toFixed(2) : '0.00'">
|
||||
<template #title>
|
||||
<div class="text-[14px] mb-[9px]">{{ t('totalRechargeRefundMoney') }}</div>
|
||||
</template>
|
||||
</el-statistic>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card !border-none mb-[10px] table-search-wrap" shadow="never">
|
||||
<el-form :inline="true" :model="orderTableData.searchParam" ref="searchFormRef">
|
||||
<el-form-item :label="t('rechargeNo')" prop="order_no">
|
||||
<el-input v-model="orderTableData.searchParam.order_no" :placeholder="t('rechargeNoPlaceholder')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderFromName')" prop="order_from">
|
||||
<el-select v-model="orderTableData.searchParam.order_from" clearable class="input-width">
|
||||
<el-option :label="t('selectPlaceholder')" value="" />
|
||||
<el-option :label="item" :value="key" v-for="(item, key) in channelList" :key="key" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('orderStatus')" prop="order_status">
|
||||
<el-select v-model="orderTableData.searchParam.order_status" clearable class="input-width">
|
||||
<el-option :label="t('selectPlaceholder')" value="" />
|
||||
<el-option :label="item['name']" :value="item['status']" v-for="(item,index) in statusList" :key="index"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('createTime')" prop="create_time">
|
||||
<el-date-picker v-model="orderTableData.searchParam.create_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('rechargeMoney')">
|
||||
<div class="region-input">
|
||||
<el-form-item prop="start_money">
|
||||
<input type="text" :placeholder="t('startMoney')" v-model="orderTableData.searchParam.start_money">
|
||||
</el-form-item>
|
||||
<span class="separator">-</span>
|
||||
<el-form-item prop="end_money">
|
||||
<input type="text" :placeholder="t('endMoney')" v-model="orderTableData.searchParam.end_money">
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('payTime')">
|
||||
<el-date-picker v-model="orderTableData.searchParam.pay_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="loadOrderList()">{{ t('search') }}</el-button>
|
||||
<el-button @click="searchFormRef?.resetFields()">{{ t('reset') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<div class="mt-[16px]">
|
||||
<el-table :data="orderTableData.data" size="large" v-loading="orderTableData.loading">
|
||||
<template #empty>
|
||||
<span>{{ !orderTableData.loading ? t('emptyData') : '' }}</span>
|
||||
</template>
|
||||
|
||||
<el-table-column :show-overflow-tooltip="true" :label="t('member')" align="left" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center cursor-pointer " @click="toMember(row.member.member_id)">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.member.headimg" :src="img(row.member.headimg)" alt="">
|
||||
<img class="w-[50px] h-[50px] rounded-full mr-[10px]" v-else src="@/app/assets/images/member_head.png" alt="">
|
||||
<div class="flex flex flex-col">
|
||||
<span>{{ row.member.nickname || '' }}</span>
|
||||
<span>{{ row.member.mobile || '' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="order_no" :show-overflow-tooltip="true" :label="t('rechargeNo')" align="center" min-width="140" />
|
||||
|
||||
<el-table-column prop="order_money" :label="t('rechargeMoney')" align="center" min-width="140" />
|
||||
|
||||
<el-table-column prop="order_from_name" :label="t('orderFromName')" align="center" min-width="140" />
|
||||
|
||||
<el-table-column :label="t('orderStatus')" min-width="120" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.order_status_info.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="pay_type_name" :label="t('payTypeName')" align="center" min-width="140" />
|
||||
|
||||
<el-table-column :label="t('createTime')" min-width="180" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.create_time || '' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column :label="t('payTime')" min-width="180" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.pay_time || '' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('operation')" fixed="right" align="right" width="130">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="infoEvent(row)">{{ t('info') }}</el-button>
|
||||
|
||||
<el-button
|
||||
v-if="[1, 10].includes(row.order_status_info.status) && row.is_enable_refund && row.refund_status == 0"
|
||||
type="primary" link @click="refundFn(row)">{{ t('refundBtn') }}
|
||||
</el-button>
|
||||
|
||||
<template v-for="(item, index) in row.order_status_info.action" :key="index">
|
||||
<el-button type="primary" link @click="orderEvent(row, item.class)">{{ item.name }}</el-button>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<div class="mt-[16px] flex justify-end">
|
||||
<el-pagination v-model:current-page="orderTableData.page" v-model:page-size="orderTableData.limit"
|
||||
layout="total, sizes, prev, pager, next, jumper" :total="orderTableData.total"
|
||||
@size-change="loadOrderList()" @current-change="loadOrderList" />
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<!-- 是否退款 -->
|
||||
<el-dialog v-model="refundShowDialog" :title="t('refundBtn')" width="500px" :destroy-on-close="true">
|
||||
<p>{{ t('refundContent') }}</p>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="refundShowDialog = false">{{ t('cancel') }}</el-button>
|
||||
<el-button type="primary" @click="confirmRefund" :loading="refundLoading">{{ t('confirm') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import {
|
||||
getRechargeOrderStatusList,
|
||||
getRechargeOrderList,
|
||||
rechargeRefund,
|
||||
getRechargeStat
|
||||
} from '@/addon/recharge/api/recharge'
|
||||
import { getChannelType } from '@/app/api/sys'
|
||||
import { img } from '@/utils/common'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { AnyObject } from '@/types/global'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const pageName = route.meta.title
|
||||
const memberId: number = parseInt(route.query.id as string || '0')
|
||||
|
||||
const channelList = ref([])
|
||||
const setChannelList = async () => {
|
||||
channelList.value = await (await getChannelType()).data
|
||||
}
|
||||
setChannelList()
|
||||
|
||||
const orderTableData = reactive({
|
||||
page: 1,
|
||||
limit: 10,
|
||||
total: 0,
|
||||
loading: true,
|
||||
data: [],
|
||||
searchParam: {
|
||||
order_no: '',
|
||||
order_status: '',
|
||||
member_id: memberId,
|
||||
create_time: [],
|
||||
pay_time: [],
|
||||
order_from: '',
|
||||
start_money: '',
|
||||
end_money: ''
|
||||
}
|
||||
})
|
||||
|
||||
interface RechargeType {
|
||||
recharge_money?: string,
|
||||
recharge_refund_money?: string
|
||||
}
|
||||
const rechargeStatistics = ref<RechargeType>({})
|
||||
const checkRechargeInfo = () => {
|
||||
getRechargeStat({
|
||||
member_id: memberId
|
||||
}).then(res => {
|
||||
rechargeStatistics.value = res.data
|
||||
})
|
||||
}
|
||||
checkRechargeInfo()
|
||||
|
||||
const statusList = ref([])
|
||||
|
||||
const searchFormRef = ref<FormInstance>()
|
||||
|
||||
const setCategoryList = async () => {
|
||||
statusList.value = await (await getRechargeOrderStatusList()).data
|
||||
}
|
||||
setCategoryList()
|
||||
|
||||
const loadOrderList = (page: number = 1) => {
|
||||
orderTableData.loading = true
|
||||
orderTableData.page = page
|
||||
|
||||
getRechargeOrderList({
|
||||
page: orderTableData.page,
|
||||
limit: orderTableData.limit,
|
||||
...orderTableData.searchParam
|
||||
}).then(res => {
|
||||
orderTableData.loading = false
|
||||
orderTableData.data = res.data.data
|
||||
orderTableData.total = res.data.total
|
||||
}).catch(() => {
|
||||
orderTableData.loading = false
|
||||
})
|
||||
}
|
||||
loadOrderList()
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param data
|
||||
*/
|
||||
const infoEvent = (data: any) => {
|
||||
router.push(`/recharge/order/detail?order_id=${data.order_id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单操作
|
||||
*/
|
||||
const orderEvent = (data: any, type: string) => {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款操作
|
||||
*/
|
||||
const refundShowDialog = ref(false)
|
||||
let refundData: AnyObject | null = null
|
||||
const refundLoading = ref(false)
|
||||
|
||||
const refundFn = (data: AnyObject) => {
|
||||
refundShowDialog.value = true
|
||||
refundData = data
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认退款
|
||||
*/
|
||||
const confirmRefund = () => {
|
||||
if (refundLoading.value) return
|
||||
refundLoading.value = true
|
||||
|
||||
rechargeRefund(refundData?.order_id).then(res => {
|
||||
refundShowDialog.value = false
|
||||
refundLoading.value = false
|
||||
loadOrderList()
|
||||
}).catch(() => {
|
||||
refundLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员详情
|
||||
*/
|
||||
const toMember = (memberId: number) => {
|
||||
router.push(`/member/detail?id=${memberId}`)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
249
webroot/addon/recharge/admin/views/order/refund.vue
Normal file
249
webroot/addon/recharge/admin/views/order/refund.vue
Normal file
@ -0,0 +1,249 @@
|
||||
<template>
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
<div class="flex justify-between items-center mb-[5px]">
|
||||
<span class="text-page-title">{{ pageName }}</span>
|
||||
</div>
|
||||
<el-card class="box-card !border-none table-search-wra base-bg !px-[35px]" shadow="never">
|
||||
<el-row class="flex">
|
||||
<el-col :span="12">
|
||||
<div class="statistic-card">
|
||||
<el-statistic :value="refundStat.refund_all_money"></el-statistic>
|
||||
<div class="statistic-footer">
|
||||
<div class="footer-item text-[14px] text-[#666]">
|
||||
<span>{{ t('accumulateRefundMoney') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div class="statistic-card">
|
||||
<el-statistic :value="refundStat.refund_have_money"></el-statistic>
|
||||
<div class="statistic-footer">
|
||||
<div class="footer-item text-[14px] text-[#666]">
|
||||
<span>{{ t('haveRefundMoney') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card !border-none mb-[10px] table-search-wrap" shadow="never">
|
||||
<el-form :inline="true" :model="refundTableData.searchParam" ref="searchFormRef">
|
||||
<el-form-item :label="t('memberInfo')" prop="keywords">
|
||||
<el-input v-model="refundTableData.searchParam.keywords" class="w-[240px]" :placeholder="t('memberInfoPlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundNumber')" prop="refund_no">
|
||||
<el-input v-model="refundTableData.searchParam.refund_no" class="w-[240px]" :placeholder="t('refundNumberPlaceholder')" />
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('orderNumber')" prop="order_no">
|
||||
<el-input v-model="refundTableData.searchParam.order_no" class="w-[240px]" :placeholder="t('orderNumberPlaceholder')" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item :label="t('refundStatus')" prop="status">
|
||||
<el-select v-model="refundTableData.searchParam.status" clearable class="input-width">
|
||||
<el-option :label="t('selectPlaceholder')" value="" />
|
||||
<el-option :label="item.name" :value="key" v-for="(item, key) in refundList" :key="key"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundTime')" prop="create_time">
|
||||
<el-date-picker v-model="refundTableData.searchParam.create_time" type="datetimerange"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" :start-placeholder="t('startDate')"
|
||||
:end-placeholder="t('endDate')" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="loadRefundList()">{{ t('search') }}</el-button>
|
||||
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<div>
|
||||
<el-table :data="refundTableData.data" size="large" v-loading="refundTableData.loading">
|
||||
<template #empty>
|
||||
<span>{{ !refundTableData.loading ? t('emptyData') : '' }}</span>
|
||||
</template>
|
||||
|
||||
<el-table-column :show-overflow-tooltip="true" :label="t('memberInfo')" align="left" min-width="140">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center cursor-pointer " @click="toMember(row.member.member_id)">
|
||||
<img class="w-[50px] h-[50px] mr-[10px]" v-if="row.member.headimg" :src="img(row.member.headimg)" alt="">
|
||||
<img class="w-[50px] h-[50px] rounded-full mr-[10px]" v-else src="@/app/assets/images/member_head.png" alt="">
|
||||
<div class="flex flex flex-col">
|
||||
<span>{{ row.member.nickname || '' }}</span>
|
||||
<span>{{ row.member.mobile || '' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="refund_no" :label="t('refundNumber')" align="center" min-width="200" />
|
||||
<el-table-column prop="item.item_name" :label="t('refundSource')" align="center" min-width="140" />
|
||||
<el-table-column prop="money" :label="t('refundAmount')" align="center" min-width="140" />
|
||||
<el-table-column :label="t('refundTime')" min-width="180" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.create_time || '' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('statusName')" min-width="180" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ row.status_name || '' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column :label="t('operation')" fixed="right" align="right" width="130">
|
||||
<template #default="{ row }">
|
||||
<el-button type="primary" link @click="infoEvent(row)">{{ t('info') }}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<div class="mt-[16px] flex justify-end">
|
||||
<el-pagination v-model:current-page="refundTableData.page" v-model:page-size="refundTableData.limit"
|
||||
layout="total, sizes, prev, pager, next, jumper" :total="refundTableData.total"
|
||||
@size-change="loadRefundList()" @current-change="loadRefundList" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-model="refundInfoShowDialog" :title="t('refundDetail')" width="500px" :destroy-on-close="true">
|
||||
<el-form :model="refundInfo" label-width="120px" ref="formRef" class="page-form">
|
||||
<el-form-item :label="t('nickname')">
|
||||
<div class="input-width"> {{ refundInfo.member.nickname }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundSource')">
|
||||
<div class="input-width"> {{ refundInfo.item.item_name }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundAmount')">
|
||||
<div class="input-width"> {{ refundInfo.money }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('orderNumber')">
|
||||
<div class="input-width"> {{ refundInfo.item.order_no }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundNumber')">
|
||||
<div class="input-width"> {{ refundInfo.refund_no }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('refundTime')">
|
||||
<div class="input-width"> {{ refundInfo.create_time }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('statusName')">
|
||||
<div class="input-width"> {{ refundInfo.status_name }}</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button type="primary" @click="refundInfoShowDialog = false">{{ t('confirm') }}</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, ref } from 'vue'
|
||||
import { t } from '@/lang'
|
||||
import { img } from '@/utils/common'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { getRechargeRefund, getRechargeRefundStatus, getRechargeRefundStat } from '@/addon/recharge/api/recharge'
|
||||
import { FormInstance } from 'element-plus'
|
||||
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const pageName = route.meta.title
|
||||
const searchFormRef = ref<FormInstance>()
|
||||
const refundTableData = reactive({
|
||||
page: 1,
|
||||
limit: 10,
|
||||
total: 0,
|
||||
loading: true,
|
||||
data: [],
|
||||
searchParam: {
|
||||
refund_no: '',
|
||||
create_time: [],
|
||||
status: '',
|
||||
keywords: '',
|
||||
order_no: ''
|
||||
}
|
||||
})
|
||||
|
||||
const resetForm = (formEl: FormInstance | undefined) => {
|
||||
if (!formEl) return
|
||||
|
||||
formEl.resetFields()
|
||||
loadRefundList()
|
||||
}
|
||||
/**
|
||||
* 获取退款列表
|
||||
*/
|
||||
const loadRefundList = (page: number = 1) => {
|
||||
refundTableData.loading = true
|
||||
refundTableData.page = page
|
||||
|
||||
getRechargeRefund({
|
||||
page: refundTableData.page,
|
||||
limit: refundTableData.limit,
|
||||
...refundTableData.searchParam
|
||||
}).then(res => {
|
||||
refundTableData.loading = false
|
||||
refundTableData.data = res.data.data
|
||||
refundTableData.total = res.data.total
|
||||
}).catch(() => {
|
||||
refundTableData.loading = false
|
||||
})
|
||||
}
|
||||
loadRefundList()
|
||||
|
||||
const refundList = ref([])
|
||||
const checkRefundList = () => {
|
||||
getRechargeRefundStatus().then(res => {
|
||||
refundList.value = res.data
|
||||
})
|
||||
}
|
||||
checkRefundList()
|
||||
|
||||
const refundStat = reactive({
|
||||
refund_all_money: 0.00,
|
||||
refund_have_money: 0.00,
|
||||
refund_fail_money: 0.00
|
||||
})
|
||||
const checkRefundStat = () => {
|
||||
getRechargeRefundStat().then(res => {
|
||||
refundStat.refund_all_money = res.data.all.money
|
||||
refundStat.refund_have_money = res.data.have.money
|
||||
refundStat.refund_fail_money = res.data['-1'].money
|
||||
})
|
||||
}
|
||||
checkRefundStat()
|
||||
|
||||
const refundInfoShowDialog = ref<Boolean>(false)
|
||||
interface RefundInfoType {
|
||||
member: {
|
||||
nickname: string
|
||||
}
|
||||
item: {
|
||||
item_name: string
|
||||
order_no: string
|
||||
}
|
||||
money: string
|
||||
refund_no: string
|
||||
create_time: string
|
||||
status_name: string
|
||||
}
|
||||
const refundInfo = ref<RefundInfoType>({})
|
||||
|
||||
const infoEvent = (info:any) => {
|
||||
refundInfo.value = info
|
||||
refundInfoShowDialog.value = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员详情
|
||||
*/
|
||||
const toMember = (memberId: number) => {
|
||||
router.push(`/member/detail?id=${memberId}`)
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
||||
11
webroot/addon/recharge/info.json
Normal file
11
webroot/addon/recharge/info.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "会员充值",
|
||||
"desc": "在线充值到会员账户",
|
||||
"key": "recharge",
|
||||
"version": "1.0.0",
|
||||
"author": "niucloud",
|
||||
"type": "addon",
|
||||
"support_app": "",
|
||||
"jar": "recharge.jar",
|
||||
"mainClass": "com.niu.recharge.WebApplication"
|
||||
}
|
||||
BIN
webroot/addon/recharge/jar/recharge.jar
Normal file
BIN
webroot/addon/recharge/jar/recharge.jar
Normal file
Binary file not shown.
90
webroot/addon/recharge/java/dependency-reduced-pom.xml
Normal file
90
webroot/addon/recharge/java/dependency-reduced-pom.xml
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>niucloud-addon</artifactId>
|
||||
<groupId>com.niu</groupId>
|
||||
<version>1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>recharge</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<finalName>recharge</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<filters>
|
||||
<filter>
|
||||
<artifact>*:*</artifact>
|
||||
<excludes>
|
||||
<exclude>META-INF/services/*</exclude>
|
||||
<exclude>META-INF/spring/*</exclude>
|
||||
<exclude>META-INF/**.factories</exclude>
|
||||
<exclude>META-INF/**.xml</exclude>
|
||||
<exclude>META-INF/**.properties</exclude>
|
||||
</excludes>
|
||||
</filter>
|
||||
</filters>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tasks />
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.niu</groupId>
|
||||
<artifactId>niucloud-core</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.24</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<java.version>1.8</java.version>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
</properties>
|
||||
</project>
|
||||
106
webroot/addon/recharge/java/pom.xml
Normal file
106
webroot/addon/recharge/java/pom.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>niucloud-addon</artifactId>
|
||||
<groupId>com.niu</groupId>
|
||||
<version>1.0</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>recharge</artifactId>
|
||||
<version>1.0.0</version>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.niu</groupId>
|
||||
<artifactId>niucloud-core</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.mail</groupId>
|
||||
<artifactId>javax.mail-api</artifactId>
|
||||
<version>1.6.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
<artifactId>javax.mail</artifactId>
|
||||
<version>1.6.2</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>recharge</finalName>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>3.2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<filters>
|
||||
<filter>
|
||||
<artifact>*:*</artifact>
|
||||
<excludes>
|
||||
<exclude>META-INF/services/*</exclude>
|
||||
<exclude>META-INF/spring/*</exclude>
|
||||
<exclude>META-INF/**.factories</exclude>
|
||||
<exclude>META-INF/**.xml</exclude>
|
||||
<exclude>META-INF/**.properties</exclude>
|
||||
</excludes>
|
||||
</filter>
|
||||
</filters>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-antrun-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>run</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<tasks>
|
||||
</tasks>
|
||||
<!-- <copy overwrite="true" file="target/recharge.jar"-->
|
||||
<!-- tofile="../../webroot/jar/addon/recharge.jar"/>-->
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,12 @@
|
||||
package com.niu.recharge;
|
||||
|
||||
import com.niu.core.common.annotation.SpringModuleApplication;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
|
||||
@SpringModuleApplication("recharge")
|
||||
public class WebAppApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WebAppApplication.class, args);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,57 @@
|
||||
package com.niu.recharge.controller.adminapi;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.Result;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.service.admin.IRechargeOrderService;
|
||||
import com.niu.recharge.service.admin.param.RechargeOrderSearchParam;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("adminapi/recharge/order")
|
||||
public class OrderController {
|
||||
|
||||
@Resource
|
||||
IRechargeOrderService rechargeOrderService;
|
||||
|
||||
@GetMapping("")
|
||||
public Result lists(PageParam pageParam, RechargeOrderSearchParam searchParam) {
|
||||
return Result.success(rechargeOrderService.list(pageParam, searchParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/{order_id}")
|
||||
public Result detail(@PathVariable("order_id") Integer orderId) {
|
||||
return Result.success(rechargeOrderService.detail(orderId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单状态
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/status")
|
||||
public Result<Map<Integer, Map<String, Object>>> status() {
|
||||
return Result.success(OrderStatusEnum.getMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单统计
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/stat")
|
||||
public Result stat(RechargeOrderSearchParam searchParam) {
|
||||
return Result.success(rechargeOrderService.stat(searchParam));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package com.niu.recharge.controller.adminapi;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.Result;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import com.niu.recharge.service.admin.IRechargeRefundService;
|
||||
import com.niu.recharge.service.admin.param.RechargeRefundSearchParam;
|
||||
import com.niu.recharge.service.admin.vo.RechargeRefundStatVo;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("adminapi/recharge/refund")
|
||||
public class RefundController {
|
||||
|
||||
@Resource
|
||||
IRechargeRefundService rechargeRefundService;
|
||||
|
||||
/**
|
||||
* 退款列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("")
|
||||
public Result lists(PageParam pageParam, RechargeRefundSearchParam searchParam) {
|
||||
return Result.success(rechargeRefundService.list(pageParam, searchParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
@PutMapping("/{order_id}")
|
||||
public Result refund(@PathVariable("order_id") Integer orderId) {
|
||||
rechargeRefundService.refund(orderId);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款详情
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/{refund_id}")
|
||||
public Result detail(@PathVariable("refund_id") Integer refundId) {
|
||||
return Result.success(rechargeRefundService.detail(refundId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款状态
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/status")
|
||||
public Result<Map<Integer, Map<String, Object>>> status() {
|
||||
return Result.success(RefundStatusEnum.getMap());
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款统计
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/stat")
|
||||
public Result<RechargeRefundStatVo> stat(RechargeRefundSearchParam searchParam) {
|
||||
return Result.success(rechargeRefundService.stat(searchParam));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.niu.recharge.controller.api;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.core.common.domain.Result;
|
||||
import com.niu.recharge.service.api.IRechargeOrderService;
|
||||
import com.niu.recharge.service.api.param.RechargeOrderSearchParam;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderInfoVo;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderListVo;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("api/recharge")
|
||||
public class RechargeController {
|
||||
|
||||
@Resource
|
||||
IRechargeOrderService rechargeOrderService;
|
||||
|
||||
/**
|
||||
* 充值订单创建
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/recharge")
|
||||
public Result<RechargeOrderCreateVo> create(@Validated @RequestBody RechargeOrderCreateParam param) {
|
||||
return Result.success(rechargeOrderService.create(param));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/recharge")
|
||||
public Result<PageResult<RechargeOrderListVo>> list(PageParam pageParam, RechargeOrderSearchParam searchParam) {
|
||||
return Result.success(rechargeOrderService.list(pageParam, searchParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/recharge/{order_id}")
|
||||
public Result<RechargeOrderInfoVo> detail(@PathVariable("order_id") Integer orderId) {
|
||||
return Result.success(rechargeOrderService.detail(orderId));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,81 @@
|
||||
package com.niu.recharge.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="order_id", type= IdType.AUTO)
|
||||
private Integer orderId;
|
||||
|
||||
/** 站点id */
|
||||
private Integer siteId;
|
||||
|
||||
/** 订单编号 */
|
||||
private String orderNo;
|
||||
|
||||
/** 订单来源 */
|
||||
private String orderFrom;
|
||||
|
||||
/** 订单类型 */
|
||||
private String orderType;
|
||||
|
||||
/** 支付流水号 */
|
||||
private String outTradeNo;
|
||||
|
||||
/** 订单状态 */
|
||||
private Integer orderStatus;
|
||||
|
||||
/** 退款状态 */
|
||||
private Integer refundStatus;
|
||||
|
||||
/** 会员id */
|
||||
private Integer memberId;
|
||||
|
||||
/** 会员ip */
|
||||
private String ip;
|
||||
|
||||
/** 会员留言信息 */
|
||||
private String memberMessage;
|
||||
|
||||
/** 订单项目金额 */
|
||||
private BigDecimal orderItemMoney;
|
||||
|
||||
/** 订单优惠金额 */
|
||||
private BigDecimal orderDiscountMoney;
|
||||
|
||||
/** 订单金额 */
|
||||
private BigDecimal orderMoney;
|
||||
|
||||
/** 创建时间 */
|
||||
private Long createTime;
|
||||
|
||||
/** 订单支付时间 */
|
||||
private Long payTime;
|
||||
|
||||
/** 订单关闭时间 */
|
||||
private Long closeTime;
|
||||
|
||||
/** 是否删除(针对后台) */
|
||||
private Integer isDelete;
|
||||
|
||||
/** 是否允许退款 */
|
||||
private Integer isEnableRefund;
|
||||
|
||||
/** 商家留言 */
|
||||
private String remark;
|
||||
|
||||
/** 发票id,0表示不开发票 */
|
||||
private Integer invoiceId;
|
||||
|
||||
/** 关闭原因 */
|
||||
private String closeReason;
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package com.niu.recharge.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderItem implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="order_item_id", type= IdType.AUTO)
|
||||
private Integer orderItemId;
|
||||
|
||||
/** 订单id */
|
||||
private Integer orderId;
|
||||
|
||||
/** 站点id */
|
||||
private Integer siteId;
|
||||
|
||||
/** 会员id */
|
||||
private Integer memberId;
|
||||
|
||||
/** 项目id */
|
||||
private Integer itemId;
|
||||
|
||||
/** 项目类型 */
|
||||
private String itemType;
|
||||
|
||||
/** 项目名称 */
|
||||
private String itemName;
|
||||
|
||||
/** 项目图片 */
|
||||
private String itemImage;
|
||||
|
||||
/** 项目单价 */
|
||||
private BigDecimal price;
|
||||
|
||||
/** 购买数量 */
|
||||
private Integer num;
|
||||
|
||||
/** 项目总价 */
|
||||
private BigDecimal itemMoney;
|
||||
|
||||
/** 是否退款 */
|
||||
private Integer isRefund;
|
||||
|
||||
/** 退款编号 */
|
||||
private String refundNo;
|
||||
|
||||
/** 退款状态 */
|
||||
private Integer refundStatus;
|
||||
|
||||
/** 创建时间 */
|
||||
private Long createTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,56 @@
|
||||
package com.niu.recharge.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderItemRefund implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="refund_id", type= IdType.AUTO)
|
||||
private Integer refundId;
|
||||
|
||||
private Integer orderItemId;
|
||||
|
||||
/** 订单id */
|
||||
private Integer orderId;
|
||||
|
||||
/** 订单编号 */
|
||||
private String orderNo;
|
||||
|
||||
/** 退款编号 */
|
||||
private String refundNo;
|
||||
|
||||
/** 站点id */
|
||||
private Integer siteId;
|
||||
|
||||
/** 会员id */
|
||||
private Integer memberId;
|
||||
|
||||
/** 退货数量 */
|
||||
private Integer num;
|
||||
|
||||
/** 总退款 */
|
||||
private BigDecimal money;
|
||||
|
||||
/** 退款状态 */
|
||||
private Integer status;
|
||||
|
||||
/** 创建时间 */
|
||||
private Long createTime;
|
||||
|
||||
/** 审核时间 */
|
||||
private Long auditTime;
|
||||
|
||||
/** 转账时间 */
|
||||
private Long transferTime;
|
||||
|
||||
/** 项目类型 */
|
||||
private String itemType;
|
||||
|
||||
}
|
||||
@ -0,0 +1,44 @@
|
||||
package com.niu.recharge.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderLog implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value="id", type= IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
private Integer orderId;
|
||||
|
||||
/** 站点id */
|
||||
private Integer siteId;
|
||||
|
||||
/** 操作内容 */
|
||||
private String action;
|
||||
|
||||
/** 操作人id */
|
||||
private Integer uid;
|
||||
|
||||
/** 操作人名称 */
|
||||
private String nickName;
|
||||
|
||||
/** 订单状态 */
|
||||
private Integer orderStatus;
|
||||
|
||||
/** 操作类型1买家2卖家 3 系统任务 */
|
||||
private Integer actionWay;
|
||||
|
||||
/** 订单状态名称,操作后 */
|
||||
private String orderStatusName;
|
||||
|
||||
/** 操作时间 */
|
||||
private Long actionTime;
|
||||
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package com.niu.recharge.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum OrderStatusEnum {
|
||||
WAIT_PAY("待支付", 0),
|
||||
FINISH("已完成", 1),
|
||||
CLOSE("已关闭", -1);
|
||||
|
||||
private final String name;
|
||||
|
||||
private final Integer status;
|
||||
|
||||
public static Map<Integer, Map<String, Object>> getMap() {
|
||||
Map<Integer, Map<String, Object>> map = new HashMap<>();
|
||||
for(OrderStatusEnum item : OrderStatusEnum.values())
|
||||
{
|
||||
Map<String, Object> mapItem = new HashMap<>();
|
||||
mapItem.put("name", item.getName());
|
||||
mapItem.put("status", item.getStatus());
|
||||
map.put(item.getStatus(), mapItem);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过status获取当前名称
|
||||
* @param status
|
||||
* @return
|
||||
*/
|
||||
public static String getNameByStatus(Integer status){
|
||||
for(OrderStatusEnum item : OrderStatusEnum.values())
|
||||
{
|
||||
if(item.getStatus().equals(status))
|
||||
{
|
||||
return item.getName();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package com.niu.recharge.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum RefundStatusEnum {
|
||||
REFUNDING("退款中", 1),
|
||||
REFUND_FAIL("退款失败", -1),
|
||||
REFUND_COMPLETED("退款完成", 2);
|
||||
|
||||
private final String name;
|
||||
|
||||
private final Integer status;
|
||||
|
||||
public static Map<Integer, Map<String, Object>> getMap() {
|
||||
Map<Integer, Map<String, Object>> map = new HashMap<>();
|
||||
for(RefundStatusEnum item : RefundStatusEnum.values())
|
||||
{
|
||||
Map<String, Object> mapItem = new HashMap<>();
|
||||
mapItem.put("name", item.getName());
|
||||
mapItem.put("status", item.getStatus());
|
||||
map.put(item.getStatus(), mapItem);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过status获取当前名称
|
||||
* @param status
|
||||
* @return
|
||||
*/
|
||||
public static String getNameByStatus(Integer status){
|
||||
for(RefundStatusEnum item : RefundStatusEnum.values())
|
||||
{
|
||||
if(item.getStatus().equals(status))
|
||||
{
|
||||
return item.getName();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package com.niu.recharge.listener;
|
||||
|
||||
import com.niu.core.common.annotation.EventCallback;
|
||||
import com.niu.core.common.exception.CommonException;
|
||||
import com.niu.core.event.pay.PayCreateEventDefiner;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 一对多的事件监听,且有返回值
|
||||
*/
|
||||
@EventCallback("recharge")
|
||||
@Component
|
||||
public class PayCreateListener extends PayCreateEventDefiner {
|
||||
|
||||
@Resource
|
||||
ICoreRechargeOrderService coreRechargeOrderService;
|
||||
|
||||
@Override
|
||||
public PayCreateEventDefiner.PayCreateEventResult handleCallback(PayCreateEventDefiner.PayCreateEvent event) {
|
||||
if (!event.getTradeType().equals("recharge")) return null;
|
||||
|
||||
RechargeOrder order = coreRechargeOrderService.orderInfo(event.getTradeId());
|
||||
if (!order.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getStatus())) throw new CommonException("只有待支付的订单可以支付");
|
||||
|
||||
PayCreateEventDefiner.PayCreateEventResult result = new PayCreateEventDefiner.PayCreateEventResult();
|
||||
result.setTradeId(event.getTradeId());
|
||||
result.setTradeType(event.getTradeType());
|
||||
result.setMainType("member");
|
||||
result.setMainId(order.getMemberId());
|
||||
result.setMoney(order.getOrderMoney());
|
||||
result.setBody("充值订单");
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.niu.recharge.listener;
|
||||
|
||||
import com.niu.core.common.annotation.EventListen;
|
||||
import com.niu.core.common.component.context.listener.AbstractListener;
|
||||
import com.niu.core.event.pay.PaySuccessEvent;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 支付成功
|
||||
*/
|
||||
@EventListen("recharge")
|
||||
@Component
|
||||
public class PaySuccessListener extends AbstractListener {
|
||||
|
||||
@Resource
|
||||
ICoreRechargeOrderService coreRechargeOrderService;
|
||||
|
||||
public void handleEvent(PaySuccessEvent event) {
|
||||
if (event.getTradeType().equals("recharge")) {
|
||||
coreRechargeOrderService.pay(event.getPay());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.niu.recharge.listener;
|
||||
|
||||
import com.niu.core.common.annotation.EventListen;
|
||||
import com.niu.core.common.component.context.listener.AbstractListener;
|
||||
import com.niu.core.event.refund.RefundSuccessEvent;
|
||||
import com.niu.recharge.service.core.ICoreRechargeRefundService;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 支付成功
|
||||
*/
|
||||
@EventListen("recharge")
|
||||
@Component
|
||||
public class RefundSuccessListener extends AbstractListener {
|
||||
|
||||
@Resource
|
||||
ICoreRechargeRefundService coreRechargeRefundService;
|
||||
|
||||
public void handleEvent(RefundSuccessEvent event) {
|
||||
if (event.getTradeType().equals("recharge")) {
|
||||
coreRechargeRefundService.refundComplete(event.getRefund().getRefundNo());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package com.niu.recharge.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RechargeOrderItemMapper extends BaseMapper<RechargeOrderItem> {
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package com.niu.recharge.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.niu.recharge.entity.RechargeOrderItemRefund;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RechargeOrderItemRefundMapper extends BaseMapper<RechargeOrderItemRefund> {
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
package com.niu.recharge.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.niu.recharge.entity.RechargeOrderLog;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RechargeOrderLogMapper extends BaseMapper<RechargeOrderLog> {
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
package com.niu.recharge.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import org.mapstruct.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface RechargeOrderMapper extends BaseMapper<RechargeOrder> {
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
package com.niu.recharge.service.admin;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.recharge.service.admin.param.RechargeOrderSearchParam;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderInfoVo;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderListVo;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderStatVo;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
|
||||
public interface IRechargeOrderService {
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
PageResult<RechargeOrderListVo> list(PageParam pageParam, RechargeOrderSearchParam searchParam);
|
||||
|
||||
/**
|
||||
* 充值订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
RechargeOrderInfoVo detail(Integer orderId);
|
||||
|
||||
RechargeOrderStatVo stat(RechargeOrderSearchParam searchParam);
|
||||
}
|
||||
@ -0,0 +1,33 @@
|
||||
package com.niu.recharge.service.admin;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.recharge.service.admin.param.RechargeRefundSearchParam;
|
||||
import com.niu.recharge.service.admin.vo.*;
|
||||
|
||||
public interface IRechargeRefundService {
|
||||
|
||||
/**
|
||||
* 退款列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
PageResult<RechargeRefundListVo> list(PageParam pageParam, RechargeRefundSearchParam searchParam);
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*/
|
||||
void refund(Integer orderId);
|
||||
|
||||
/**
|
||||
* 充值退款详情
|
||||
*
|
||||
* @param refundId
|
||||
* @return
|
||||
*/
|
||||
RechargeRefundInfoVo detail(Integer refundId);
|
||||
|
||||
RechargeRefundStatVo stat(RechargeRefundSearchParam searchParam);
|
||||
}
|
||||
@ -0,0 +1,149 @@
|
||||
package com.niu.recharge.service.admin.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.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.core.common.utils.RequestUtils;
|
||||
import com.niu.core.common.utils.mapper.QueryMapperUtils;
|
||||
import com.niu.core.entity.member.Member;
|
||||
import com.niu.core.mapper.member.MemberMapper;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderMapper;
|
||||
import com.niu.recharge.service.admin.IRechargeOrderService;
|
||||
import com.niu.recharge.service.admin.param.RechargeOrderSearchParam;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderInfoVo;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderListVo;
|
||||
import com.niu.recharge.service.admin.vo.RechargeOrderStatVo;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class RechargeOrderServiceImpl implements IRechargeOrderService {
|
||||
|
||||
@Resource
|
||||
ICoreRechargeOrderService coreRechargeOrderService;
|
||||
|
||||
@Resource
|
||||
RechargeOrderMapper rechargeOrderMapper;
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemMapper rechargeOrderItemMapper;
|
||||
|
||||
@Resource
|
||||
MemberMapper memberMapper;
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RechargeOrderListVo> list(PageParam pageParam, RechargeOrderSearchParam searchParam) {
|
||||
Integer page = pageParam.getPage();
|
||||
Integer limit = pageParam.getLimit();
|
||||
|
||||
QueryWrapper<RechargeOrder> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderNo())) queryWrapper.eq("order_no", searchParam.getOrderNo());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) queryWrapper.eq("order_status", searchParam.getOrderStatus());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderFrom())) queryWrapper.eq("order_from", searchParam.getOrderFrom());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getCreateTime())) QueryMapperUtils.buildByTime(queryWrapper, "create_time", searchParam.getCreateTime());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getPayTime())) QueryMapperUtils.buildByTime(queryWrapper, "pay_time", searchParam.getPayTime());
|
||||
if (searchParam.getStartMoney() > 0) queryWrapper.ge("order_money", searchParam.getStartMoney());
|
||||
if (searchParam.getEndMoney() > 0) queryWrapper.le("order_money", searchParam.getEndMoney());
|
||||
|
||||
IPage<RechargeOrder> iPage = rechargeOrderMapper.selectPage(new Page<RechargeOrder>(page, limit), queryWrapper);
|
||||
List<RechargeOrderListVo> list = new LinkedList<>();
|
||||
for(RechargeOrder item : iPage.getRecords()) {
|
||||
RechargeOrderListVo vo = new RechargeOrderListVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
MemberBriefInfoVo memberInfo = new MemberBriefInfoVo();
|
||||
Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("member_id", item.getMemberId()));
|
||||
if (member != null) BeanUtils.copyProperties(member, memberInfo);
|
||||
vo.setMember(memberInfo);
|
||||
List<RechargeOrderItem> itemList = rechargeOrderItemMapper.selectList(new QueryWrapper<RechargeOrderItem>().eq("order_id", item.getOrderId()));
|
||||
vo.setItem(itemList);
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.build(page, limit, iPage.getTotal()).setData(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RechargeOrderInfoVo detail(Integer orderId) {
|
||||
QueryWrapper<RechargeOrder> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("order_id", orderId);
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
|
||||
RechargeOrder order = rechargeOrderMapper.selectOne(queryWrapper);
|
||||
if (order == null) return null;
|
||||
|
||||
RechargeOrderInfoVo vo = new RechargeOrderInfoVo();
|
||||
BeanUtils.copyProperties(order, vo);
|
||||
|
||||
MemberBriefInfoVo memberInfo = new MemberBriefInfoVo();
|
||||
Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("member_id", order.getMemberId()));
|
||||
if (member != null) BeanUtils.copyProperties(member, memberInfo);
|
||||
vo.setMember(memberInfo);
|
||||
|
||||
List<RechargeOrderItem> itemList = rechargeOrderItemMapper.selectList(new QueryWrapper<RechargeOrderItem>().eq("order_id", order.getOrderId()));
|
||||
vo.setItem(itemList);
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计
|
||||
*
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
public RechargeOrderStatVo stat(RechargeOrderSearchParam searchParam) {
|
||||
RechargeOrderStatVo vo = new RechargeOrderStatVo();
|
||||
|
||||
QueryWrapper rechargeMoneyQueryWrapper = new QueryWrapper<RechargeOrder>();
|
||||
rechargeMoneyQueryWrapper.select("SUM(order_money) AS order_money");
|
||||
rechargeMoneyQueryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
rechargeMoneyQueryWrapper.eq("order_status", OrderStatusEnum.FINISH.getStatus());
|
||||
if (searchParam.getMemberId() > 0) rechargeMoneyQueryWrapper.eq("member_id", searchParam.getMemberId());
|
||||
rechargeMoneyQueryWrapper.last("limit 1");
|
||||
RechargeOrder rechargeMoney = rechargeOrderMapper.selectOne(rechargeMoneyQueryWrapper);
|
||||
if (rechargeMoney != null) vo.setRechargeMoney(rechargeMoney.getOrderMoney());
|
||||
|
||||
QueryWrapper refundMoneyQueryWrapper = new QueryWrapper<RechargeOrder>();
|
||||
refundMoneyQueryWrapper.select("SUM(order_money) AS order_money");
|
||||
refundMoneyQueryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
refundMoneyQueryWrapper.eq("refund_status", RefundStatusEnum.REFUND_COMPLETED.getStatus());
|
||||
if (searchParam.getMemberId() > 0) refundMoneyQueryWrapper.eq("member_id", searchParam.getMemberId());
|
||||
refundMoneyQueryWrapper.last("limit 1");
|
||||
RechargeOrder refundeMoney = rechargeOrderMapper.selectOne(refundMoneyQueryWrapper);
|
||||
if (refundeMoney != null) vo.setRechargeRefundMoney(refundeMoney.getOrderMoney());
|
||||
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,162 @@
|
||||
package com.niu.recharge.service.admin.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.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.core.common.utils.RequestUtils;
|
||||
import com.niu.core.common.utils.mapper.QueryMapperUtils;
|
||||
import com.niu.core.entity.member.Member;
|
||||
import com.niu.core.mapper.member.MemberMapper;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.entity.RechargeOrderItemRefund;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemRefundMapper;
|
||||
import com.niu.recharge.service.admin.IRechargeRefundService;
|
||||
import com.niu.recharge.service.admin.param.RechargeRefundSearchParam;
|
||||
import com.niu.recharge.service.admin.vo.*;
|
||||
import com.niu.recharge.service.core.ICoreRechargeRefundService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class RechargeRefundServiceImpl implements IRechargeRefundService {
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemRefundMapper rechargeOrderItemRefundMapper;
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemMapper rechargeOrderItemMapper;
|
||||
|
||||
@Resource
|
||||
MemberMapper memberMapper;
|
||||
|
||||
@Resource
|
||||
ICoreRechargeRefundService coreRechargeRefundService;
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RechargeRefundListVo> list(PageParam pageParam, RechargeRefundSearchParam searchParam) {
|
||||
Integer page = pageParam.getPage();
|
||||
Integer limit = pageParam.getLimit();
|
||||
|
||||
QueryWrapper<RechargeOrderItemRefund> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderNo())) queryWrapper.eq("order_no", searchParam.getOrderNo());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) queryWrapper.eq("order_status", searchParam.getOrderStatus());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderFrom())) queryWrapper.eq("order_from", searchParam.getOrderFrom());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getCreateTime())) QueryMapperUtils.buildByTime(queryWrapper, "create_time", searchParam.getCreateTime());
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getPayTime())) QueryMapperUtils.buildByTime(queryWrapper, "pay_time", searchParam.getPayTime());
|
||||
if (searchParam.getStartMoney() > 0) queryWrapper.ge("order_money", searchParam.getStartMoney());
|
||||
if (searchParam.getEndMoney() > 0) queryWrapper.le("order_money", searchParam.getEndMoney());
|
||||
|
||||
IPage<RechargeOrderItemRefund> iPage = rechargeOrderItemRefundMapper.selectPage(new Page<RechargeOrderItemRefund>(page, limit), queryWrapper);
|
||||
List<RechargeRefundListVo> list = new LinkedList<>();
|
||||
for(RechargeOrderItemRefund item : iPage.getRecords()) {
|
||||
RechargeRefundListVo vo = new RechargeRefundListVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
MemberBriefInfoVo memberInfo = new MemberBriefInfoVo();
|
||||
Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("member_id", item.getMemberId()));
|
||||
if (member != null) BeanUtils.copyProperties(member, memberInfo);
|
||||
vo.setMember(memberInfo);
|
||||
RechargeOrderItem orderItem = rechargeOrderItemMapper.selectOne(new QueryWrapper<RechargeOrderItem>().eq("order_item_id", item.getOrderItemId()));
|
||||
vo.setItem(orderItem);
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.build(page, limit, iPage.getTotal()).setData(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
*/
|
||||
public void refund(Integer orderId) {
|
||||
coreRechargeRefundService.create(orderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单详情
|
||||
*
|
||||
* @param refundId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RechargeRefundInfoVo detail(Integer refundId) {
|
||||
QueryWrapper<RechargeOrderItemRefund> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("refund_id", refundId);
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
|
||||
RechargeOrderItemRefund refund = rechargeOrderItemRefundMapper.selectOne(queryWrapper);
|
||||
if (refund == null) return null;
|
||||
|
||||
RechargeRefundInfoVo vo = new RechargeRefundInfoVo();
|
||||
BeanUtils.copyProperties(refund, vo);
|
||||
|
||||
MemberBriefInfoVo memberInfo = new MemberBriefInfoVo();
|
||||
Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("member_id", refund.getMemberId()));
|
||||
if (member != null) BeanUtils.copyProperties(member, memberInfo);
|
||||
vo.setMember(memberInfo);
|
||||
|
||||
RechargeOrderItem item = rechargeOrderItemMapper.selectOne(new QueryWrapper<RechargeOrderItem>().eq("order_item_id", refund.getOrderItemId()));
|
||||
vo.setItem(item);
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 统计
|
||||
*
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
public RechargeRefundStatVo stat(RechargeRefundSearchParam searchParam) {
|
||||
RechargeRefundStatVo vo = new RechargeRefundStatVo();
|
||||
|
||||
QueryWrapper allMoneyQueryWrapper = new QueryWrapper<RechargeOrderItemRefund>();
|
||||
allMoneyQueryWrapper.select("SUM(money) AS money");
|
||||
allMoneyQueryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
allMoneyQueryWrapper.ne("status", RefundStatusEnum.REFUND_FAIL.getStatus());
|
||||
if (searchParam.getMemberId() > 0) allMoneyQueryWrapper.eq("member_id", searchParam.getMemberId());
|
||||
allMoneyQueryWrapper.last("limit 1");
|
||||
RechargeOrderItemRefund allMoney = rechargeOrderItemRefundMapper.selectOne(allMoneyQueryWrapper);
|
||||
|
||||
RechargeRefundStatVo.Stat all = new RechargeRefundStatVo.Stat();
|
||||
all.setKey("all");
|
||||
all.setName("累计退款金额(元)");
|
||||
if (allMoney != null)all.setMoney(allMoney.getMoney());
|
||||
vo.setAll(all);
|
||||
|
||||
QueryWrapper haveMoneyQueryWrapper = new QueryWrapper<RechargeOrderItemRefund>();
|
||||
haveMoneyQueryWrapper.select("SUM(money) AS money");
|
||||
haveMoneyQueryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
haveMoneyQueryWrapper.eq("status", RefundStatusEnum.REFUNDING.getStatus());
|
||||
if (searchParam.getMemberId() > 0) haveMoneyQueryWrapper.eq("member_id", searchParam.getMemberId());
|
||||
haveMoneyQueryWrapper.last("limit 1");
|
||||
RechargeOrderItemRefund haveMoney = rechargeOrderItemRefundMapper.selectOne(haveMoneyQueryWrapper);
|
||||
|
||||
RechargeRefundStatVo.Stat have = new RechargeRefundStatVo.Stat();
|
||||
have.setKey("have");
|
||||
have.setName("退款中金额(元)");
|
||||
if (haveMoney != null) have.setMoney(haveMoney.getMoney());
|
||||
vo.setHave(have);
|
||||
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package com.niu.recharge.service.admin.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderSearchParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String orderNo;
|
||||
|
||||
private Integer orderStatus;
|
||||
|
||||
private String orderFrom;
|
||||
|
||||
private String[] createTime;
|
||||
|
||||
private String[] payTime;
|
||||
|
||||
private float startMoney;
|
||||
|
||||
private float endMoney;
|
||||
|
||||
private Integer memberId = 0;
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package com.niu.recharge.service.admin.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RechargeRefundSearchParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String orderNo;
|
||||
|
||||
private Integer orderStatus;
|
||||
|
||||
private String orderFrom;
|
||||
|
||||
private String[] createTime;
|
||||
|
||||
private String[] payTime;
|
||||
|
||||
private float startMoney;
|
||||
|
||||
private float endMoney;
|
||||
|
||||
private Integer memberId = 0;
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.core.enums.common.ChannelEnum;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderInfoVo extends RechargeOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List<RechargeOrderItem> item;
|
||||
|
||||
private Status orderStatusInfo;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal orderMoney;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long createTime;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long payTime;
|
||||
|
||||
private MemberBriefInfoVo member;
|
||||
|
||||
private String orderFromName;
|
||||
|
||||
@Data
|
||||
private static class Status {
|
||||
private String name;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
|
||||
public Status getOrderStatusInfo() {
|
||||
Status status = new Status();
|
||||
status.setStatus(this.getOrderStatus());
|
||||
status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus()));
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getOrderFromName() {
|
||||
return ChannelEnum.getNameByCode(this.getOrderFrom());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.core.enums.common.ChannelEnum;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderListVo extends RechargeOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List<RechargeOrderItem> item;
|
||||
|
||||
private Status orderStatusInfo;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal orderMoney;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long createTime;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long payTime;
|
||||
|
||||
private MemberBriefInfoVo member;
|
||||
|
||||
private String orderFromName;
|
||||
|
||||
@Data
|
||||
private static class Status {
|
||||
private String name;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
|
||||
public Status getOrderStatusInfo() {
|
||||
Status status = new Status();
|
||||
status.setStatus(this.getOrderStatus());
|
||||
status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus()));
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getOrderFromName() {
|
||||
return ChannelEnum.getNameByCode(this.getOrderFrom());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.core.enums.common.ChannelEnum;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderStatVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal rechargeMoney = new BigDecimal(0);
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal rechargeRefundMoney = new BigDecimal(0);
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.entity.RechargeOrderItemRefund;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RechargeRefundInfoVo extends RechargeOrderItemRefund implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private RechargeOrderItem item;
|
||||
|
||||
private String statusName;
|
||||
|
||||
private MemberBriefInfoVo member;
|
||||
|
||||
private String orderFromName;
|
||||
|
||||
public String getStatusName() {
|
||||
return RefundStatusEnum.getNameByStatus(this.getStatus());
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.core.enums.common.ChannelEnum;
|
||||
import com.niu.core.service.admin.member.vo.MemberBriefInfoVo;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.entity.RechargeOrderItemRefund;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeRefundListVo extends RechargeOrderItemRefund implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private RechargeOrderItem item;
|
||||
|
||||
private String statusName;
|
||||
|
||||
private MemberBriefInfoVo member;
|
||||
|
||||
private String orderFromName;
|
||||
|
||||
public String getStatusName() {
|
||||
return RefundStatusEnum.getNameByStatus(this.getStatus());
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.niu.recharge.service.admin.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeRefundStatVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Stat all;
|
||||
|
||||
private Stat have;
|
||||
|
||||
@Data
|
||||
public static class Stat {
|
||||
private String name;
|
||||
|
||||
private String key;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal money = new BigDecimal(0);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
package com.niu.recharge.service.api;
|
||||
|
||||
import com.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.recharge.service.api.param.RechargeOrderSearchParam;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderInfoVo;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderListVo;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
public interface IRechargeOrderService {
|
||||
|
||||
/**
|
||||
* 创建订单
|
||||
*
|
||||
* @param param
|
||||
*/
|
||||
RechargeOrderCreateVo create(RechargeOrderCreateParam param);
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
PageResult<RechargeOrderListVo> list(PageParam pageParam, RechargeOrderSearchParam searchParam);
|
||||
|
||||
/**
|
||||
* 充值订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
RechargeOrderInfoVo detail(Integer orderId);
|
||||
}
|
||||
@ -0,0 +1,109 @@
|
||||
package com.niu.recharge.service.api.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.niu.core.common.domain.PageParam;
|
||||
import com.niu.core.common.domain.PageResult;
|
||||
import com.niu.core.common.utils.RequestUtils;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderMapper;
|
||||
import com.niu.recharge.service.api.IRechargeOrderService;
|
||||
import com.niu.recharge.service.api.param.RechargeOrderSearchParam;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderInfoVo;
|
||||
import com.niu.recharge.service.api.vo.RechargeOrderListVo;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class RechargeOrderServiceImpl implements IRechargeOrderService {
|
||||
|
||||
@Resource
|
||||
ICoreRechargeOrderService coreRechargeOrderService;
|
||||
|
||||
@Resource
|
||||
RechargeOrderMapper rechargeOrderMapper;
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemMapper rechargeOrderItemMapper;
|
||||
|
||||
/**
|
||||
* 创建订单
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RechargeOrderCreateVo create(RechargeOrderCreateParam param) {
|
||||
param.setMemberId(RequestUtils.memberId());
|
||||
param.setSiteId(RequestUtils.siteId());
|
||||
return coreRechargeOrderService.create(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*
|
||||
* @param pageParam
|
||||
* @param searchParam
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RechargeOrderListVo> list(PageParam pageParam, RechargeOrderSearchParam searchParam) {
|
||||
Integer page = pageParam.getPage();
|
||||
Integer limit = pageParam.getLimit();
|
||||
|
||||
QueryWrapper<RechargeOrder> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
queryWrapper.eq("member_id", RequestUtils.memberId());
|
||||
queryWrapper.orderByDesc("create_time");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(searchParam.getOrderStatus())) queryWrapper.like("order_status", searchParam.getOrderStatus());
|
||||
|
||||
IPage<RechargeOrder> iPage = rechargeOrderMapper.selectPage(new Page<RechargeOrder>(page, limit), queryWrapper);
|
||||
List<RechargeOrderListVo> list = new LinkedList<>();
|
||||
for(RechargeOrder item : iPage.getRecords()) {
|
||||
RechargeOrderListVo vo = new RechargeOrderListVo();
|
||||
BeanUtils.copyProperties(item, vo);
|
||||
List<RechargeOrderItem> itemList = rechargeOrderItemMapper.selectList(new QueryWrapper<RechargeOrderItem>().eq("order_id", item.getOrderId()));
|
||||
vo.setItem(itemList);
|
||||
list.add(vo);
|
||||
}
|
||||
|
||||
return PageResult.build(page,limit,iPage.getTotal()).setData(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单详情
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public RechargeOrderInfoVo detail(Integer orderId) {
|
||||
QueryWrapper<RechargeOrder> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("order_id", orderId);
|
||||
queryWrapper.eq("site_id", RequestUtils.siteId());
|
||||
queryWrapper.eq("member_id", RequestUtils.memberId());
|
||||
|
||||
RechargeOrder order = rechargeOrderMapper.selectOne(queryWrapper);
|
||||
if (order == null) return null;
|
||||
|
||||
RechargeOrderInfoVo vo = new RechargeOrderInfoVo();
|
||||
BeanUtils.copyProperties(order, vo);
|
||||
|
||||
List<RechargeOrderItem> itemList = rechargeOrderItemMapper.selectList(new QueryWrapper<RechargeOrderItem>().eq("order_id", order.getOrderId()));
|
||||
vo.setItem(itemList);
|
||||
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.niu.recharge.service.api.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderSearchParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer orderStatus;
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package com.niu.recharge.service.api.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderInfoVo extends RechargeOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List<RechargeOrderItem> item;
|
||||
|
||||
private Status orderStatusInfo;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal orderMoney;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long createTime;
|
||||
|
||||
@Data
|
||||
private static class Status {
|
||||
private String name;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
|
||||
public Status getOrderStatusInfo() {
|
||||
Status status = new Status();
|
||||
status.setStatus(this.getOrderStatus());
|
||||
status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus()));
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package com.niu.recharge.service.api.vo;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.niu.core.common.domain.BeanJsonSerializer;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderListVo extends RechargeOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private List<RechargeOrderItem> item;
|
||||
|
||||
private Status orderStatusInfo;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.BigDecimalFormatSerializer.class)
|
||||
private BigDecimal orderMoney;
|
||||
|
||||
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)
|
||||
private Long createTime;
|
||||
|
||||
@Data
|
||||
private static class Status {
|
||||
private String name;
|
||||
|
||||
private Integer status;
|
||||
}
|
||||
|
||||
public Status getOrderStatusInfo() {
|
||||
Status status = new Status();
|
||||
status.setStatus(this.getOrderStatus());
|
||||
status.setName(OrderStatusEnum.getNameByStatus(this.getOrderStatus()));
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.niu.recharge.service.core;
|
||||
|
||||
import com.niu.core.entity.pay.Pay;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
|
||||
public interface ICoreRechargeOrderService {
|
||||
|
||||
RechargeOrderCreateVo create(RechargeOrderCreateParam param);
|
||||
|
||||
void close(Integer orderId);
|
||||
|
||||
RechargeOrder orderInfo(Integer orderId);
|
||||
|
||||
void pay(Pay pay);
|
||||
}
|
||||
@ -0,0 +1,13 @@
|
||||
package com.niu.recharge.service.core;
|
||||
|
||||
public interface ICoreRechargeRefundService {
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
* @param orderId
|
||||
*/
|
||||
void create(Integer orderId);
|
||||
|
||||
void refundComplete(String refundNo);
|
||||
}
|
||||
@ -0,0 +1,172 @@
|
||||
package com.niu.recharge.service.core.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.niu.core.common.exception.CommonException;
|
||||
import com.niu.core.common.utils.NoticeUtils;
|
||||
import com.niu.core.common.utils.RequestUtils;
|
||||
import com.niu.core.entity.pay.Pay;
|
||||
import com.niu.core.enums.member.AccountTypeEnum;
|
||||
import com.niu.core.service.core.member.ICoreMemberAccountService;
|
||||
import com.niu.core.service.core.notice.ICoreNoticeService;
|
||||
import com.niu.core.service.core.pay.ICorePayService;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderMapper;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class CoreRechargeOrderServiceImpl implements ICoreRechargeOrderService {
|
||||
|
||||
@Resource
|
||||
RechargeOrderMapper rechargeOrderMapper;
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemMapper rechargeOrderItemMapper;
|
||||
|
||||
@Resource
|
||||
ICorePayService corePayService;
|
||||
|
||||
@Resource
|
||||
ICoreMemberAccountService coreMemberAccountService;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public RechargeOrderCreateVo create(RechargeOrderCreateParam param) {
|
||||
try {
|
||||
RechargeOrderCreateVo vo = new RechargeOrderCreateVo();
|
||||
vo.setTradeType("recharge");
|
||||
|
||||
RechargeOrder order = new RechargeOrder();
|
||||
order.setOrderNo(createOrderNo());
|
||||
order.setOrderStatus(OrderStatusEnum.WAIT_PAY.getStatus());
|
||||
order.setOrderFrom(RequestUtils.channel());
|
||||
order.setSiteId(param.getSiteId());
|
||||
order.setMemberId(param.getMemberId());
|
||||
order.setIp(RequestUtils.ip());
|
||||
order.setMemberMessage(ObjectUtil.defaultIfNull(param.getMemberMessage(), ""));
|
||||
order.setOrderItemMoney(param.getRechargeMoney());
|
||||
order.setOrderMoney(param.getRechargeMoney());
|
||||
order.setOrderType(vo.getTradeType());
|
||||
order.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
this.rechargeOrderMapper.insert(order);
|
||||
|
||||
RechargeOrderItem orderItem = new RechargeOrderItem();
|
||||
orderItem.setOrderId(order.getOrderId());
|
||||
orderItem.setSiteId(param.getSiteId());
|
||||
orderItem.setMemberId(param.getMemberId());
|
||||
orderItem.setItemType(vo.getTradeType());
|
||||
orderItem.setItemName("会员充值");
|
||||
orderItem.setItemImage("/static/image/icon.png");
|
||||
orderItem.setNum(1);
|
||||
orderItem.setPrice(param.getRechargeMoney());
|
||||
orderItem.setItemMoney(param.getRechargeMoney());
|
||||
orderItem.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
this.rechargeOrderItemMapper.insert(orderItem);
|
||||
|
||||
vo.setTradeId(order.getOrderId());
|
||||
return vo;
|
||||
} catch (Exception e) {
|
||||
throw new CommonException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建交易号
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private String createOrderNo() {
|
||||
Snowflake snowflake = IdUtil.getSnowflake(1, 1);
|
||||
long id = snowflake.nextId();
|
||||
return DateUtil.format(DateUtil.date(System.currentTimeMillis()), "yyyyMMdd") + id;
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭支付
|
||||
*
|
||||
* @param orderId
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void close(Integer orderId) {
|
||||
RechargeOrder order = orderInfo(orderId);
|
||||
if (order == null) return;
|
||||
|
||||
if (order.getOrderStatus().equals(OrderStatusEnum.WAIT_PAY.getStatus())) {
|
||||
corePayService.closeByTrade(order.getSiteId(), "recharge", orderId);
|
||||
}
|
||||
|
||||
order.setOrderStatus(OrderStatusEnum.CLOSE.getStatus());
|
||||
this.rechargeOrderMapper.updateById(order);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单信息
|
||||
*
|
||||
* @param orderId
|
||||
* @return
|
||||
*/
|
||||
public RechargeOrder orderInfo(Integer orderId) {
|
||||
return this.rechargeOrderMapper.selectById(orderId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单支付
|
||||
*
|
||||
* @param pay
|
||||
*/
|
||||
@Transactional
|
||||
public void pay(Pay pay) {
|
||||
try {
|
||||
RechargeOrder order = this.orderInfo(pay.getTradeId());
|
||||
if (order == null) throw new CommonException("订单不存在");
|
||||
|
||||
order.setPayTime(System.currentTimeMillis() / 1000);
|
||||
order.setOrderStatus(OrderStatusEnum.FINISH.getStatus());
|
||||
order.setIsEnableRefund(1);
|
||||
order.setOutTradeNo(pay.getOutTradeNo());
|
||||
this.rechargeOrderMapper.updateById(order);
|
||||
|
||||
// 增加会员余额
|
||||
coreMemberAccountService.addLog(order.getSiteId(), order.getMemberId(), AccountTypeEnum.BALANCE.getType(), order.getOrderMoney().doubleValue(), "recharge", "会员充值", order.getOrderId().toString());
|
||||
|
||||
// 发送消息
|
||||
sendRechargeSuccessNotice(order);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.out.println("充值订单支付异常");
|
||||
throw new CommonException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送充值成功消息
|
||||
* @param order
|
||||
*/
|
||||
@Async
|
||||
private void sendRechargeSuccessNotice(RechargeOrder order) {
|
||||
Map<String, Object> param = new HashMap<String, Object>();
|
||||
param.put("order", order);
|
||||
NoticeUtils.send(order.getSiteId(), "recharge_success", param);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,155 @@
|
||||
package com.niu.recharge.service.core.impl;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.niu.core.common.exception.CommonException;
|
||||
import com.niu.core.common.utils.RequestUtils;
|
||||
import com.niu.core.entity.member.Member;
|
||||
import com.niu.core.enums.member.AccountTypeEnum;
|
||||
import com.niu.core.mapper.member.MemberMapper;
|
||||
import com.niu.core.service.core.member.ICoreMemberAccountService;
|
||||
import com.niu.core.service.core.pay.ICorePayService;
|
||||
import com.niu.core.service.core.pay.ICoreRefundService;
|
||||
import com.niu.core.service.core.pay.param.PayRefundCreateParam;
|
||||
import com.niu.core.service.core.pay.param.PayRefundTransferParam;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import com.niu.recharge.entity.RechargeOrderItem;
|
||||
import com.niu.recharge.entity.RechargeOrderItemRefund;
|
||||
import com.niu.recharge.enums.OrderStatusEnum;
|
||||
import com.niu.recharge.enums.RefundStatusEnum;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderItemRefundMapper;
|
||||
import com.niu.recharge.mapper.RechargeOrderMapper;
|
||||
import com.niu.recharge.service.core.ICoreRechargeOrderService;
|
||||
import com.niu.recharge.service.core.ICoreRechargeRefundService;
|
||||
import com.niu.recharge.service.core.param.RechargeOrderCreateParam;
|
||||
import com.niu.recharge.service.core.vo.RechargeOrderCreateVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Service
|
||||
public class CoreRechargeRefundServiceImpl implements ICoreRechargeRefundService {
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemMapper rechargeOrderItemMapper;
|
||||
|
||||
@Resource
|
||||
RechargeOrderMapper rechargeOrderMapper;
|
||||
|
||||
@Resource
|
||||
MemberMapper memberMapper;
|
||||
|
||||
@Resource
|
||||
ICoreRefundService coreRefundService;
|
||||
|
||||
@Resource
|
||||
RechargeOrderItemRefundMapper rechargeOrderItemRefundMapper;
|
||||
|
||||
@Resource
|
||||
ICoreRechargeOrderService coreRechargeOrderService;
|
||||
|
||||
@Resource
|
||||
ICoreMemberAccountService coreMemberAccountService;
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public void create(Integer orderId) {
|
||||
RechargeOrder order = rechargeOrderMapper.selectOne(new QueryWrapper<RechargeOrder>().eq("order_id", orderId));
|
||||
if (order == null) throw new CommonException("订单不存在");
|
||||
if (!order.getIsEnableRefund().equals(1)) throw new CommonException("该订单不允许退款");
|
||||
if (!order.getOrderStatus().equals(OrderStatusEnum.FINISH.getStatus())) throw new CommonException("订单尚未支付不能进行退款");
|
||||
|
||||
RechargeOrderItem orderItem = rechargeOrderItemMapper.selectOne(new QueryWrapper<RechargeOrderItem>().eq("order_id", orderId));
|
||||
if (!orderItem.getRefundStatus().equals(0)) throw new CommonException("订单已申请退款");
|
||||
|
||||
Member member = memberMapper.selectOne(new QueryWrapper<Member>().select("balance").eq("member_id", order.getMemberId()));
|
||||
if (member == null) throw new CommonException("会员不存在");
|
||||
if (member.equals(0)) throw new CommonException("会员账户金额为0不允许进行退款");
|
||||
|
||||
try {
|
||||
BigDecimal money = member.getBalance().compareTo(order.getOrderMoney()) == 1 ? order.getOrderMoney() : member.getBalance();
|
||||
|
||||
// 创建支付单据
|
||||
PayRefundCreateParam refundParam = new PayRefundCreateParam();
|
||||
refundParam.setOutTradeNo(order.getOutTradeNo());
|
||||
refundParam.setSiteId(order.getSiteId());
|
||||
refundParam.setTradeType("recharge");
|
||||
refundParam.setTradeId(orderId.toString());
|
||||
refundParam.setMoney(money);
|
||||
String refundNo = coreRefundService.create(refundParam);
|
||||
|
||||
// 添加退款记录
|
||||
RechargeOrderItemRefund model = new RechargeOrderItemRefund();
|
||||
model.setRefundNo(refundNo);
|
||||
model.setOrderId(orderId);
|
||||
model.setOrderItemId(orderItem.getOrderItemId());
|
||||
model.setNum(orderItem.getNum());
|
||||
model.setMoney(money);
|
||||
model.setItemType(orderItem.getItemType());
|
||||
model.setSiteId(order.getSiteId());
|
||||
model.setMemberId(order.getMemberId());
|
||||
model.setCreateTime(System.currentTimeMillis() / 1000);
|
||||
model.setStatus(RefundStatusEnum.REFUNDING.getStatus());
|
||||
rechargeOrderItemRefundMapper.insert(model);
|
||||
|
||||
order.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
||||
rechargeOrderMapper.updateById(order);
|
||||
|
||||
orderItem.setRefundNo(refundNo);
|
||||
orderItem.setRefundStatus(RefundStatusEnum.REFUNDING.getStatus());
|
||||
rechargeOrderItemMapper.updateById(orderItem);
|
||||
|
||||
this.refund(model);
|
||||
} catch (Exception e) {
|
||||
throw new CommonException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void refund(RechargeOrderItemRefund refund) {
|
||||
// 扣除账户
|
||||
coreMemberAccountService.addLog(refund.getSiteId(), refund.getMemberId(), AccountTypeEnum.BALANCE.getType(), refund.getMoney().negate().doubleValue(), "recharge_refund", "充值订单退款", refund.getOrderId().toString());
|
||||
|
||||
PayRefundTransferParam param = new PayRefundTransferParam();
|
||||
param.setSiteId(refund.getSiteId());
|
||||
param.setRefundNo(refund.getRefundNo());
|
||||
coreRefundService.refund(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款完成
|
||||
*
|
||||
* @param refundNo
|
||||
*/
|
||||
@Transactional
|
||||
public void refundComplete(String refundNo) {
|
||||
RechargeOrderItemRefund refund = rechargeOrderItemRefundMapper.selectOne(new QueryWrapper<RechargeOrderItemRefund>().eq("refund_no", refundNo));
|
||||
if (refund == null) return;
|
||||
if (!refund.getStatus().equals(RefundStatusEnum.REFUNDING.getStatus())) return;
|
||||
|
||||
refund.setStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus());
|
||||
rechargeOrderItemRefundMapper.updateById(refund);
|
||||
|
||||
RechargeOrder order = new RechargeOrder();
|
||||
order.setOrderId(refund.getOrderId());
|
||||
order.setRefundStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus());
|
||||
rechargeOrderMapper.updateById(order);
|
||||
|
||||
RechargeOrderItem orderItem = new RechargeOrderItem();
|
||||
orderItem.setOrderItemId(refund.getOrderItemId());
|
||||
orderItem.setRefundStatus(RefundStatusEnum.REFUND_COMPLETED.getStatus());
|
||||
rechargeOrderItemMapper.updateById(orderItem);
|
||||
|
||||
coreRechargeOrderService.close(refund.getOrderId());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package com.niu.recharge.service.core.notice.driver;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.niu.core.common.loader.notice.BaseNotice;
|
||||
import com.niu.core.common.loader.notice.NoticeDataVo;
|
||||
import com.niu.core.common.component.context.SpringContext;
|
||||
import com.niu.core.entity.member.Member;
|
||||
import com.niu.core.mapper.member.MemberMapper;
|
||||
import com.niu.recharge.entity.RechargeOrder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class RechargeSuccess extends BaseNotice {
|
||||
|
||||
public MemberMapper memberMapper() {
|
||||
return SpringContext.bean(MemberMapper.class);
|
||||
}
|
||||
|
||||
public NoticeDataVo noticeData(Map<String, Object> vars) {
|
||||
RechargeOrder order = (RechargeOrder) vars.get("order");
|
||||
|
||||
Member member = memberMapper().selectOne(new QueryWrapper<Member>().select("balance").eq("member_id", order.getMemberId()));
|
||||
|
||||
Map<String, Object> param = new HashMap<String, Object>();
|
||||
param.put("balance", member.getBalance());
|
||||
param.put("price", order.getOrderMoney());
|
||||
param.put("trade_no", order.getOrderNo());
|
||||
param.put("time", DateUtil.date(order.getPayTime() * 1000));
|
||||
param.put("wechat_page", "/addon/recharge/pages/recharge_record_detail?id=" + order.getOrderId());
|
||||
param.put("weapp_page", "addon/recharge/pages/recharge_record_detail?id=" + order.getOrderId());
|
||||
|
||||
NoticeDataVo vo = new NoticeDataVo();
|
||||
vo.setMemberId(order.getMemberId());
|
||||
vo.setVars(param);
|
||||
|
||||
return vo;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package com.niu.recharge.service.core.param;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderCreateParam implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String memberMessage;
|
||||
|
||||
private BigDecimal rechargeMoney;
|
||||
|
||||
private Integer siteId;
|
||||
|
||||
private Integer memberId;
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
package com.niu.recharge.service.core.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class RechargeOrderCreateVo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String tradeType;
|
||||
|
||||
private Integer tradeId;
|
||||
|
||||
}
|
||||
13
webroot/addon/recharge/java/src/main/resources/addon.json
Normal file
13
webroot/addon/recharge/java/src/main/resources/addon.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "recharge",
|
||||
"title": "会员充值",
|
||||
"desc": "在线充值到会员账户",
|
||||
"key": "recharge",
|
||||
"version": "1.0.0",
|
||||
"author": "niucloud",
|
||||
"url": "https://www.niucloud.com",
|
||||
"type": "addon",
|
||||
"support_app": "",
|
||||
"jar": "shop.jar",
|
||||
"mainClass": "com.niu.recharge.WebApplication"
|
||||
}
|
||||
11
webroot/addon/recharge/java/src/main/resources/info.json
Normal file
11
webroot/addon/recharge/java/src/main/resources/info.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"title": "会员充值",
|
||||
"desc": "在线充值到会员账户",
|
||||
"key": "recharge",
|
||||
"version": "1.0.0",
|
||||
"author": "niucloud",
|
||||
"type": "addon",
|
||||
"support_app": "",
|
||||
"jar": "recharge.jar",
|
||||
"mainClass": "com.niu.recharge.WebApplication"
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
shop.test=en_US.shopTest
|
||||
@ -0,0 +1,2 @@
|
||||
shop.test=zh_CN.shopTest
|
||||
shop.name=\u5546\u57CE\u7CFB\u7EDF
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"balance": {
|
||||
"recharge": {
|
||||
"name": "充值",
|
||||
"inc": 1,
|
||||
"dec": 0
|
||||
},
|
||||
"recharge_refund": {
|
||||
"name": "充值退款",
|
||||
"inc": 0,
|
||||
"dec": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
{
|
||||
"BASIC": {
|
||||
"title": "基础组件",
|
||||
"list": {
|
||||
"Article": {
|
||||
"title": "文章",
|
||||
"icon": "iconfont iconwenzhangpc",
|
||||
"path": "edit-article",
|
||||
"support_page": [],
|
||||
"uses": 0,
|
||||
"sort": 10007,
|
||||
"value": {
|
||||
"sources": "initial",
|
||||
"count": 8,
|
||||
"articleIds": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
{
|
||||
"RECHARGE_LINK": {
|
||||
"title": "会员充值",
|
||||
"name": "recharge_link",
|
||||
"addon_info": {
|
||||
"title": "会员充值",
|
||||
"key": "recharge"
|
||||
},
|
||||
"child_list": [
|
||||
{
|
||||
"name": "RECHARGE_INDEX",
|
||||
"title": "会员充值",
|
||||
"url": "/addon/recharge/pages/recharge",
|
||||
"is_share": 1,
|
||||
"action": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
{
|
||||
"menu": [
|
||||
],
|
||||
"delete": [
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
{
|
||||
"menu": [
|
||||
{
|
||||
"menu_name": "会员充值",
|
||||
"menu_short_name": "会员充值",
|
||||
"menu_key": "recharge",
|
||||
"parent_key": "",
|
||||
"menu_type": 0,
|
||||
"icon": "element Help",
|
||||
"api_url": "",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "充值订单",
|
||||
"menu_short_name": "充值订单",
|
||||
"menu_key": "recharge_order",
|
||||
"parent_key": "recharge",
|
||||
"menu_type": 0,
|
||||
"icon": "iconfont iconchongzhidingdan",
|
||||
"api_url": "",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "订单列表",
|
||||
"menu_short_name": "订单列表",
|
||||
"menu_key": "recharge_order_list",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "",
|
||||
"api_url": "recharge/order",
|
||||
"router_path": "recharge/order/list",
|
||||
"view_path": "order/list",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "退款",
|
||||
"menu_short_name": "退款",
|
||||
"menu_key": "recharge_order_refund",
|
||||
"parent_key": "recharge_order_list",
|
||||
"menu_type": 2,
|
||||
"icon": "",
|
||||
"api_url": "recharge/refund/<order_id>",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "put",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"menu_name": "订单详情",
|
||||
"menu_short_name": "订单详情",
|
||||
"menu_key": "recharge_order_detail",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "",
|
||||
"api_url": "recharge/order/<order_id>",
|
||||
"router_path": "recharge/order/detail",
|
||||
"view_path": "order/detail",
|
||||
"methods": "get",
|
||||
"sort": 90,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
},
|
||||
{
|
||||
"menu_name": "退款记录",
|
||||
"menu_short_name": "退款记录",
|
||||
"menu_key": "recharge_order_refund_list",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "iconfont icontuikuanjilu",
|
||||
"api_url": "recharge/refund",
|
||||
"router_path": "recharge/order/refund",
|
||||
"view_path": "order/refund",
|
||||
"methods": "get",
|
||||
"sort": 90,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "退款详情",
|
||||
"menu_short_name": "退款详情",
|
||||
"menu_key": "recharge_refund_detail",
|
||||
"parent_key": "recharge_order_refund_list",
|
||||
"menu_type": 2,
|
||||
"icon": "",
|
||||
"api_url": "recharge/refund/<refund_id>",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"delete": [
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,17 @@
|
||||
{
|
||||
"recharge_success": {
|
||||
"addon": "recharge",
|
||||
"key": "recharge_success",
|
||||
"receiver_type": 1,
|
||||
"name": "充值成功通知",
|
||||
"title": "会员充值成功后发送",
|
||||
"async": true,
|
||||
"variable": {
|
||||
"price": "充值金额",
|
||||
"balance": "充值后账户",
|
||||
"time": "充值时间",
|
||||
"trade_no": "交易单号"
|
||||
},
|
||||
"driver": "com.niu.recharge.service.core.notice.driver.RechargeSuccess"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
{
|
||||
"recharge_success": {
|
||||
"content": "您充值金额¥{price}, 充值后金额¥{balance}"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
{
|
||||
"recharge_success": {
|
||||
"tid": "30832",
|
||||
"content": [
|
||||
["交易单号", "{trade_no}", "character_string7"],
|
||||
["充值金额", "{price}", "amount2"],
|
||||
["账户余额", "{balance}", "amount8"],
|
||||
["充值时间", "{time}", "time4"]
|
||||
],
|
||||
"kid_list": [7, 2, 8, 4],
|
||||
"scene_desc": "充值后提醒",
|
||||
"tips": "使用该消息请在小程序的服务类目中添加类目:一级类目:商业服务 二级类目:软件/建站/技术开发"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
{
|
||||
"recharge_success": {
|
||||
"temp_key": "52552",
|
||||
"content": [
|
||||
[ "充值时间", "{time}", "time1" ],
|
||||
[ "充值金额", "{price}", "amount3" ]
|
||||
],
|
||||
"keyword_name_list": ["充值时间", "充值金额"],
|
||||
"tips": "使用该消息请在公众号的服务类目中添加类目:一级类目:商业服务 二级类目:软件/建站/技术开发"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,84 @@
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order`;
|
||||
CREATE TABLE `{{prefix}}recharge_order` (
|
||||
`order_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
|
||||
`order_no` varchar(50) NOT NULL DEFAULT '' COMMENT '订单编号',
|
||||
`order_from` varchar(55) NOT NULL DEFAULT '' COMMENT '订单来源',
|
||||
`order_type` varchar(50) NOT NULL DEFAULT '' COMMENT '订单类型',
|
||||
`out_trade_no` varchar(50) NOT NULL DEFAULT '' COMMENT '支付流水号',
|
||||
`order_status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态',
|
||||
`refund_status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态',
|
||||
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
|
||||
`ip` varchar(20) NOT NULL DEFAULT '' COMMENT '会员ip',
|
||||
`member_message` varchar(50) NOT NULL DEFAULT '' COMMENT '会员留言信息',
|
||||
`order_item_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单项目金额',
|
||||
`order_discount_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单优惠金额',
|
||||
`order_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '订单金额',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`pay_time` int(11) NOT NULL DEFAULT '0' COMMENT '订单支付时间',
|
||||
`close_time` int(11) NOT NULL DEFAULT '0' COMMENT '订单关闭时间',
|
||||
`is_delete` int(11) NOT NULL DEFAULT '0' COMMENT '是否删除(针对后台)',
|
||||
`is_enable_refund` int(11) NOT NULL DEFAULT '0' COMMENT '是否允许退款',
|
||||
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '商家留言',
|
||||
`invoice_id` int(11) NOT NULL DEFAULT '0' COMMENT '发票id,0表示不开发票',
|
||||
`close_reason` varchar(255) NOT NULL DEFAULT '' COMMENT '关闭原因',
|
||||
PRIMARY KEY (`order_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单表';
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`;
|
||||
CREATE TABLE `{{prefix}}recharge_order_item` (
|
||||
`order_item_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
|
||||
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
|
||||
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '购买会员id',
|
||||
`item_id` int(11) NOT NULL DEFAULT '0' COMMENT '项目id',
|
||||
`item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型',
|
||||
`item_name` varchar(400) NOT NULL DEFAULT '' COMMENT '项目名称',
|
||||
`item_image` varchar(2000) NOT NULL DEFAULT '' COMMENT '项目图片',
|
||||
`price` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '项目单价',
|
||||
`num` decimal(10,3) NOT NULL DEFAULT 0.000 COMMENT '购买数量',
|
||||
`item_money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '项目总价',
|
||||
`is_refund` int(11) NOT NULL DEFAULT '0' COMMENT '是否退款',
|
||||
`refund_no` varchar(255) NOT NULL DEFAULT '' COMMENT '退款编号',
|
||||
`refund_status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
PRIMARY KEY (`order_item_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单商品表';
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`;
|
||||
CREATE TABLE `{{prefix}}recharge_order_item_refund` (
|
||||
`refund_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`order_item_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
|
||||
`order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
|
||||
`order_no` varchar(255) NOT NULL DEFAULT '' COMMENT '订单编号',
|
||||
`refund_no` varchar(255) NOT NULL DEFAULT '0' COMMENT '退款单号',
|
||||
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
|
||||
`member_id` int(11) NOT NULL DEFAULT '0' COMMENT '会员id',
|
||||
`num` decimal(10,3) NOT NULL DEFAULT 0.000 COMMENT '退货数量',
|
||||
`money` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '总退款',
|
||||
`status` int(11) NOT NULL DEFAULT '0' COMMENT '退款状态',
|
||||
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||
`audit_time` int(11) NOT NULL DEFAULT '0' COMMENT '审核时间',
|
||||
`transfer_time` int(11) NOT NULL DEFAULT '0' COMMENT '转账时间',
|
||||
`item_type` varchar(255) NOT NULL DEFAULT '' COMMENT '项目类型',
|
||||
PRIMARY KEY (`refund_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单退款表';
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`;
|
||||
CREATE TABLE `{{prefix}}recharge_order_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`order_id` int(11) NOT NULL DEFAULT '0' COMMENT '订单id',
|
||||
`site_id` int(11) NOT NULL DEFAULT '0' COMMENT '站点id',
|
||||
`action` varchar(255) NOT NULL DEFAULT '' COMMENT '操作内容',
|
||||
`uid` int(11) NOT NULL DEFAULT '0' COMMENT '操作人id',
|
||||
`nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '操作人名称',
|
||||
`order_status` int(11) NOT NULL DEFAULT '0' COMMENT '订单状态,操作后',
|
||||
`action_way` bigint(20) NOT NULL DEFAULT '2' COMMENT '操作类型1买家2卖家 3 系统任务',
|
||||
`order_status_name` varchar(255) NOT NULL DEFAULT '' COMMENT '订单状态名称,操作后',
|
||||
`action_time` int(11) NOT NULL DEFAULT '0' COMMENT '操作时间',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='订单操作记录表';
|
||||
@ -0,0 +1,8 @@
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order`;
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_item`;
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_item_refund`;
|
||||
|
||||
DROP TABLE IF EXISTS `{{prefix}}recharge_order_log`;
|
||||
6
webroot/addon/recharge/menu/admin.json
Normal file
6
webroot/addon/recharge/menu/admin.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"menu": [
|
||||
],
|
||||
"delete": [
|
||||
]
|
||||
}
|
||||
119
webroot/addon/recharge/menu/site.json
Normal file
119
webroot/addon/recharge/menu/site.json
Normal file
@ -0,0 +1,119 @@
|
||||
{
|
||||
"menu": [
|
||||
{
|
||||
"menu_name": "会员充值",
|
||||
"menu_short_name": "会员充值",
|
||||
"menu_key": "recharge",
|
||||
"parent_key": "",
|
||||
"menu_type": 0,
|
||||
"icon": "element Help",
|
||||
"api_url": "",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "充值订单",
|
||||
"menu_short_name": "充值订单",
|
||||
"menu_key": "recharge_order",
|
||||
"parent_key": "recharge",
|
||||
"menu_type": 0,
|
||||
"icon": "iconfont iconchongzhidingdan",
|
||||
"api_url": "",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "订单列表",
|
||||
"menu_short_name": "订单列表",
|
||||
"menu_key": "recharge_order_list",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "",
|
||||
"api_url": "recharge/order",
|
||||
"router_path": "recharge/order/list",
|
||||
"view_path": "order/list",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "退款",
|
||||
"menu_short_name": "退款",
|
||||
"menu_key": "recharge_order_refund",
|
||||
"parent_key": "recharge_order_list",
|
||||
"menu_type": 2,
|
||||
"icon": "",
|
||||
"api_url": "recharge/refund/<order_id>",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "put",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"menu_name": "订单详情",
|
||||
"menu_short_name": "订单详情",
|
||||
"menu_key": "recharge_order_detail",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "",
|
||||
"api_url": "recharge/order/<order_id>",
|
||||
"router_path": "recharge/order/detail",
|
||||
"view_path": "order/detail",
|
||||
"methods": "get",
|
||||
"sort": 90,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
},
|
||||
{
|
||||
"menu_name": "退款记录",
|
||||
"menu_short_name": "退款记录",
|
||||
"menu_key": "recharge_order_refund_list",
|
||||
"parent_key": "recharge_order",
|
||||
"menu_type": 1,
|
||||
"icon": "iconfont icontuikuanjilu",
|
||||
"api_url": "recharge/refund",
|
||||
"router_path": "recharge/order/refund",
|
||||
"view_path": "order/refund",
|
||||
"methods": "get",
|
||||
"sort": 90,
|
||||
"status": 1,
|
||||
"is_show": 1,
|
||||
"children": [
|
||||
{
|
||||
"menu_name": "退款详情",
|
||||
"menu_short_name": "退款详情",
|
||||
"menu_key": "recharge_refund_detail",
|
||||
"parent_key": "recharge_order_refund_list",
|
||||
"menu_type": 2,
|
||||
"icon": "",
|
||||
"api_url": "recharge/refund/<refund_id>",
|
||||
"router_path": "",
|
||||
"view_path": "",
|
||||
"methods": "get",
|
||||
"sort": 100,
|
||||
"status": 1,
|
||||
"is_show": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"delete": [
|
||||
]
|
||||
}
|
||||
BIN
webroot/addon/recharge/resource/cover.png
Normal file
BIN
webroot/addon/recharge/resource/cover.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 34 KiB |
BIN
webroot/addon/recharge/resource/icon.png
Normal file
BIN
webroot/addon/recharge/resource/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.2 KiB |
BIN
webroot/addon/recharge/resource/recharge.png
Normal file
BIN
webroot/addon/recharge/resource/recharge.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
22
webroot/addon/recharge/uni-app/api/recharge.ts
Normal file
22
webroot/addon/recharge/uni-app/api/recharge.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 发起充值
|
||||
*/
|
||||
export function createRecharge(data: AnyObject) {
|
||||
return request.post('recharge/recharge', data, {showErrorMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值记录列表
|
||||
*/
|
||||
export function getRechargeList(data: AnyObject) {
|
||||
return request.get('recharge/recharge', data, {showErrorMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值记录详情
|
||||
*/
|
||||
export function getRechargeDetail(id: number) {
|
||||
return request.get(`recharge/recharge/${id}`, {}, {showErrorMessage: true})
|
||||
}
|
||||
2
webroot/addon/recharge/uni-app/locale/en.json
Normal file
2
webroot/addon/recharge/uni-app/locale/en.json
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
||||
2
webroot/addon/recharge/uni-app/locale/zh-Hans.json
Normal file
2
webroot/addon/recharge/uni-app/locale/zh-Hans.json
Normal file
@ -0,0 +1,2 @@
|
||||
{
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"orderNo": "订单号"
|
||||
}
|
||||
@ -0,0 +1,2 @@
|
||||
{}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
{
|
||||
"recharge": "充值",
|
||||
"cashOut":"提现",
|
||||
"balanceDetail": "余额明细",
|
||||
"accountBalance":"账户余额(元)",
|
||||
"balance":"余额(元)",
|
||||
"money":"可提现余额(元)",
|
||||
"availableBalance": "可用余额",
|
||||
"rechargeAmountError": "充值金额错误",
|
||||
"confirm": "确认",
|
||||
"customRechargeAmount": "自定义充值金额",
|
||||
"yuan":"元",
|
||||
"rechargeRecord":"充值记录",
|
||||
"RechargeMethod":"充值方式"
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"rechargeRecord": "充值记录",
|
||||
"emptyTip": "暂无充值记录"
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
{
|
||||
"orderNo": "订单编号",
|
||||
"createTime": "创建时间"
|
||||
}
|
||||
95
webroot/addon/recharge/uni-app/pages/recharge.vue
Normal file
95
webroot/addon/recharge/uni-app/pages/recharge.vue
Normal file
@ -0,0 +1,95 @@
|
||||
<template>
|
||||
<view :style="themeColor()">
|
||||
<view class="overflow-hidden bg-[var(--page-bg-color)] min-h-[100vh] px-[var(--sidebar-m)]" v-show="!loading">
|
||||
<view class="h-[200rpx] box-border pt-[46rpx] pl-[40rpx] mt-[20rpx] rounded-angle" :style="{backgroundImage: 'url(' + img('static/resource/images/member/point/mask_group.png') + ') ',backgroundSize: '100% 100%',backgroundRepeat: 'no-repeat'}">
|
||||
<view class="leading-[36rpx] text-[#ffffff] text-[26rpx]">当前余额(元)</view>
|
||||
<view class="text-[#fff] ml-[4rpx] text-[56rpx] mt-[16rpx] price-font" v-if="info">
|
||||
{{info ? moneyFormat(info.balance) : '0.00'}}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="top-mar card-template">
|
||||
<view class="flex items-center border-0 border-b-[2rpx] border-solid border-[var(--temp-bg)] pb-[10rpx] pl-[4rpx]">
|
||||
<view class="text-[#333] text-[28rpx] iconfont iconrenminbiV6xx price-font"></view>
|
||||
<view class="pl-[20rpx] flex items-center flex-1">
|
||||
<input type="digit" class="font-500 text-[54rpx] h-[70rpx] leading-[70rpx] bg-[#fff] price-font" v-model="rechargeAmount" maxlength="7" :placeholder="rechargeAmount?'':t('customRechargeAmount')" placeholder-class="apply-price price-font" :adjust-position="false"/>
|
||||
</view>
|
||||
</view>
|
||||
<view class="flex flex-wrap justify-between px-[10rpx]">
|
||||
<view v-for="(item,index) in rechargePackage" :key="index"
|
||||
:class="['flex justify-center items-center w-[180rpx] h-[88rpx] box-border border-[1rpx] text-center rounded-[var(--goods-rounded-big)] mt-[30rpx] border-[#ccc] border-solid',{'border-none text-white':rechargeAmount == item}]"
|
||||
:style="{'background': rechargeAmount == item?'linear-gradient( 283deg, #FD3923 11%, #FF7630 100%), #FFFFFF':''}"
|
||||
@click="rechargeAmount = item">
|
||||
<view class="flex items-end">
|
||||
<text class="text-[36rpx] font-500 leading-[1] price-font">{{item}}</text>
|
||||
<text class="text-[20rpx] ml-[6rpx] font-500 leading-[28rpx]">{{t('yuan')}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="fixed bottom-[30rpx] left-0 right-0 px-[var(--sidebar-m)]">
|
||||
<button class="primary-btn-bg h-[80rpx] leading-[80rpx] text-[#fff] text-[26rpx] border-[0] font-500 rounded-[50rpx]" hover-class="none" :loading="rechargeLoading" @click="recharge" >{{t('confirm')}}</button>
|
||||
<view class="mt-[30rpx] text-center text-[26rpx] font-500 text-primary leading-[36rpx]" @click="redirect({ url: '/addon/recharge/pages/recharge_record' })">
|
||||
{{t('rechargeRecord')}}
|
||||
</view>
|
||||
</view>
|
||||
<pay ref="payRef" @close="rechargeLoading = false"></pay>
|
||||
</view>
|
||||
<loading-page :loading="loading"></loading-page>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed} from 'vue'
|
||||
import { t } from '@/locale'
|
||||
import { redirect, img, debounce, moneyFormat } from '@/utils/common'
|
||||
import { createRecharge } from '@/addon/recharge/api/recharge'
|
||||
import { useSubscribeMessage } from '@/hooks/useSubscribeMessage'
|
||||
import useMemberStore from '@/stores/member'
|
||||
|
||||
const rechargePackage = ref([20, 30, 50, 100, 200, 300])
|
||||
const rechargeAmount = ref<string | number>("");
|
||||
const rechargeLoading = ref(false)
|
||||
const payRef = ref(null)
|
||||
const loading = ref(false);
|
||||
|
||||
// 账户金额
|
||||
const memberStore = useMemberStore();
|
||||
const info = computed(() => memberStore.info)
|
||||
|
||||
/**
|
||||
* 发起充值
|
||||
*/
|
||||
const recharge = debounce(() => {
|
||||
if (uni.$u.test.isEmpty(rechargeAmount.value)) {
|
||||
uni.showToast({title: t('customRechargeAmount'), icon: 'none'})
|
||||
return
|
||||
}
|
||||
if (!uni.$u.test.amount(rechargeAmount.value) || rechargeAmount.value <= 0) {
|
||||
uni.showToast({title: t('rechargeAmountError'), icon: 'none'})
|
||||
return
|
||||
}
|
||||
if (rechargeLoading.value) return
|
||||
rechargeLoading.value = true
|
||||
|
||||
createRecharge({recharge_money: rechargeAmount.value}).then((res:any) => {
|
||||
useSubscribeMessage().request('recharge_success')
|
||||
payRef.value?.open(res.data.trade_type, res.data.trade_id,'/app/pages/member/index')
|
||||
loading.value = false
|
||||
rechargeLoading.value = false
|
||||
}).catch(() => {
|
||||
rechargeLoading.value = false
|
||||
loading.value = false
|
||||
})
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
:deep(.apply-price){
|
||||
color: var(--text-color-light9);
|
||||
font-size: 26rpx;
|
||||
font-weight: normal;
|
||||
line-height: 76rpx;
|
||||
}
|
||||
</style>
|
||||
82
webroot/addon/recharge/uni-app/pages/recharge_record.vue
Normal file
82
webroot/addon/recharge/uni-app/pages/recharge_record.vue
Normal file
@ -0,0 +1,82 @@
|
||||
<template>
|
||||
<view class="min-h-[100vh] bg-[var(--page-bg-color)] overflow-hidden" :style="themeColor()">
|
||||
<mescroll-body ref="mescrollRef" @init="mescrollInit" :down="{ use: false }" @up="getListFn" top="">
|
||||
<view v-for="(order,index) in list" :key="order.order_id" class="sidebar-marign card-template mt-[var(--top-m)]" @click="toDetailFn(order)">
|
||||
<view class="flex items-center justify-between mb-[20rpx]">
|
||||
<view class="text-[36rpx] font-500 price-font text-active">{{ order.order_money }}</view>
|
||||
<view class="leading-[38rpx] text-[26rpx]" v-if="order.order_status_info">{{ order.order_status_info.name }}</view>
|
||||
</view>
|
||||
<view class="text-[24rpx] text-[var(--text-color-light6)] mb-[10rpx] leading-[34rpx]">充值方式: {{order.item[0].item_name}}</view>
|
||||
<view class="text-[24rpx] text-[var(--text-color-light6)] mb-[10rpx] leading-[34rpx]">支付时间: {{order.create_time}}</view>
|
||||
</view>
|
||||
<mescroll-empty v-if="!list.length && loading" :option="{tip : t('emptyTip') }"></mescroll-empty>
|
||||
</mescroll-body>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from 'vue'
|
||||
import {t} from '@/locale'
|
||||
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue'
|
||||
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue'
|
||||
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
|
||||
import {getRechargeList} from '@/addon/recharge/api/recharge'
|
||||
import {redirect} from '@/utils/common'
|
||||
import {onPageScroll, onReachBottom} from '@dcloudio/uni-app'
|
||||
|
||||
const {mescrollInit, downCallback, getMescroll} = useMescroll(onPageScroll, onReachBottom)
|
||||
|
||||
const list = ref<Array<any>>([]),
|
||||
loading = ref<boolean>(false),
|
||||
mescrollRef = ref(null);
|
||||
|
||||
interface mescrollStructure {
|
||||
num: number,
|
||||
size: number,
|
||||
endSuccess: Function,
|
||||
[propName: string]: any
|
||||
}
|
||||
|
||||
const getListFn = (mescroll: mescrollStructure) => {
|
||||
loading.value = false;
|
||||
let data: Object = {
|
||||
page: mescroll.num,
|
||||
page_size: mescroll.size
|
||||
};
|
||||
|
||||
interface acceptingDataStructure {
|
||||
data: acceptingDataItemStructure,
|
||||
msg: string,
|
||||
code: number
|
||||
}
|
||||
|
||||
interface acceptingDataItemStructure {
|
||||
data: object,
|
||||
[propName: string]: number | string | object
|
||||
}
|
||||
|
||||
getRechargeList(data).then((res: acceptingDataStructure) => {
|
||||
let newArr = res.data.data;
|
||||
mescroll.endSuccess(newArr.length);
|
||||
//设置列表数据
|
||||
if (mescroll.num == 1) {
|
||||
list.value = []; //如果是第一页需手动制空列表
|
||||
}
|
||||
list.value = list.value.concat(newArr);
|
||||
loading.value = true;
|
||||
}).catch(() => {
|
||||
loading.value = true;
|
||||
mescroll.endErr(); // 请求失败, 结束加载
|
||||
})
|
||||
}
|
||||
|
||||
const toDetailFn = (data) => {
|
||||
redirect({url: '/addon/recharge/pages/recharge_record_detail', param: {id: data.order_id}});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.text-active{
|
||||
color: #FF0D3E;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<view class="overflow-hidden bg-[var(--page-bg-color)] min-h-[100vh] px-[var(--sidebar-m)]" :style="themeColor()" v-show="loading">
|
||||
<view class="top-mar card-template !pt-[60rpx] !pb-[40rpx]">
|
||||
<view class="flex items-center flex-col mb-[80rpx]">
|
||||
<text class="text-[60rpx] font-bold price-font mb-[20rpx]">¥{{ rechargeInfo.order_money }}</text>
|
||||
<text class="text-[28rpx]" :class="{'text-primary': rechargeInfo.order_status_info && rechargeInfo.order_status_info.status == 0}" v-if="rechargeInfo.order_status_info">{{rechargeInfo.order_status_info.name}}</text>
|
||||
</view>
|
||||
<view>
|
||||
<view class="flex justify-between text-[28rpx] mt-[34rpx] leading-[32rpx]" v-if="rechargeInfo.item">
|
||||
<text class="text-[#333] w-[200rpx]">{{ rechargeInfo.item[0].item_name }}</text>
|
||||
<text class="text-[#333]">¥{{ rechargeInfo.order_money }}</text>
|
||||
</view>
|
||||
<view class="flex justify-between text-[28rpx] mt-[34rpx] leading-[32rpx]">
|
||||
<text class="text-[#333] w-[200rpx]">{{t('orderNo')}}</text>
|
||||
<text class="text-[#333]">{{ rechargeInfo.order_no }}</text>
|
||||
</view>
|
||||
<view class="flex justify-between text-[28rpx] mt-[34rpx] leading-[32rpx]">
|
||||
<text class="text-[#333] w-[200rpx]">{{t('createTime')}}</text>
|
||||
<text class="text-[#333]">{{ rechargeInfo.create_time }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {reactive, ref} from 'vue'
|
||||
import {onLoad} from '@dcloudio/uni-app'
|
||||
import {t} from '@/locale'
|
||||
import {getRechargeDetail} from '@/addon/recharge/api/recharge'
|
||||
|
||||
const rechargeInfo = ref({});
|
||||
const loading = ref<boolean>(false);
|
||||
onLoad((option) => {
|
||||
let id = option.id || "";
|
||||
getRechargeDetailFn(id)
|
||||
})
|
||||
|
||||
const getRechargeDetailFn = (id:any) => {
|
||||
loading.value = false;
|
||||
|
||||
getRechargeDetail(id).then((res:any) => {
|
||||
rechargeInfo.value = res.data;
|
||||
loading.value = true;
|
||||
}).catch(() => {
|
||||
loading.value = true;
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
||||
268
webroot/addon/shop/admin/api/delivery.ts
Normal file
268
webroot/addon/shop/admin/api/delivery.ts
Normal file
@ -0,0 +1,268 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/********************************* 物流公司 ***************************************/
|
||||
/**
|
||||
* 获取物流公司分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCompanyPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/delivery/company`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物流公司列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCompanyList(params: Record<string, any>) {
|
||||
return request.get(`shop/delivery/company/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物流公司详情
|
||||
* @param company_id 物流公司company_id
|
||||
* @returns
|
||||
*/
|
||||
export function getCompanyInfo(company_id: number) {
|
||||
return request.get(`shop/delivery/company/${ company_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加物流公司
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addCompany(params: Record<string, any>) {
|
||||
return request.post('shop/delivery/company', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑物流公司
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editCompany(params: Record<string, any>) {
|
||||
return request.put(`shop/delivery/company/${ params.company_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除物流公司
|
||||
* @param company_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteCompany(company_id: number) {
|
||||
return request.delete(`shop/delivery/company/${ company_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
|
||||
/********************************* 运费模版 ***************************************/
|
||||
/**
|
||||
* 获取运费模版分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getShippingTemplatePageList(params: Record<string, any>) {
|
||||
return request.get(`shop/shipping/template`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取运费模版列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getShippingTemplateList(params: Record<string, any>) {
|
||||
return request.get(`shop/shipping/template/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取物运费模版详情
|
||||
* @param template_id 运费模版template_id
|
||||
* @returns
|
||||
*/
|
||||
export function getShippingTemplateInfo(template_id: number) {
|
||||
return request.get(`shop/shipping/template/${ template_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加运费模版
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addShippingTemplate(params: Record<string, any>) {
|
||||
return request.post('shop/shipping/template', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑运费模版
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editShippingTemplate(params: Record<string, any>) {
|
||||
return request.put(`shop/shipping/template/${ params.template_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除运费模版
|
||||
* @param template_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteShippingTemplate(template_id: number) {
|
||||
return request.delete(`shop/shipping/template/${ template_id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/********************************* 自提门店 ***************************************/
|
||||
/**
|
||||
* 获取自提门店列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getStoreList(params: Record<string, any>) {
|
||||
return request.get(`shop/delivery/store`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自提门店详情
|
||||
* @param store_id 自提门店store_id
|
||||
* @returns
|
||||
*/
|
||||
export function getStoreInfo(store_id: number) {
|
||||
return request.get(`shop/delivery/store/${ store_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加自提门店
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addStore(params: Record<string, any>) {
|
||||
return request.post('shop/delivery/store', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑自提门店
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editStore(params: Record<string, any>) {
|
||||
return request.put(`shop/delivery/store/${ params.store_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除自提门店
|
||||
* @param store_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteStore(store_id: number) {
|
||||
return request.delete(`shop/delivery/store/${ store_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/********************************* 物流查询 ***************************************/
|
||||
/**
|
||||
* 设置 物流查询配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setDeliverySearch(params: Record<string, any>) {
|
||||
return request.post('shop/delivery/search', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 物流查询配置
|
||||
* @returns
|
||||
*/
|
||||
export function getDeliverySearch() {
|
||||
return request.get('shop/delivery/search')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 物流管理配置
|
||||
* @returns
|
||||
*/
|
||||
export function getShopDeliveryList() {
|
||||
return request.get('shop/delivery/deliveryList')
|
||||
}
|
||||
|
||||
/**
|
||||
* 物流管理设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setShopDeliveryConfig(params: Record<string, any>) {
|
||||
return request.put(`shop/delivery/setConfig`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 配送员列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getShopDelivery(params: Record<string, any>) {
|
||||
return request.get('shop/delivery/staff', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配送员信息
|
||||
* @param staff_id
|
||||
* @returns
|
||||
*/
|
||||
export function getShopDeliverInfo(staff_id: number) {
|
||||
return request.get(`shop/delivery/staff/${ staff_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加配送员
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addShopDeliver(params: Record<string, any>) {
|
||||
return request.post('shop/delivery/staff', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑配送员
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editShopDeliver(params: Record<string, any>) {
|
||||
return request.put(`shop/delivery/staff/${ params.deliver_id }`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除配送员
|
||||
* @param staff_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteShopDeliver(staff_id: number) {
|
||||
return request.delete(`shop/delivery/staff/${ staff_id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取同城配送设置
|
||||
* @returns
|
||||
*/
|
||||
export function getLocal() {
|
||||
return request.get('shop/local');
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置同城配送
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setLocal(params: Record<string, any>) {
|
||||
return request.put('shop/local', params, { showSuccessMessage: true })
|
||||
}
|
||||
116
webroot/addon/shop/admin/api/electronic_sheet.ts
Normal file
116
webroot/addon/shop/admin/api/electronic_sheet.ts
Normal file
@ -0,0 +1,116 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取电子面单分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getElectronicSheetPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/electronic_sheet`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getElectronicSheetList(params: Record<string, any>) {
|
||||
return request.get(`shop/electronic_sheet/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单详情
|
||||
* @param id 电子面单id
|
||||
* @returns
|
||||
*/
|
||||
export function getElectronicSheetInfo(id: number) {
|
||||
return request.get(`shop/electronic_sheet/${ id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加电子面单
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addElectronicSheet(params: Record<string, any>) {
|
||||
return request.post('shop/electronic_sheet', params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑电子面单
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editElectronicSheet(params: Record<string, any>) {
|
||||
return request.put(`shop/electronic_sheet/${ params.id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除电子面单
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteElectronicSheet(id: number) {
|
||||
return request.delete(`shop/electronic_sheet/${ id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置默认电子面单模板
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setDefaultElectronicSheet(params: Record<string, any>) {
|
||||
return request.put(`shop/electronic_sheet/setDefault/${ params.id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置电子面单 设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setElectronicSheetConfig(params: Record<string, any>) {
|
||||
return request.post('shop/electronic_sheet/config', params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取电子面单配置
|
||||
* @returns
|
||||
*/
|
||||
export function getElectronicSheetConfig() {
|
||||
return request.get(`shop/electronic_sheet/config`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取邮费支付方式类型
|
||||
* @returns
|
||||
*/
|
||||
export function getElectronicSheetPayType() {
|
||||
return request.get(`shop/electronic_sheet/paytype`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 打印电子面单
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function printElectronicSheet(params: Record<string, any>) {
|
||||
return request.post('shop/electronic_sheet/print', params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
647
webroot/addon/shop/admin/api/goods.ts
Normal file
647
webroot/addon/shop/admin/api/goods.ts
Normal file
@ -0,0 +1,647 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取商品列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品详情
|
||||
* @param goods_id 商品goods_id
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsInfo(goods_id: number) {
|
||||
return request.get(`shop/goods/${ goods_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加实物商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addGoods(params: Record<string, any>) {
|
||||
return request.post('shop/goods', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑实物商品
|
||||
* @param params
|
||||
*/
|
||||
export function editGoods(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/${ params.goods_id }`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品添加/编辑初始化数据
|
||||
* @param params
|
||||
*/
|
||||
export function getGoodsInit(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/init`, { params });
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加虚拟商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addVirtualGoods(params: Record<string, any>) {
|
||||
return request.post('shop/goods/virtual', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑虚拟商品
|
||||
* @param params
|
||||
*/
|
||||
export function editVirtualGoods(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/virtual/${ params.goods_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取虚拟商品添加/编辑初始化数据
|
||||
* @param params
|
||||
*/
|
||||
export function getVirtualGoodsInit(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/virtual/init`, { params });
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteGoods(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/delete`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取回收站商品分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRecycleGoodsPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/recycle`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 恢复商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function recycleGoods(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/recycle`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品排序号
|
||||
* @param params
|
||||
*/
|
||||
export function editGoodsSort(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/sort`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品上下架状态
|
||||
* @param params
|
||||
*/
|
||||
export function editGoodsStatus(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/status`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制商品
|
||||
* @param params
|
||||
*/
|
||||
export function copyGoods(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/copy/${ params.goods_id }`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品选择分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsSelectPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/select`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品SKU规格列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsSkuList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/sku`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品SKU规格不分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsSkuNoPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/selectgoodssku`, { params })
|
||||
}
|
||||
|
||||
/** 查询商品参与营销活动的数量
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveGoodsCount(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/active/count`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品SKU规格库存
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editGoodsListStock(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/sku/stock`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品SKU规格价格
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editGoodsListPrice(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/sku/price`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品SKU规格会员价格
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editGoodsListMemberPrice(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/sku/member_price`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品类型
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsType() {
|
||||
return request.get(`shop/goods/type`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品标签分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getLabelPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/label`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品标签列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getLabelList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/label/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品标签详情
|
||||
* @param label_id 商品标签label_id
|
||||
* @returns
|
||||
*/
|
||||
export function getLabelInfo(label_id: number) {
|
||||
return request.get(`shop/goods/label/${ label_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品标签
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addLabel(params: Record<string, any>) {
|
||||
return request.post('shop/goods/label', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品标签
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editLabel(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/label/${ params.label_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品标签
|
||||
* @param label_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteLabel(label_id: number) {
|
||||
return request.delete(`shop/goods/label/${ label_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品标签排序号
|
||||
* @param params
|
||||
*/
|
||||
export function modifyLabelSort(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/label/sort`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品品牌分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBrandPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/brand`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品品牌列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBrandList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/brand/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品品牌详情
|
||||
* @param brand_id 商品品牌brand_id
|
||||
* @returns
|
||||
*/
|
||||
export function getBrandInfo(brand_id: number) {
|
||||
return request.get(`shop/goods/brand/${ brand_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品品牌
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addBrand(params: Record<string, any>) {
|
||||
return request.post('shop/goods/brand', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品品牌
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editBrand(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/brand/${ params.brand_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品品牌排序号
|
||||
* @param params
|
||||
*/
|
||||
export function modifyBrandSort(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/brand/sort`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品品牌
|
||||
* @param brand_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteBrand(brand_id: number) {
|
||||
return request.delete(`shop/goods/brand/${ brand_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品服务分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getServePageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/service`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品服务列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getServeList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/service/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品服务详情
|
||||
* @param service_id 商品服务service_id
|
||||
* @returns
|
||||
*/
|
||||
export function getServeInfo(service_id: number) {
|
||||
return request.get(`shop/goods/service/${ service_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品服务
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addServe(params: Record<string, any>) {
|
||||
return request.post('shop/goods/service', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品服务
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editServe(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/service/${ params.service_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品服务
|
||||
* @param service_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteServe(service_id: number) {
|
||||
return request.delete(`shop/goods/service/${ service_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类树结构
|
||||
* @returns
|
||||
*/
|
||||
export function getCategoryTree() {
|
||||
return request.get(`shop/goods/tree`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCategoryList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/category`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类详情
|
||||
* @param category_id 商品分类category_id
|
||||
* @returns
|
||||
*/
|
||||
export function getCategoryInfo(category_id: number) {
|
||||
return request.get(`shop/goods/category/${ category_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品分类
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addCategory(params: Record<string, any>) {
|
||||
return request.post('shop/goods/category', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品分类
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editCategory(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/category/${ params.category_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品分类
|
||||
* @param category_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteCategory(category_id: number) {
|
||||
return request.delete(`shop/goods/category/${ category_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 拖拽编辑商品分类
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function updateCategory(params: Record<string, any>) {
|
||||
return request.post(`shop/goods/category/update`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置商品分类配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setCategoryConfig(params: Record<string, any>) {
|
||||
return request.post(`shop/goods/category/config`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类配置
|
||||
* @returns
|
||||
*/
|
||||
export function getCategoryConfig() {
|
||||
return request.get(`shop/goods/category/config`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类树结构供弹框调用
|
||||
* @returns
|
||||
*/
|
||||
export function getCategoryTreeComponents() {
|
||||
return request.get(`shop/goods/category/components`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取供应商列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSupplierList(params: Record<string, any>) {
|
||||
return request.get(`shop_supplier/supplier/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品评价列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getEvaluateList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/evaluate`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品评价
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addEvaluate(params: Record<string, any>) {
|
||||
return request.post('shop/goods/evaluate', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品评价
|
||||
* @param evaluate_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteEvaluate(evaluate_id: number) {
|
||||
return request.delete(`shop/goods/evaluate/${ evaluate_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价 通过
|
||||
* @param evaluate_id
|
||||
* @returns
|
||||
*/
|
||||
export function adoptEvaluate(evaluate_id: number) {
|
||||
return request.put(`shop/goods/evaluate/adopt/${ evaluate_id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价 拒绝
|
||||
* @param evaluate_id
|
||||
* @returns
|
||||
*/
|
||||
export function refuseEvaluate(evaluate_id: number) {
|
||||
return request.put(`shop/goods/evaluate/refuse/${ evaluate_id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价 回复
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function replyEvaluate(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/evaluate/reply/${ params.evaluate_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价 置顶
|
||||
* @param evaluate_id
|
||||
* @returns
|
||||
*/
|
||||
export function toppingEvaluate(evaluate_id: number) {
|
||||
return request.put(`shop/goods/evaluate/topping/${ evaluate_id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品评价 取消置顶
|
||||
* @param evaluate_id
|
||||
* @returns
|
||||
*/
|
||||
export function cancelToppingEvaluate(evaluate_id: number) {
|
||||
return request.put(`shop/goods/evaluate/cancel_topping/${ evaluate_id }`, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品参数分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttrPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/attr`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品参数列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttrList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/attr/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品参数详情
|
||||
* @param attr_id 商品参数attr_id
|
||||
* @returns
|
||||
*/
|
||||
export function getAttrInfo(attr_id: number) {
|
||||
return request.get(`shop/goods/attr/${ attr_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加商品参数
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addAttr(params: Record<string, any>) {
|
||||
return request.post('shop/goods/attr', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑商品参数
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editAttr(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/attr/${ params.attr_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品参数
|
||||
* @param attr_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttr(attr_id: number) {
|
||||
return request.delete(`shop/goods/attr/${ attr_id }`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品参数排序号
|
||||
* @param params
|
||||
*/
|
||||
export function modifyAttrSort(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/attr/sort`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品参数名称
|
||||
* @param params
|
||||
*/
|
||||
export function modifyAttrName(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/attr/attr_name`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改商品参数值
|
||||
* @param params
|
||||
*/
|
||||
export function modifyAttrValue(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/attr/attr_value`, params, { showSuccessMessage: true })
|
||||
}
|
||||
289
webroot/addon/shop/admin/api/marketing.ts
Normal file
289
webroot/addon/shop/admin/api/marketing.ts
Normal file
@ -0,0 +1,289 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 营销中心
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMarketingIndex(params: Record<string, any>) {
|
||||
return request.get(`shop/marketing`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGoodsCategoryList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/coupon/init`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加优惠券
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addCoupon(params: Record<string, any>) {
|
||||
return request.post(`shop/goods/coupon`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCouponList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/coupon`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券领取记录
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCouponRecords(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/coupon/records`, { params });
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取优惠券详情
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function getCouponInfo(id: number) {
|
||||
return request.get(`shop/goods/coupon/detail/${ id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 优惠券状态变更
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editCouponStatus(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/coupon/setstatus/${ params.status }`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑优惠券
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editCoupon(params: Record<string, any>) {
|
||||
return request.put(`shop/goods/coupon/edit/${ params.id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除优惠券
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteCoupon(id: number) {
|
||||
return request.delete(`shop/goods/coupon/${ id }`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭优惠券
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function closeCoupon(id: number) {
|
||||
return request.put(`shop/goods/coupon/invalid/${ id }`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSelectedCouponList(params: Record<string, any>) {
|
||||
return request.get(`shop/goods/coupon/selected`, { params })
|
||||
}
|
||||
|
||||
/************ 限时折扣 ****************/
|
||||
/**
|
||||
* 获取限时折扣列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/active/discount`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取限时折扣状态列表
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountStatusList() {
|
||||
return request.get(`shop/active/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取限时折扣详情
|
||||
* @param active_id
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountInfo(active_id: number) {
|
||||
return request.get(`shop/active/discount/${ active_id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加限时折扣
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addActiveDiscount(params: Record<string, any>) {
|
||||
return request.post('shop/active/discount', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑限时折扣
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editActiveDiscount(params: Record<string, any>) {
|
||||
return request.put(`shop/active/discount/${ params.active_id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭限时折扣
|
||||
* @param active_id
|
||||
* @returns
|
||||
*/
|
||||
export function closeActiveDiscount(active_id: number) {
|
||||
return request.put(`shop/active/discount/close/${ active_id }`, {}, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除限时折扣
|
||||
* @param active_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteActiveDiscount(active_id: number) {
|
||||
return request.delete(`shop/active/discount/${ active_id }`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参与限时折扣商品列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountGoodsPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/active/discount/goods/${ params.active_id }`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参与限时折扣订单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountOrderPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/active/discount/order/${ params.active_id }`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参与限时折扣会员列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountMemberPageList(params: Record<string, any>) {
|
||||
return request.get(`shop/active/discount/member/${ params.active_id }`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取活动专题
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveDiscountConfig() {
|
||||
return request.get(`shop/active/discount/config`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑活动专题
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editActiveDiscountConfig(params: Record<string, any>) {
|
||||
return request.put(`shop/active/discount/config`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/********** 积分商品 ***********/
|
||||
|
||||
/**
|
||||
* 获取积分商品列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveExchangePageList(params: Record<string, any>) {
|
||||
return request.get(`shop/active/exchange`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分商品详情
|
||||
* @param id id
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveExchangeInfo(id: number) {
|
||||
return request.get(`shop/active/exchange/${ id }`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加积分商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addActiveExchange(params: Record<string, any>) {
|
||||
return request.post('shop/active/exchange', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑积分商品
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editActiveExchange(params: Record<string, any>) {
|
||||
return request.put(`shop/active/exchange/${ params.id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑积分商品状态
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editActiveExchangeStatus(params: Record<string, any>) {
|
||||
return request.put(`shop/active/exchange/status/${ params.id }`, params, {
|
||||
showErrorMessage: true,
|
||||
showSuccessMessage: true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除积分商品
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteActiveExchange(id: number) {
|
||||
return request.delete(`shop/active/exchange/${ id }`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取积分商品状态列表
|
||||
* @returns
|
||||
*/
|
||||
export function getActiveExchangeStatus() {
|
||||
return request.get(`shop/active/exchange/status`)
|
||||
}
|
||||
237
webroot/addon/shop/admin/api/order.ts
Normal file
237
webroot/addon/shop/admin/api/order.ts
Normal file
@ -0,0 +1,237 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取交易配置
|
||||
* @returns
|
||||
*/
|
||||
export function getConfig() {
|
||||
return request.get('shop/order/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑交易配置
|
||||
* @returns
|
||||
*/
|
||||
export function setConfig(param: any) {
|
||||
return request.post('shop/order/config', param, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单列表
|
||||
* @returns
|
||||
*/
|
||||
export function getOrderList(params: Record<string, any>) {
|
||||
return request.get('shop/order/list', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单列表
|
||||
* @returns
|
||||
*/
|
||||
export function getOrderDetail(order_id: number) {
|
||||
return request.get(`shop/order/detail/${ order_id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单状态
|
||||
* @return
|
||||
*/
|
||||
export function getOrderStatus() {
|
||||
return request.get(`shop/order/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单类型
|
||||
* @return
|
||||
*/
|
||||
export function getOrderType() {
|
||||
return request.get(`shop/order/type`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单关闭
|
||||
* @return
|
||||
*/
|
||||
export function orderClose(order_id: number) {
|
||||
return request.put(`shop/order/close/${ order_id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单配送方式
|
||||
* @return
|
||||
*/
|
||||
export function getOrderDeliveryType(params: Record<string, any>) {
|
||||
return request.get(`shop/order/delivery_type`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单发货
|
||||
* @return
|
||||
*/
|
||||
export function orderDelivery(params: Record<string, any>) {
|
||||
return request.put(`shop/order/delivery`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 商家留言
|
||||
* @return
|
||||
*/
|
||||
export function setShopRemark(params: Record<string, any>) {
|
||||
return request.put(`shop/order/shop_remark`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单完成
|
||||
* @return
|
||||
*/
|
||||
export function orderFinish(order_id: number) {
|
||||
return request.put(`shop/order/finish/${ order_id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 物流包裹信息(物流跟踪)
|
||||
* @return
|
||||
*/
|
||||
export function deliveryPackage(params: Record<string, any>) {
|
||||
return request.get(`shop/order/delivery/package`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 物流包裹列表
|
||||
* @return
|
||||
*/
|
||||
export function deliveryPackageList(params: Record<string, any>) {
|
||||
return request.get(`shop/order/delivery/package/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款维权列表
|
||||
* @param {Record<string, any>} params
|
||||
* @return
|
||||
*/
|
||||
export function orderRefund(params: Record<string, any>) {
|
||||
return request.get(`shop/order/refund`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款维权详情
|
||||
*/
|
||||
export function orderRefundDetail(refund_id: number) {
|
||||
return request.get(`shop/order/refund/${ refund_id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款审核
|
||||
* @return
|
||||
*/
|
||||
export function auditRefund(params: Record<string, any>) {
|
||||
return request.put(`shop/order/refund/audit/${ params.order_refund_no }`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款收货审核
|
||||
* @return
|
||||
*/
|
||||
export function refundDelivery(params: Record<string, any>) {
|
||||
return request.put(`shop/order/refund/delivery/${ params.order_refund_no }`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取发票列表
|
||||
*/
|
||||
export function getInvoiceList(params: Record<string, any>) {
|
||||
return request.get(`shop/invoice`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取发票列表
|
||||
*/
|
||||
export function getInvoiceDetail(id: number) {
|
||||
return request.get(`shop/invoice/${ id }`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 开具发票
|
||||
*/
|
||||
export function setInvoice(id: number, params: Record<string, any>) {
|
||||
return request.put(`shop/invoice/${ id }`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付类型
|
||||
*/
|
||||
export function getOrderPayType() {
|
||||
return request.get(`shop/order/pay/type`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单来源
|
||||
*/
|
||||
export function getOrderFrom() {
|
||||
return request.get(`shop/order/from`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单调价
|
||||
* @return
|
||||
*/
|
||||
export function orderEditPrice(params: Record<string, any>) {
|
||||
return request.put(`shop/order/edit_price`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单地址信息
|
||||
* @return
|
||||
*/
|
||||
export function getOrderEditAddress(params: Record<string, any>) {
|
||||
return request.get(`shop/order/edit_delivery`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自提点列表
|
||||
* @return
|
||||
*/
|
||||
export function getDeliveryList() {
|
||||
return request.get(`shop/delivery/store/list`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改地址
|
||||
* @return
|
||||
*/
|
||||
export function orderEditAddress(params: Record<string, any>) {
|
||||
return request.put(`shop/order/edit_delivery`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量发货列表
|
||||
* @return
|
||||
*/
|
||||
export function getOrderBatchDeliveryList(params: Record<string, any>) {
|
||||
return request.get(`shop/order_batch_delivery`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量发货导入
|
||||
* @return
|
||||
*/
|
||||
export function addBatchOrderDelivery(params: Record<string, any>) {
|
||||
return request.put(`shop/order_batch_delivery/add_batch_order_delivery`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取批量发货状态
|
||||
* @return
|
||||
*/
|
||||
export function getOrderBatchDeliveryState() {
|
||||
return request.get(`shop/order_batch_delivery/get_status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取批量发货操作类型
|
||||
* @return
|
||||
*/
|
||||
export function getOrderBatchDeliveryType() {
|
||||
return request.get(`shop/order_batch_delivery/get_type`)
|
||||
}
|
||||
|
||||
44
webroot/addon/shop/admin/api/shop.ts
Normal file
44
webroot/addon/shop/admin/api/shop.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取统计总数
|
||||
*/
|
||||
export function getShopCountList() {
|
||||
return request.get(`shop/stat/total`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取今日统计总数
|
||||
*/
|
||||
export function getShopTodayCountList() {
|
||||
return request.get(`shop/stat/today`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取昨日统计总数
|
||||
*/
|
||||
export function getShopYesterdayCountList() {
|
||||
return request.get(`shop/stat/yesterday`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取统计图数据
|
||||
*/
|
||||
export function getShopStat() {
|
||||
return request.get(`shop/stat`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单统计
|
||||
*/
|
||||
export function getShopOrderStat() {
|
||||
return request.get(`shop/stat/order`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品统计
|
||||
*/
|
||||
export function getShopGoodsStat() {
|
||||
return request.get(`shop/stat/goods`)
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user