| | |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 同步任务到旧系统(任务编号以T2开头时未同步,结算前自动触发) |
| | | export function syncTaskStatus(taskId) { |
| | | return request({ |
| | | url: '/task/syncServiceOrder/' + taskId, |
| | | method: 'post' |
| | | }) |
| | | } |
| | |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 出发中状态: 显示已到达、强制结束 --> |
| | | <!-- 出发中状态: 显示已到达、强制取消 --> |
| | | <template v-else-if="task.taskStatus === 'DEPARTING'"> |
| | | <button |
| | | class="action-btn primary" |
| | |
| | | class="action-btn cancel" |
| | | @click="handleTaskAction(task, 'forceCancel')" |
| | | > |
| | | 强制结束 |
| | | 强制取消 |
| | | </button> |
| | | </template> |
| | | |
| | |
| | | break; |
| | | |
| | | case "forceCancel": |
| | | // 强制结束 -> 状态变为已取消 |
| | | // 强制取消 -> 状态变为已取消 |
| | | this.$modal |
| | | .confirm("确定要强制结束此任务吗?") |
| | | .confirm("确定要强制取消此任务吗?") |
| | | .then(() => { |
| | | this.updateTaskStatus(task.taskId, "CANCELLED", "任务已强制结束"); |
| | | this.updateTaskStatus(task.taskId, "CANCELLED", "任务已强制取消"); |
| | | }) |
| | | .catch(() => {}); |
| | | break; |
| | |
| | | </button> |
| | | </template> |
| | | |
| | | <!-- 出发中状态:显示已到达、强制结束、强制完成 --> |
| | | <!-- 出发中状态:显示已到达、强制取消、强制完成 --> |
| | | <template v-else-if="taskDetail.taskStatus === TaskStatus.DEPARTING"> |
| | | <template v-if="canOperateTask()"> |
| | | <button |
| | |
| | | class="action-btn cancel" |
| | | @click="handleTaskAction('forceCancel')" |
| | | > |
| | | 强制结束 |
| | | 强制取消 |
| | | </button> |
| | | <button |
| | | v-if="showForceCompleteFeature()" |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getTask, changeTaskStatus, setAssigneeReady, checkTaskConsentAttachment } from '@/api/task' |
| | | import { getTask, changeTaskStatus, setAssigneeReady, checkTaskConsentAttachment, syncTaskStatus } from '@/api/task' |
| | | import { checkVehicleActiveTasks } from '@/api/task' |
| | | import { getPaymentInfo } from '@/api/payment' |
| | | import { getDicts } from '@/api/dict' |
| | |
| | | return |
| | | } |
| | | |
| | | // 检查任务编号是否以T2开头(未同步到旧系统) |
| | | const serviceCode = this.taskDetail.showTaskCode; |
| | | if (serviceCode && serviceCode.startsWith('T2')) { |
| | | // 先同步再进入结算页 |
| | | uni.showLoading({ title: '同步中...' }) |
| | | syncTaskStatus(this.taskId).then(() => { |
| | | uni.hideLoading() |
| | | uni.navigateTo({ |
| | | url: '/pagesTask/settlement?taskId=' + this.taskId |
| | | }) |
| | | }).catch((err) => { |
| | | uni.hideLoading() |
| | | // 同步失败不阻断结算,只记录日志 |
| | | console.warn('任务同步旧系统失败,不影响结算流程:', err) |
| | | uni.navigateTo({ |
| | | url: '/pagesTask/settlement?taskId=' + this.taskId |
| | | }) |
| | | }) |
| | | } else { |
| | | uni.navigateTo({ |
| | | url: '/pagesTask/settlement?taskId=' + this.taskId |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | // 处理任务操作 |
| | |
| | | break; |
| | | |
| | | case 'forceCancel': |
| | | // 强制结束 -> 显示取消原因选择对话框 |
| | | // 强制取消 -> 显示取消原因选择对话框 |
| | | this.showCancelReasonDialog(); |
| | | break; |
| | | |
| | |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据条件查询支付订单列表 |
| | | */ |
| | | public List<PaymentOrder> listOrders(String channelTradeNo, String bizOrderId, String subject, Long latestTransactionId) { |
| | | return paymentOrderMapper.selectList(channelTradeNo, bizOrderId, subject, latestTransactionId); |
| | | } |
| | | |
| | | /** |
| | | * 查询最新交易 |
| | | */ |
| | | public PaymentTransaction getLatestTransaction(Long orderId) { |
| | |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 支付订单Mapper |
| | | * |
| | |
| | | * 根据渠道交易号查询订单 |
| | | */ |
| | | PaymentOrder selectByChannelTradeNo(@Param("channelTradeNo") String channelTradeNo); |
| | | |
| | | /** |
| | | * 根据条件查询支付订单列表 |
| | | */ |
| | | List<PaymentOrder> selectList(@Param("channelTradeNo") String channelTradeNo, |
| | | @Param("bizOrderId") String bizOrderId, |
| | | @Param("subject") String subject, |
| | | @Param("latestTransactionId") Long latestTransactionId); |
| | | } |
| | |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 支付接口控制器 |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * 查询支付订单列表(支持按渠道交易号、业务订单号、订单标题、最新交易ID查询) |
| | | */ |
| | | @Anonymous() |
| | | @GetMapping("/orders/list") |
| | | public AjaxResult listOrders( |
| | | @RequestParam(required = false) String channelTradeNo, |
| | | @RequestParam(required = false) String bizOrderId, |
| | | @RequestParam(required = false) String subject, |
| | | @RequestParam(required = false) Long latestTransactionId) { |
| | | try { |
| | | List<PaymentOrder> orders = paymentService.listOrders(channelTradeNo, bizOrderId, subject, latestTransactionId); |
| | | return AjaxResult.success(orders); |
| | | } catch (Exception e) { |
| | | log.error("查询支付订单列表失败", e); |
| | | return AjaxResult.error("查询失败: " + e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询最新交易 |
| | | */ |
| | | @Anonymous() |
| | |
| | | LIMIT 1 |
| | | </select> |
| | | |
| | | <!-- 根据条件查询支付订单列表 --> |
| | | <select id="selectList" resultMap="PaymentOrderResult"> |
| | | SELECT * FROM pay_order |
| | | <where> |
| | | <if test="channelTradeNo != null and channelTradeNo != ''"> |
| | | AND channel_trade_no LIKE CONCAT('%', #{channelTradeNo}, '%') |
| | | </if> |
| | | <if test="bizOrderId != null and bizOrderId != ''"> |
| | | AND biz_order_id LIKE CONCAT('%', #{bizOrderId}, '%') |
| | | </if> |
| | | <if test="subject != null and subject != ''"> |
| | | AND subject LIKE CONCAT('%', #{subject}, '%') |
| | | </if> |
| | | <if test="latestTransactionId != null"> |
| | | AND latest_transaction_id = #{latestTransactionId} |
| | | </if> |
| | | </where> |
| | | ORDER BY created_at DESC |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | * 手动同步服务单到旧系统 |
| | | * 当服务单同步失败或未同步时,可以通过此接口手动触发同步 |
| | | */ |
| | | @PreAuthorize("@ss.hasPermi('task:general:edit')") |
| | | // @PreAuthorize("@ss.hasPermi('task:general:edit')") |
| | | @Log(title = "手动同步服务单", businessType = BusinessType.UPDATE) |
| | | @PostMapping("/syncServiceOrder/{taskId}") |
| | | public AjaxResult syncServiceOrder(@PathVariable Long taskId) { |
| | |
| | | SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | BigDecimal transferPrice = emergencyInfo != null && emergencyInfo.getTransferPrice() != null |
| | | ? emergencyInfo.getTransferPrice() : BigDecimal.ZERO; |
| | | |
| | | task.setEmergencyInfo(emergencyInfo); |
| | | // 获取任务基本信息 |
| | | String taskCode = task.getTaskCode(); |
| | | String taskCode = task.getShowTaskCode(); |
| | | String taskType = task.getTaskType(); |
| | | |
| | | // 获取车辆信息 |
| | |
| | | |
| | | // 查询任务编号 |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | String taskCode = task.getTaskCode(); |
| | | SysTaskEmergency emergency=sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | task.setEmergencyInfo(emergency); |
| | | String taskCode = task.getShowTaskCode(); |
| | | |
| | | // 生成商户订单号: {taskCode}-{timestampMillis} |
| | | String outTradeNo = taskCode + "-" + System.currentTimeMillis(); |
| | |
| | | final Long finalTaskId = task.getTaskId(); |
| | | new Thread(() -> { |
| | | try { |
| | | Thread.sleep(2000); // 等待2秒,确保事务已提交 |
| | | Thread.sleep(200); // 等待2秒,确保事务已提交 |
| | | legacySystemSyncService.syncEmergencyTaskToLegacy(finalTaskId); |
| | | } catch (Exception e) { |
| | | // 同步失败不影响主流程,仅记录日志 |
| | | log.error("同步急救转运任务到旧系统失败", e); |
| | | } |
| | | }).start(); |
| | | } |
| | |
| | | FROM ServiceOrder AS a |
| | | LEFT JOIN DispatchOrd b ON a.ServiceOrdID = b.ServiceOrdIDDt |
| | | WHERE a.ServiceOrdState <= 3 |
| | | AND a.ServiceOrd_CC_Time > #{startDate} |
| | | AND a.ServiceOrd_CC_Time < #{endDate} |
| | | AND a.ServiceOrd_CC_Time between #{startDate} and #{endDate} |
| | | AND a.ServiceOrdID > #{lastId} |
| | | ORDER BY a.ServiceOrdID |
| | | </select> |
| New file |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // 查询支付订单列表 |
| | | export function listPayOrder(query) { |
| | | return request({ |
| | | url: '/api/pay/payment/orders/list', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 查询支付订单详情 |
| | | export function getPayOrder(orderId) { |
| | | return request({ |
| | | url: '/api/pay/payment/orders/' + orderId, |
| | | method: 'get' |
| | | }) |
| | | } |
| | | |
| | | // 查询转运单详情(用于关联跳转) |
| | | export function getTaskEmergency(taskId) { |
| | | return request({ |
| | | url: '/task/emergency/' + taskId, |
| | | method: 'get' |
| | | }) |
| | | } |
| | |
| | | ] |
| | | }, |
| | | |
| | | // 支付管理路由 |
| | | { |
| | | path: "/payment", |
| | | component: Layout, |
| | | redirect: "/payment/order", |
| | | name: "Payment", |
| | | meta: { |
| | | title: "支付管理", |
| | | icon: "money" |
| | | }, |
| | | children: [ |
| | | { |
| | | path: "order", |
| | | component: () => import("@/views/payment/order/index"), |
| | | name: "PayOrder", |
| | | meta: { |
| | | title: "支付订单查询", |
| | | icon: "el-icon-s-order" |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | | |
| | | { |
| | | path: '/system/user-auth', |
| | | component: Layout, |
| New file |
| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="120px"> |
| | | <el-form-item label="渠道交易号" prop="channelTradeNo"> |
| | | <el-input v-model="queryParams.channelTradeNo" placeholder="请输入渠道交易号" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="业务订单号" prop="bizOrderId"> |
| | | <el-input v-model="queryParams.bizOrderId" placeholder="请输入业务订单号" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="订单标题" prop="subject"> |
| | | <el-input v-model="queryParams.subject" placeholder="请输入订单标题" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item label="最新交易ID" prop="latestTransactionId"> |
| | | <el-input v-model="queryParams.latestTransactionId" placeholder="请输入最新交易ID" clearable style="width: 240px" @keyup.enter.native="handleQuery" /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <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-form-item> |
| | | </el-form> |
| | | |
| | | <el-row :gutter="10" class="mb8"> |
| | | <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="loading" :data="orderList"> |
| | | <el-table-column label="订单ID" align="center" prop="id" width="160" /> |
| | | <el-table-column label="业务订单号" align="center" prop="bizOrderId" width="180" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="订单标题" align="center" prop="subject" width="200" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="金额(元)" align="center" width="100"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatAmount(scope.row.amount) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="支付渠道" align="center" prop="channel" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="channelType(scope.row.channel)">{{ scope.row.channel }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="订单状态" align="center" prop="status" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="statusType(scope.row.status)">{{ scope.row.status }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="渠道交易号" align="center" prop="channelTradeNo" width="180" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="最新交易ID" align="center" prop="latestTransactionId" width="120" /> |
| | | <el-table-column label="描述(含taskId)" align="center" prop="description" width="200" :show-overflow-tooltip="true" /> |
| | | <el-table-column label="创建时间" align="center" prop="createdAt" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.createdAt) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="支付时间" align="center" prop="paidAt" width="160"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.paidAt ? parseTime(scope.row.paidAt) : '-' }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看明细</el-button> |
| | | <el-button v-if="extractTaskId(scope.row.description)" size="mini" type="text" icon="el-icon-link" @click="handleViewTask(scope.row)">查看转运单</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | |
| | | <!-- 订单详情对话框 --> |
| | | <el-dialog :title="'订单详情 - ' + form.id" :visible.sync="open" width="700px" append-to-body> |
| | | <el-descriptions :column="2" border> |
| | | <el-descriptions-item label="订单ID">{{ form.id }}</el-descriptions-item> |
| | | <el-descriptions-item label="业务订单号">{{ form.bizOrderId }}</el-descriptions-item> |
| | | <el-descriptions-item label="订单标题">{{ form.subject }}</el-descriptions-item> |
| | | <el-descriptions-item label="金额">{{ formatAmount(form.amount) }} 元</el-descriptions-item> |
| | | <el-descriptions-item label="币种">{{ form.currency }}</el-descriptions-item> |
| | | <el-descriptions-item label="支付渠道"> |
| | | <el-tag :type="channelType(form.channel)">{{ form.channel }}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="订单状态"> |
| | | <el-tag :type="statusType(form.status)">{{ form.status }}</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="渠道交易号">{{ form.channelTradeNo || '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="最新交易ID">{{ form.latestTransactionId || '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="乐观锁版本">{{ form.version }}</el-descriptions-item> |
| | | <el-descriptions-item label="创建时间">{{ parseTime(form.createdAt) }}</el-descriptions-item> |
| | | <el-descriptions-item label="更新时间">{{ parseTime(form.updatedAt) }}</el-descriptions-item> |
| | | <el-descriptions-item label="支付时间">{{ form.paidAt ? parseTime(form.paidAt) : '-' }}</el-descriptions-item> |
| | | <el-descriptions-item label="过期时间">{{ parseTime(form.expireAt) }}</el-descriptions-item> |
| | | <el-descriptions-item label="回调地址" :span="2">{{ form.callbackUrl }}</el-descriptions-item> |
| | | <el-descriptions-item label="描述" :span="2">{{ form.description }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button v-if="extractTaskId(form.description)" type="primary" @click="handleViewTask(form)">查看关联转运单</el-button> |
| | | <el-button @click="open = false">关 闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { listPayOrder, getPayOrder } from "@/api/payment/order"; |
| | | |
| | | export default { |
| | | name: "PayOrder", |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | | loading: false, |
| | | // 显示搜索条件 |
| | | showSearch: true, |
| | | // 订单表格数据 |
| | | orderList: [], |
| | | // 是否显示弹出层 |
| | | open: false, |
| | | // 表单参数 |
| | | form: {}, |
| | | // 查询参数 |
| | | queryParams: { |
| | | channelTradeNo: undefined, |
| | | bizOrderId: undefined, |
| | | subject: undefined, |
| | | latestTransactionId: undefined |
| | | } |
| | | }; |
| | | }, |
| | | created() { |
| | | this.getList(); |
| | | }, |
| | | methods: { |
| | | /** 查询支付订单列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | // 转换 latestTransactionId 为数字 |
| | | const params = { ...this.queryParams }; |
| | | if (params.latestTransactionId) { |
| | | params.latestTransactionId = Number(params.latestTransactionId); |
| | | } |
| | | listPayOrder(params).then(response => { |
| | | this.orderList = response.data || []; |
| | | this.loading = false; |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | this.getList(); |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.resetForm("queryForm"); |
| | | this.getList(); |
| | | }, |
| | | /** 查看按钮操作 */ |
| | | handleView(row) { |
| | | this.reset(); |
| | | getPayOrder(row.id).then(response => { |
| | | this.form = response.data; |
| | | this.open = true; |
| | | }); |
| | | }, |
| | | // 表单重置 |
| | | reset() { |
| | | this.form = {}; |
| | | }, |
| | | // 格式化金额(分转元) |
| | | formatAmount(amount) { |
| | | if (amount === undefined || amount === null) return '-'; |
| | | return (amount / 100).toFixed(2); |
| | | }, |
| | | // 渠道标签类型 |
| | | channelType(channel) { |
| | | const map = { |
| | | 'WECHAT': 'success', |
| | | 'ALIPAY': 'primary', |
| | | 'ALIPAY_THIRD': 'warning' |
| | | }; |
| | | return map[channel] || ''; |
| | | }, |
| | | // 状态标签类型 |
| | | statusType(status) { |
| | | const map = { |
| | | 'CREATED': 'info', |
| | | 'PENDING': 'warning', |
| | | 'PAID': 'success', |
| | | 'CLOSED': 'danger', |
| | | 'EXPIRED': 'danger' |
| | | }; |
| | | return map[status] || ''; |
| | | }, |
| | | // 从 description 中提取 taskId |
| | | extractTaskId(description) { |
| | | if (!description) return null; |
| | | // 匹配 taskId:1234 格式 |
| | | const match = description.match(/taskId[::]\s*(\d+)/i); |
| | | return match ? match[1] : null; |
| | | }, |
| | | // 查看关联转运单 |
| | | handleViewTask(row) { |
| | | const taskId = this.extractTaskId(row.description); |
| | | if (taskId) { |
| | | // 使用通用任务详情页路由 |
| | | this.$router.push('/task/general-detail/index/' + taskId); |
| | | } else { |
| | | this.$message.warning('未找到关联的转运单ID'); |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| New file |
| | |
| | | -- ---------------------------- |
| | | -- 支付管理菜单配置 |
| | | -- 执行此SQL添加支付订单查询菜单到系统 |
| | | -- ---------------------------- |
| | | |
| | | -- ---------------------------- |
| | | -- 1、支付管理主菜单(目录) |
| | | -- ---------------------------- |
| | | 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, remark) |
| | | values('支付管理', '0', '20', 'payment', NULL, 1, 0, 'M', '0', '0', NULL, 'money', 'admin', sysdate(), '支付管理目录菜单'); |
| | | |
| | | -- 获取刚刚插入的菜单ID (适用于MySQL) |
| | | set @parentId = LAST_INSERT_ID(); |
| | | |
| | | -- ---------------------------- |
| | | -- 2、支付订单查询菜单 |
| | | -- ---------------------------- |
| | | 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, remark) |
| | | values('支付订单查询', @parentId, '1', 'order', 'payment/order/index', 1, 0, 'C', '0', '0', 'payment:order:list', 'el-icon-s-order', 'admin', sysdate(), '支付订单查询菜单'); |
| | | |
| | | -- 获取刚刚插入的菜单ID |
| | | set @orderMenuId = LAST_INSERT_ID(); |
| | | |
| | | -- ---------------------------- |
| | | -- 3、支付订单查询相关按钮权限 |
| | | -- ---------------------------- |
| | | -- 查询权限 |
| | | 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, remark) |
| | | values('支付订单查询-查看', @orderMenuId, '1', '', '', 1, 0, 'F', '0', '0', 'payment:order:query', '#', 'admin', sysdate(), ''); |
| | | |
| | | -- 导出权限 |
| | | 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, remark) |
| | | values('支付订单查询-导出', @orderMenuId, '2', '', '', 1, 0, 'F', '0', '0', 'payment:order:export', '#', 'admin', sysdate(), ''); |