feat: 团队订单与管理端订单代码重构、合并
This commit is contained in:
parent
9eb8514fdf
commit
f7d40414c0
|
|
@ -43,10 +43,17 @@ export function reclaimSubteamUserDeptScore(data) {
|
||||||
return request({ url: '/subteam/user/dept-score/reclaim', method: 'put', data })
|
return request({ url: '/subteam/user/dept-score/reclaim', method: 'put', data })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 团队后台视频/生成订单列表:GET /subteam/video-order/list */
|
||||||
export function listSubteamVideoOrder(query) {
|
export function listSubteamVideoOrder(query) {
|
||||||
return request({ url: '/subteam/video-order/list', method: 'get', params: query })
|
return request({ url: '/subteam/video-order/list', method: 'get', params: query })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出:POST /subteam/video-order/export(与列表相同查询参数 + 创建时间区间)。
|
||||||
|
* 页面一般使用 this.download('subteam/video-order/export', addDateRange(...), filename),勿用 GET。
|
||||||
|
*/
|
||||||
|
export const subteamVideoOrderExportUrl = 'subteam/video-order/export'
|
||||||
|
|
||||||
export function getSubteamVideoOrder(id) {
|
export function getSubteamVideoOrder(id) {
|
||||||
return request({ url: '/subteam/video-order/' + id, method: 'get' })
|
return request({ url: '/subteam/video-order/' + id, method: 'get' })
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,10 +67,10 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="orderList">
|
<el-table v-loading="loading" :data="orderList">
|
||||||
<el-table-column label="团队名称" align="center" prop="deptName" width="140" show-overflow-tooltip />
|
|
||||||
<el-table-column label="用户名称" align="center" prop="userName" width="120" show-overflow-tooltip />
|
|
||||||
<el-table-column label="订单号" align="center" prop="orderNum" width="200" show-overflow-tooltip />
|
<el-table-column label="订单号" align="center" prop="orderNum" width="200" show-overflow-tooltip />
|
||||||
<el-table-column label="三方订单号" align="center" prop="thirdPartyOrderNum" width="200" show-overflow-tooltip />
|
<el-table-column label="三方订单号" align="center" prop="thirdPartyOrderNum" width="200" show-overflow-tooltip />
|
||||||
|
<el-table-column label="团队名称" align="center" prop="deptName" width="140" show-overflow-tooltip />
|
||||||
|
<el-table-column label="用户名称" align="center" prop="userName" width="120" show-overflow-tooltip />
|
||||||
<el-table-column label="消耗积分" align="center" prop="amount" width="120">
|
<el-table-column label="消耗积分" align="center" prop="amount" width="120">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ formatThousands(scope.row.amount) }}</span>
|
<span>{{ formatThousands(scope.row.amount) }}</span>
|
||||||
|
|
@ -120,7 +120,7 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<el-dialog title="订单详情" :visible.sync="detailVisible" width="720px" append-to-body>
|
<el-dialog title="订单详情" :visible.sync="detailVisible" width="720px" append-to-body>
|
||||||
<el-descriptions :column="1" border size="small">
|
<el-descriptions :column="1" border size="small" :labelStyle="{ width: '150px', minWidth: '150px' }">
|
||||||
<el-descriptions-item v-for="(value, key) in detailData" :key="key" :label="key">
|
<el-descriptions-item v-for="(value, key) in detailData" :key="key" :label="key">
|
||||||
<pre v-if="isObjectValue(value)" style="margin: 0; white-space: pre-wrap;">{{ formatJson(value) }}</pre>
|
<pre v-if="isObjectValue(value)" style="margin: 0; white-space: pre-wrap;">{{ formatJson(value) }}</pre>
|
||||||
<span v-else>{{ value === null || value === undefined || value === "" ? "-" : value }}</span>
|
<span v-else>{{ value === null || value === undefined || value === "" ? "-" : value }}</span>
|
||||||
|
|
|
||||||
|
|
@ -27,39 +27,33 @@
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button v-hasPermi="['subteam:user:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||||
|
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-row :gutter="10" class="mb8">
|
<el-table v-loading="loading" :data="userList">
|
||||||
<el-col :span="1.5">
|
<el-table-column label="主键ID" prop="id" width="100" />
|
||||||
<el-button v-hasPermi="['subteam:user:add']" type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
<el-table-column label="用户ID" prop="userId" width="150" show-overflow-tooltip />
|
||||||
</el-col>
|
<el-table-column label="账号" prop="username" width="150"/>
|
||||||
<el-col :span="1.5">
|
<el-table-column label="昵称" prop="nickname"/>
|
||||||
<el-button v-hasPermi="['subteam:user:edit']" type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate">修改</el-button>
|
<el-table-column label="登录时间" prop="loginTime" width="160" align="center" header-align="center">
|
||||||
</el-col>
|
<template slot-scope="scope">
|
||||||
<el-col :span="1.5">
|
<span>{{ parseTime(scope.row.loginTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
<el-button v-hasPermi="['subteam:user:remove']" type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete">删除</el-button>
|
</template>
|
||||||
</el-col>
|
</el-table-column>
|
||||||
<right-toolbar :show-search.sync="showSearch" @queryTable="getList" />
|
<el-table-column label="剩余积分" prop="balance" width="150" align="center" header-align="center">
|
||||||
</el-row>
|
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
|
||||||
<el-table-column type="selection" width="50" />
|
|
||||||
<el-table-column label="主键ID" prop="id" width="80" />
|
|
||||||
<el-table-column label="账号" prop="username" />
|
|
||||||
<el-table-column label="昵称" prop="nickname" />
|
|
||||||
<el-table-column label="剩余积分" prop="balance" width="120" align="center" header-align="center">
|
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ formatThousands(scope.row.balance) }}</span>
|
<span>{{ formatThousands(scope.row.balance) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="手机" prop="phone" width="120" />
|
<el-table-column label="手机" prop="phone" width="160" />
|
||||||
<el-table-column label="状态" width="80">
|
<el-table-column label="状态" width="100">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.sys_normal_disable" :value="String(scope.row.status)" />
|
<dict-tag :options="dict.type.sys_normal_disable" :value="String(scope.row.status)" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="320">
|
<el-table-column label="操作" width="400">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
size="mini"
|
size="mini"
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,35 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form v-show="showSearch" ref="queryForm" :model="queryParams" size="small" :inline="true">
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="88px">
|
||||||
<el-form-item label="订单号" prop="orderNum">
|
<el-form-item label="订单号" prop="orderNum">
|
||||||
<el-input v-model="queryParams.orderNum" clearable @keyup.enter.native="handleQuery" />
|
<el-input
|
||||||
|
v-model="queryParams.orderNum"
|
||||||
|
placeholder="请输入订单号"
|
||||||
|
style="width: 140px"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="用户ID" prop="userId">
|
<el-form-item label="三方订单号" prop="thirdPartyOrderNum">
|
||||||
<el-input v-model="queryParams.userId" clearable @keyup.enter.native="handleQuery" />
|
<el-input
|
||||||
|
v-model="queryParams.thirdPartyOrderNum"
|
||||||
|
placeholder="支持模糊搜索"
|
||||||
|
style="width: 210px"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="用户名称" prop="userName">
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.userName"
|
||||||
|
placeholder="支持模糊搜索"
|
||||||
|
style="width: 120px"
|
||||||
|
clearable
|
||||||
|
@keyup.enter.native="handleQuery"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-select v-model="queryParams.status" clearable placeholder="状态">
|
<el-select v-model="queryParams.status" placeholder="全部" clearable style="width: 100px">
|
||||||
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -24,26 +45,45 @@
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
|
||||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||||
|
<el-button
|
||||||
|
type="warning"
|
||||||
|
plain
|
||||||
|
icon="el-icon-download"
|
||||||
|
size="mini"
|
||||||
|
@click="handleExport"
|
||||||
|
v-hasPermi="['subteam:videoOrder:export']"
|
||||||
|
>导出</el-button>
|
||||||
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-row class="mb8"><right-toolbar :show-search.sync="showSearch" @queryTable="getList" /></el-row>
|
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="orderList">
|
||||||
<el-table-column label="ID" prop="id" width="70" />
|
<el-table-column label="订单号" align="center" prop="orderNum" width="200" show-overflow-tooltip />
|
||||||
<el-table-column label="订单号" prop="orderNum" min-width="120" show-overflow-tooltip />
|
<el-table-column label="三方订单号" align="center" prop="thirdPartyOrderNum" width="200" show-overflow-tooltip />
|
||||||
<el-table-column label="用户ID" prop="userId" width="90" />
|
<el-table-column label="用户名称" align="center" prop="userName" width="120" show-overflow-tooltip />
|
||||||
<el-table-column label="积分" prop="amount" width="90" />
|
<el-table-column label="消耗积分" align="center" prop="amount" width="120">
|
||||||
<el-table-column label="状态" width="80">
|
<template slot-scope="scope">
|
||||||
<template slot-scope="s">
|
<span>{{ formatThousands(scope.row.amount) }}</span>
|
||||||
<span>{{ statusLabel(s.row.status) }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="结果预览" min-width="220">
|
<el-table-column label="使用tokens" align="center" prop="totalUsage" width="120">
|
||||||
<template slot-scope="s">
|
<template slot-scope="scope">
|
||||||
<div v-if="extractVideoUrl(s.row.result)">
|
<span>{{ formatThousands(scope.row.totalUsage) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="状态" align="center" width="100">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ statusLabel(scope.row.status) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="结果预览" min-width="185">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div v-if="extractVideoUrl(scope.row.result)">
|
||||||
<video
|
<video
|
||||||
:src="extractVideoUrl(s.row.result)"
|
:src="extractVideoUrl(scope.row.result)"
|
||||||
controls
|
controls
|
||||||
preload="metadata"
|
preload="metadata"
|
||||||
style="width: 180px; max-height: 100px; border-radius: 4px;"
|
style="width: 180px; max-height: 100px; border-radius: 4px;"
|
||||||
|
|
@ -52,17 +92,28 @@
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间" prop="createTime" width="160"><template slot-scope="s">{{ parseTime(s.row.createTime) }}</template></el-table-column>
|
<el-table-column label="创建时间" align="center" prop="createTime" width="150">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="90" fixed="right">
|
<el-table-column label="操作" width="90" fixed="right">
|
||||||
<template slot-scope="s">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" size="mini" @click="handleDetail(s.row)">详情</el-button>
|
<el-button type="text" size="mini" @click="handleDetail(scope.row)">详情</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
|
|
||||||
|
|
||||||
<el-dialog title="订单详情" :visible.sync="detailVisible" width="720px" append-to-body>
|
<pagination
|
||||||
<el-descriptions :column="1" border size="small">
|
v-show="total>0"
|
||||||
|
:total="total"
|
||||||
|
:page.sync="queryParams.pageNum"
|
||||||
|
:limit.sync="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<el-dialog title="订单详情" :visible.sync="detailVisible" width="800px" append-to-body>
|
||||||
|
<el-descriptions :column="1" border size="small" :labelStyle="{ width: '150px', minWidth: '150px' }">
|
||||||
<el-descriptions-item v-for="(value, key) in detailData" :key="key" :label="key">
|
<el-descriptions-item v-for="(value, key) in detailData" :key="key" :label="key">
|
||||||
<pre v-if="isObjectValue(value)" style="margin: 0; white-space: pre-wrap;">{{ formatJson(value) }}</pre>
|
<pre v-if="isObjectValue(value)" style="margin: 0; white-space: pre-wrap;">{{ formatJson(value) }}</pre>
|
||||||
<span v-else>{{ value === null || value === undefined || value === '' ? '-' : value }}</span>
|
<span v-else>{{ value === null || value === undefined || value === '' ? '-' : value }}</span>
|
||||||
|
|
@ -76,15 +127,16 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listGroupOrder } from '@/api/ai/order'
|
import { listSubteamVideoOrder, subteamVideoOrderExportUrl } from '@/api/subteam'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'SubteamVideoOrder',
|
name: 'SubteamVideoOrder',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: true,
|
loading: true,
|
||||||
showSearch: true,
|
showSearch: true,
|
||||||
list: [],
|
|
||||||
total: 0,
|
total: 0,
|
||||||
|
orderList: [],
|
||||||
detailVisible: false,
|
detailVisible: false,
|
||||||
detailData: {},
|
detailData: {},
|
||||||
statusOptions: [
|
statusOptions: [
|
||||||
|
|
@ -93,18 +145,50 @@ export default {
|
||||||
{ label: '失败', value: 2 }
|
{ label: '失败', value: 2 }
|
||||||
],
|
],
|
||||||
dateRange: [],
|
dateRange: [],
|
||||||
queryParams: { pageNum: 1, pageSize: 10, orderNum: undefined, userId: undefined, status: undefined }
|
queryParams: {
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
orderNum: null,
|
||||||
|
thirdPartyOrderNum: null,
|
||||||
|
userName: null,
|
||||||
|
status: null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() { this.getList() },
|
created() {
|
||||||
|
this.initDefaultDateRange()
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getList() {
|
formatThousands(value) {
|
||||||
this.loading = true
|
if (value === null || value === undefined || value === '') {
|
||||||
listGroupOrder(this.addDateRange(this.queryParams, this.dateRange, 'CreateTime')).then(res => {
|
return '—'
|
||||||
this.list = res.rows
|
}
|
||||||
this.total = res.total
|
const n = Number(value)
|
||||||
this.loading = false
|
if (Number.isNaN(n)) {
|
||||||
})
|
return String(value)
|
||||||
|
}
|
||||||
|
return n.toLocaleString('en-US', { maximumFractionDigits: 0 })
|
||||||
|
},
|
||||||
|
initDefaultDateRange() {
|
||||||
|
this.dateRange = this.buildLastMonthDateRange()
|
||||||
|
},
|
||||||
|
buildLastMonthDateRange() {
|
||||||
|
const end = new Date()
|
||||||
|
const start = new Date(end.getTime())
|
||||||
|
start.setMonth(start.getMonth() - 1)
|
||||||
|
return [this.formatYmd(start), this.formatYmd(end)]
|
||||||
|
},
|
||||||
|
formatYmd(d) {
|
||||||
|
const y = d.getFullYear()
|
||||||
|
const m = String(d.getMonth() + 1).padStart(2, '0')
|
||||||
|
const day = String(d.getDate()).padStart(2, '0')
|
||||||
|
return `${y}-${m}-${day}`
|
||||||
|
},
|
||||||
|
statusLabel(status) {
|
||||||
|
const n = status !== undefined && status !== null ? Number(status) : null
|
||||||
|
const hit = this.statusOptions.find(o => o.value === n)
|
||||||
|
return hit ? hit.label : '—'
|
||||||
},
|
},
|
||||||
extractVideoUrl(result) {
|
extractVideoUrl(result) {
|
||||||
if (!result) return ''
|
if (!result) return ''
|
||||||
|
|
@ -138,13 +222,12 @@ export default {
|
||||||
}
|
}
|
||||||
return ''
|
return ''
|
||||||
},
|
},
|
||||||
statusLabel(status) {
|
|
||||||
const n = status !== undefined && status !== null ? Number(status) : null
|
|
||||||
const hit = this.statusOptions.find(item => item.value === n)
|
|
||||||
return hit ? hit.label : '-'
|
|
||||||
},
|
|
||||||
handleDetail(row) {
|
handleDetail(row) {
|
||||||
this.detailData = row || {}
|
const copy = row && typeof row === 'object' ? { ...row } : {}
|
||||||
|
if (Object.prototype.hasOwnProperty.call(copy, 'deptName')) {
|
||||||
|
delete copy.deptName
|
||||||
|
}
|
||||||
|
this.detailData = copy
|
||||||
this.detailVisible = true
|
this.detailVisible = true
|
||||||
},
|
},
|
||||||
isObjectValue(value) {
|
isObjectValue(value) {
|
||||||
|
|
@ -157,11 +240,30 @@ export default {
|
||||||
return String(value)
|
return String(value)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleQuery() { this.queryParams.pageNum = 1; this.getList() },
|
getList() {
|
||||||
|
this.loading = true
|
||||||
|
listSubteamVideoOrder(this.addDateRange(this.queryParams, this.dateRange, 'CreateTime')).then(response => {
|
||||||
|
this.orderList = response.rows
|
||||||
|
this.total = response.total
|
||||||
|
this.loading = false
|
||||||
|
})
|
||||||
|
},
|
||||||
|
handleQuery() {
|
||||||
|
this.queryParams.pageNum = 1
|
||||||
|
this.getList()
|
||||||
|
},
|
||||||
resetQuery() {
|
resetQuery() {
|
||||||
this.dateRange = []
|
this.initDefaultDateRange()
|
||||||
this.resetForm('queryForm')
|
this.resetForm('queryForm')
|
||||||
this.handleQuery()
|
this.handleQuery()
|
||||||
|
},
|
||||||
|
handleExport() {
|
||||||
|
const q = { ...this.queryParams }
|
||||||
|
this.download(
|
||||||
|
subteamVideoOrderExportUrl,
|
||||||
|
this.addDateRange(q, this.dateRange, 'CreateTime'),
|
||||||
|
`subteam_video_orders_${new Date().getTime()}.xlsx`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,28 @@
|
||||||
package com.ruoyi.web.controller.subteam;
|
package com.ruoyi.web.controller.subteam;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import com.ruoyi.ai.domain.AiOrder;
|
import com.ruoyi.ai.domain.AiOrder;
|
||||||
import com.ruoyi.ai.service.IAiOrderService;
|
import com.ruoyi.ai.service.IAiOrderService;
|
||||||
|
import com.ruoyi.common.annotation.Log;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.system.service.subteam.ISubteamDataQueryService;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.system.service.subteam.ISubteamScopeService;
|
import com.ruoyi.system.service.subteam.ISubteamScopeService;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/subteam/video-order")
|
@RequestMapping("/subteam/video-order")
|
||||||
public class SubteamVideoOrderController extends BaseController {
|
public class SubteamVideoOrderController extends BaseController {
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private ISubteamDataQueryService subteamDataQueryService;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISubteamScopeService subteamScopeService;
|
private ISubteamScopeService subteamScopeService;
|
||||||
|
|
||||||
|
|
@ -32,10 +33,19 @@ public class SubteamVideoOrderController extends BaseController {
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public TableDataInfo list(AiOrder query) {
|
public TableDataInfo list(AiOrder query) {
|
||||||
startPage();
|
startPage();
|
||||||
List<AiOrder> list = subteamDataQueryService.selectVideoOrders(query);
|
List<AiOrder> list = aiOrderService.selectAiOrderListForCurrentSubteam(query);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasPermi('subteam:videoOrder:export')")
|
||||||
|
@Log(title = "团队订单记录", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(HttpServletResponse response, AiOrder query) {
|
||||||
|
List<AiOrder> list = aiOrderService.selectAiOrderListForCurrentSubteam(query);
|
||||||
|
ExcelUtil<AiOrder> util = new ExcelUtil<AiOrder>(AiOrder.class);
|
||||||
|
util.exportExcel(response, list, "团队订单记录");
|
||||||
|
}
|
||||||
|
|
||||||
@PreAuthorize("@ss.hasPermi('subteam:videoOrder:query')")
|
@PreAuthorize("@ss.hasPermi('subteam:videoOrder:query')")
|
||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
public AjaxResult getInfo(@PathVariable Long id) {
|
public AjaxResult getInfo(@PathVariable Long id) {
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,13 @@ public interface IAiOrderService {
|
||||||
*/
|
*/
|
||||||
List<AiOrder> selectAiOrderList(AiOrder aiOrder);
|
List<AiOrder> selectAiOrderList(AiOrder aiOrder);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 团队后台:按当前登录人所属团队部门查询订单列表(与 {@link #selectAiOrderList} 共用 Mapper,仅限定 deptId)
|
||||||
|
*
|
||||||
|
* @param aiOrder 查询条件(会写入 deptId,不应依赖调用方传入的 deptId)
|
||||||
|
*/
|
||||||
|
List<AiOrder> selectAiOrderListForCurrentSubteam(AiOrder aiOrder);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询订单管理列表
|
* 分页查询订单管理列表
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import com.ruoyi.common.utils.DateUtils;
|
||||||
import com.ruoyi.common.utils.MessageUtils;
|
import com.ruoyi.common.utils.MessageUtils;
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.system.service.subteam.ISubteamScopeService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -64,6 +65,9 @@ public class AiOrderServiceImpl implements IAiOrderService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IAiVideoReportDataService aiVideoReportDataService;
|
private IAiVideoReportDataService aiVideoReportDataService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ISubteamScopeService subteamScopeService;
|
||||||
|
|
||||||
// 流水表:任务成功时回补
|
// 流水表:任务成功时回补
|
||||||
private static final String TASK_SUCCESS_BACK_FILL_REMARK = "order.number.generation.successbackfill";
|
private static final String TASK_SUCCESS_BACK_FILL_REMARK = "order.number.generation.successbackfill";
|
||||||
|
|
||||||
|
|
@ -92,6 +96,13 @@ public class AiOrderServiceImpl implements IAiOrderService {
|
||||||
return aiOrderMapper.selectAiOrderList(aiOrder);
|
return aiOrderMapper.selectAiOrderList(aiOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AiOrder> selectAiOrderListForCurrentSubteam(AiOrder aiOrder) {
|
||||||
|
Long deptId = subteamScopeService.currentTeamDeptId();
|
||||||
|
aiOrder.setDeptId(deptId);
|
||||||
|
return selectAiOrderList(aiOrder);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询订单管理列表
|
* 分页查询订单管理列表
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,10 @@ import java.util.List;
|
||||||
import com.ruoyi.ai.domain.AiBalanceChangeRecord;
|
import com.ruoyi.ai.domain.AiBalanceChangeRecord;
|
||||||
import com.ruoyi.ai.domain.AiChargeRefundOrder;
|
import com.ruoyi.ai.domain.AiChargeRefundOrder;
|
||||||
import com.ruoyi.ai.domain.AiGroupBalanceChangeRecord;
|
import com.ruoyi.ai.domain.AiGroupBalanceChangeRecord;
|
||||||
import com.ruoyi.ai.domain.AiOrder;
|
|
||||||
import com.ruoyi.ai.domain.AiVideoReportData;
|
import com.ruoyi.ai.domain.AiVideoReportData;
|
||||||
|
|
||||||
public interface ISubteamDataQueryService {
|
public interface ISubteamDataQueryService {
|
||||||
|
|
||||||
List<AiOrder> selectVideoOrders(AiOrder query);
|
|
||||||
|
|
||||||
List<AiChargeRefundOrder> selectChargeRefundOrders(AiChargeRefundOrder query);
|
List<AiChargeRefundOrder> selectChargeRefundOrders(AiChargeRefundOrder query);
|
||||||
|
|
||||||
List<AiBalanceChangeRecord> selectUserBalanceRecords(AiBalanceChangeRecord query);
|
List<AiBalanceChangeRecord> selectUserBalanceRecords(AiBalanceChangeRecord query);
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,10 @@ import org.springframework.stereotype.Service;
|
||||||
import com.ruoyi.ai.domain.AiBalanceChangeRecord;
|
import com.ruoyi.ai.domain.AiBalanceChangeRecord;
|
||||||
import com.ruoyi.ai.domain.AiChargeRefundOrder;
|
import com.ruoyi.ai.domain.AiChargeRefundOrder;
|
||||||
import com.ruoyi.ai.domain.AiGroupBalanceChangeRecord;
|
import com.ruoyi.ai.domain.AiGroupBalanceChangeRecord;
|
||||||
import com.ruoyi.ai.domain.AiOrder;
|
|
||||||
import com.ruoyi.ai.domain.AiVideoReportData;
|
import com.ruoyi.ai.domain.AiVideoReportData;
|
||||||
import com.ruoyi.ai.mapper.AiBalanceChangeRecordMapper;
|
import com.ruoyi.ai.mapper.AiBalanceChangeRecordMapper;
|
||||||
import com.ruoyi.ai.mapper.AiChargeRefundOrderMapper;
|
import com.ruoyi.ai.mapper.AiChargeRefundOrderMapper;
|
||||||
import com.ruoyi.ai.mapper.AiGroupBalanceChangeRecordMapper;
|
import com.ruoyi.ai.mapper.AiGroupBalanceChangeRecordMapper;
|
||||||
import com.ruoyi.ai.mapper.AiOrderMapper;
|
|
||||||
import com.ruoyi.ai.service.IAiVideoReportDataService;
|
import com.ruoyi.ai.service.IAiVideoReportDataService;
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
import com.ruoyi.system.service.subteam.ISubteamDataQueryService;
|
import com.ruoyi.system.service.subteam.ISubteamDataQueryService;
|
||||||
|
|
@ -23,9 +21,6 @@ public class SubteamDataQueryServiceImpl implements ISubteamDataQueryService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISubteamScopeService subteamScopeService;
|
private ISubteamScopeService subteamScopeService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private AiOrderMapper aiOrderMapper;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AiChargeRefundOrderMapper aiChargeRefundOrderMapper;
|
private AiChargeRefundOrderMapper aiChargeRefundOrderMapper;
|
||||||
|
|
||||||
|
|
@ -38,13 +33,6 @@ public class SubteamDataQueryServiceImpl implements ISubteamDataQueryService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IAiVideoReportDataService aiVideoReportDataService;
|
private IAiVideoReportDataService aiVideoReportDataService;
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<AiOrder> selectVideoOrders(AiOrder query) {
|
|
||||||
Long deptId = subteamScopeService.currentTeamDeptId();
|
|
||||||
query.setDeptId(deptId);
|
|
||||||
return aiOrderMapper.selectAiOrderList(query);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AiChargeRefundOrder> selectChargeRefundOrders(AiChargeRefundOrder query) {
|
public List<AiChargeRefundOrder> selectChargeRefundOrders(AiChargeRefundOrder query) {
|
||||||
Long deptId = subteamScopeService.currentTeamDeptId();
|
Long deptId = subteamScopeService.currentTeamDeptId();
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,8 @@ values('订单记录', @subteamRoot, '3', 'video-order', 'subteam/videoOrder/ind
|
||||||
SELECT @m2 := LAST_INSERT_ID();
|
SELECT @m2 := LAST_INSERT_ID();
|
||||||
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||||
values('订单查询', @m2, '1', '#', '', 1, 0, 'F', '0', '0', 'subteam:videoOrder:query', '#', 'admin', sysdate(), '', null, '');
|
values('订单查询', @m2, '1', '#', '', 1, 0, 'F', '0', '0', 'subteam:videoOrder:query', '#', 'admin', sysdate(), '', null, '');
|
||||||
|
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||||
|
values('订单导出', @m2, '2', '#', '', 1, 0, 'F', '0', '0', 'subteam:videoOrder:export', '#', 'admin', sysdate(), '', null, '');
|
||||||
|
|
||||||
-- 团队充值记录
|
-- 团队充值记录
|
||||||
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue