Compare commits
No commits in common. "5583bb0f1181743c7102c0e2f626e7a34d57293b" and "5ead2c13b24d4e93dd7ebe6dd85b7e628c9490a7" have entirely different histories.
5583bb0f11
...
5ead2c13b2
|
|
@ -88,35 +88,3 @@ export function applyRedRush(data) {
|
|||
needLoading: true
|
||||
})
|
||||
}
|
||||
// 查询收款审批列表
|
||||
export function listReceiptApprove(query) {
|
||||
return request({
|
||||
url: '/finance/receipt/approve/list',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询已审批收款列表
|
||||
export function listReceiptApproved(query) {
|
||||
return request({
|
||||
url: '/finance/receipt/approved/list',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询收款单详细
|
||||
export function getReceiptDetail(id) {
|
||||
return request({
|
||||
url: '/finance/receipt/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,8 +39,7 @@ export function mergeAndInitiateReceipt(data) {
|
|||
return request({
|
||||
url: '/finance/receivable/mergeAndInitiateReceipt',
|
||||
method: 'post',
|
||||
data: data,
|
||||
needLoading:true
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -49,8 +48,7 @@ export function mergeAndInitiateInvoice(data) {
|
|||
return request({
|
||||
url: '/finance/receivable/mergeAndInitiateInvoice',
|
||||
method: 'post',
|
||||
data: data,
|
||||
needLoading:true
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,8 @@ import {tansParams} from "@/utils/ruoyi"
|
|||
export function listReceive(query) {
|
||||
return request({
|
||||
url: '/finance/receipt/list',
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
data: query
|
||||
method: 'get',
|
||||
data: tansParams(query)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -118,13 +115,3 @@ export function manualReceiptWriteOff(data) {
|
|||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 撤销收款单
|
||||
export function revokeReceipt(id) {
|
||||
return request({
|
||||
url: '/finance/receipt/revoke',
|
||||
method: 'post',
|
||||
data: {id: id},
|
||||
needLoading: true
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,16 +109,6 @@ export const constantRoutes = [
|
|||
component: () => import('@/views/approve/finance/invoiceReceipt/approved/index'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'receiptLog',
|
||||
component: () => import('@/views/approve/finance/receipt/approved/index.vue'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: 'receiptRefoundLog',
|
||||
component: () => import('@/views/approve/finance/receiptRefound/approved/index.vue'),
|
||||
hidden: true
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,213 +0,0 @@
|
|||
<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="receiptBillCode">
|
||||
<el-input v-model="queryParams.receiptBillCode" placeholder="请输入收款编号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商" prop="partnerName">
|
||||
<el-input v-model="queryParams.partnerName" placeholder="请输入进货商" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table v-loading="loading" :data="receiptList">
|
||||
<el-table-column label="序号" type="index" width="50" align="center" />
|
||||
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
||||
<el-table-column label="客户" align="center" prop="partnerName" />
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.applyTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
|
||||
|
||||
<!-- 详情对话框 -->
|
||||
<el-dialog title="收款单详情" :visible.sync="detailDialogVisible" width="80%" append-to-body>
|
||||
<div v-loading="detailLoading" style="max-height: 70vh; overflow-y: auto; padding: 20px;">
|
||||
<div style="display: flex;flex-direction: row-reverse; margin-bottom: 10px;">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
@click="exportPDF"
|
||||
:loading="pdfExporting"
|
||||
>导出PDF</el-button>
|
||||
</div>
|
||||
<div class="approve-container" :class="{ 'exporting-pdf': pdfExporting }">
|
||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||
<receipt-detail :data="form"></receipt-detail>
|
||||
<template #footer>
|
||||
<span>收款编号: {{ form.receiptBillCode }}</span>
|
||||
</template>
|
||||
</ApproveLayout>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">流转意见</el-divider>
|
||||
<div class="process-container">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(log, index) in approveLogs" :key="index" :timestamp="log.approveTime" placement="top">
|
||||
<el-card>
|
||||
<h4>{{ log.approveOpinion }}</h4>
|
||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<div v-if="!approveLogs || approveLogs.length === 0">暂无流转过程数据。</div>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="detailDialogVisible = false">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listReceiptApproved, getReceiptDetail } from "@/api/finance/receipt";
|
||||
import { listCompletedFlows } from "@/api/flow";
|
||||
import ReceiptDetail from "../components/ReceiptDetail";
|
||||
import ApproveLayout from "@/views/approve/ApproveLayout";
|
||||
import { exportElementToPDF } from "@/views/approve/finance/pdfUtils";
|
||||
|
||||
export default {
|
||||
name: "ReceiptApproved",
|
||||
components: { ReceiptDetail, ApproveLayout },
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
receiptList: [],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
receiptBillCode: null,
|
||||
partnerName: null,
|
||||
projectName: null,
|
||||
processKey: 'finance_receipt_approve',
|
||||
},
|
||||
dateRange: [],
|
||||
detailDialogVisible: false,
|
||||
detailLoading: false,
|
||||
form: {},
|
||||
approveLogs: [],
|
||||
currentReceiptId: null,
|
||||
pdfExporting: false
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listReceiptApproved(this.addDateRange(this.queryParams, this.dateRange, 'ApplyTime')).then(response => {
|
||||
this.receiptList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
handleView(row) {
|
||||
this.form = {};
|
||||
this.approveLogs = [];
|
||||
this.currentReceiptId = row.id;
|
||||
this.detailLoading = true;
|
||||
this.detailDialogVisible = true;
|
||||
|
||||
getReceiptDetail(this.currentReceiptId).then(response => {
|
||||
this.form = response.data;
|
||||
this.loadApproveHistory(this.form.receiptBillCode);
|
||||
this.detailLoading = false;
|
||||
}).catch(() => {
|
||||
this.detailLoading = false;
|
||||
});
|
||||
},
|
||||
loadApproveHistory(businessKey) {
|
||||
if (businessKey) {
|
||||
listCompletedFlows({ businessKey: businessKey }).then(response => {
|
||||
this.approveLogs = response.data;
|
||||
});
|
||||
}
|
||||
},
|
||||
getStatusText(status) {
|
||||
const map = { '1': '提交审批', '2': '驳回', '3': '批准' };
|
||||
return map[status] || '提交审批';
|
||||
},
|
||||
async exportPDF() {
|
||||
this.pdfExporting = true;
|
||||
try {
|
||||
const element = this.$refs.approveLayout.$el;
|
||||
const fileName = `收款单-${this.form.receiptBillCode || ''}.pdf`;
|
||||
await exportElementToPDF(element, fileName);
|
||||
this.$modal.msgSuccess('PDF导出成功');
|
||||
} catch (error) {
|
||||
console.error('PDF导出失败:', error);
|
||||
this.$modal.msgError('PDF导出失败,请稍后重试');
|
||||
} finally {
|
||||
this.pdfExporting = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.process-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* 导出PDF时的特殊样式 */
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--primary,
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--text {
|
||||
display: none;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__inner,
|
||||
.approve-container.exporting-pdf ::v-deep .el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background-color: transparent !important;
|
||||
resize: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__suffix {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
<template>
|
||||
<div class="receipt-detail">
|
||||
<el-descriptions title="收款单信息" :column="3" border>
|
||||
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="收款单类型">-->
|
||||
<!-- <dict-tag :options="dict.type.receipt_bill_type" :value="data.receiptBillType"/>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
||||
<el-descriptions-item label="税额(元)">{{ data.taxAmount }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
<dict-tag :options="dict.type.payment_method" :value="data.receiptMethod"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="银行账号">{{ data.receiptBankNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="账户名称">{{ data.receiptAccountName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="银行开户行">{{ data.receiptBankOpenAddress }}</el-descriptions-item>
|
||||
<el-descriptions-item label="银行行号">{{ data.bankNumber }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="备注" :span="3">{{ data.remark }}</el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
|
||||
<div class="section" style="margin-top: 20px;" v-show="data.detailDTOList && data.detailDTOList.length>0">
|
||||
<div class="el-descriptions__title">应收单列表</div>
|
||||
<el-table :data="data.detailDTOList" border style="width: 100%; margin-top: 10px;">
|
||||
<el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
|
||||
<el-table-column prop="receivableBillCode" label="销售-应收单编号" align="center"></el-table-column>
|
||||
<el-table-column prop="projectName" label="项目名称" align="center"></el-table-column>
|
||||
<el-table-column prop="productType" label="产品类型" align="center">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.product_type" :value="scope.row.productType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="totalPriceWithTax" label="含税总价" align="center"></el-table-column>
|
||||
<el-table-column prop="receiptAmount" label="本次收款金额" align="center"></el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<div class="section" style="margin-top: 20px;" v-if="attachments && attachments.length > 0">
|
||||
<div class="el-descriptions__title">附件信息</div>
|
||||
<el-table :data="attachments" border style="width: 100%; margin-top: 10px;">
|
||||
<el-table-column prop="fileName" label="附件名称" align="center"></el-table-column>
|
||||
<el-table-column prop="createUserName" label="上传人" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="上传时间" align="center"></el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handlePreview(scope.row)">预览</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-download" @click="handleDownload(scope.row)">下载</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="pdfPreviewVisible" width="80%" append-to-body top="5vh" title="PDF预览">
|
||||
<iframe :src="currentPdfUrl" width="100%" height="600px" frameborder="0"></iframe>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="imagePreviewVisible" width="60%" append-to-body top="5vh" title="图片预览">
|
||||
<img :src="currentImageUrl" style="width: 100%;" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import request from '@/utils/request';
|
||||
|
||||
export default {
|
||||
name: "ReceiptDetail",
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
dicts: ['receipt_bill_type', 'product_type','payment_method'],
|
||||
data() {
|
||||
return {
|
||||
attachments: [],
|
||||
pdfPreviewVisible: false,
|
||||
currentPdfUrl: '',
|
||||
imagePreviewVisible: false,
|
||||
currentImageUrl: ''
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
|
||||
},
|
||||
methods: {
|
||||
|
||||
isPdf(filePath) {
|
||||
return filePath && filePath.toLowerCase().endsWith('.pdf');
|
||||
},
|
||||
getImageUrl(resource) {
|
||||
return process.env.VUE_APP_BASE_API + "/common/download/resource?resource=" + resource;
|
||||
},
|
||||
handlePreview(row) {
|
||||
if (this.isPdf(row.filePath)) {
|
||||
// PDF Preview logic
|
||||
request({
|
||||
url: '/common/download/resource',
|
||||
method: 'get',
|
||||
params: { resource: row.filePath },
|
||||
responseType: 'blob'
|
||||
}).then(res => {
|
||||
const blob = new Blob([res.data], { type: 'application/pdf' });
|
||||
this.currentPdfUrl = URL.createObjectURL(blob);
|
||||
this.pdfPreviewVisible = true;
|
||||
});
|
||||
} else {
|
||||
// Image Preview
|
||||
this.currentImageUrl = this.getImageUrl(row.filePath);
|
||||
this.imagePreviewVisible = true;
|
||||
}
|
||||
},
|
||||
handleDownload(row) {
|
||||
const link = document.createElement('a');
|
||||
link.href = this.getImageUrl(row.filePath);
|
||||
link.download = row.fileName || 'attachment';
|
||||
link.style.display = 'none';
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.receipt-detail {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,300 +0,0 @@
|
|||
<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="receiptBillCode">
|
||||
<el-input v-model="queryParams.receiptBillCode" placeholder="请输入收款编号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商" prop="partnerName">
|
||||
<el-input v-model="queryParams.partnerName" placeholder="请输入进货商名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" 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">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
size="mini"
|
||||
@click="toApproved()"
|
||||
>审批历史</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="receiptList">
|
||||
<el-table-column label="序号" type="index" width="50" align="center" />
|
||||
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
||||
<el-table-column label="进货商" align="center" prop="partnerName" />
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.applyTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleApprove(scope.row)">审批</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
|
||||
|
||||
<!-- 审批详情主对话框 -->
|
||||
<el-dialog title="收款单审批" :visible.sync="detailDialogVisible" width="80%" append-to-body>
|
||||
<div v-loading="detailLoading" style="max-height: 70vh; overflow-y: auto; padding: 20px;">
|
||||
<div style="display: flex;flex-direction: row-reverse; margin-bottom: 10px;">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
@click="exportPDF"
|
||||
:loading="pdfExporting"
|
||||
>导出PDF</el-button>
|
||||
</div>
|
||||
<div class="approve-container" :class="{ 'exporting-pdf': pdfExporting }">
|
||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||
<receipt-detail :data="form"></receipt-detail>
|
||||
<template #footer>
|
||||
<span>{{ form.receiptBillCode }}</span>
|
||||
</template>
|
||||
</ApproveLayout>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">流转意见</el-divider>
|
||||
<div class="process-container">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(log, index) in approveLogs" :key="index" :timestamp="log.approveTime" placement="top">
|
||||
<el-card>
|
||||
<h4>{{ log.approveOpinion }}</h4>
|
||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<div v-if="!approveLogs || approveLogs.length === 0">暂无流转过程数据。</div>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="openOpinionDialog('approve')">同意</el-button>
|
||||
<el-button type="danger" @click="openOpinionDialog('reject')">驳回</el-button>
|
||||
<el-button @click="detailDialogVisible = false">取 消</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 审批意见对话框 -->
|
||||
<el-dialog :title="confirmDialogTitle" :visible.sync="opinionDialogVisible" width="30%" append-to-body>
|
||||
<el-form ref="opinionForm" :model="opinionForm" :rules="opinionRules" label-width="100px">
|
||||
<el-form-item label="审批意见" prop="approveOpinion">
|
||||
<el-input v-model="opinionForm.approveOpinion" type="textarea" :rows="4" placeholder="请输入审批意见"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="opinionDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="showConfirmDialog()">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listReceiptApprove, getReceiptDetail } from "@/api/finance/receipt";
|
||||
import { approveTask, listCompletedFlows } from "@/api/flow";
|
||||
import ReceiptDetail from "./components/ReceiptDetail";
|
||||
import ApproveLayout from "@/views/approve/ApproveLayout";
|
||||
import { exportElementToPDF } from "@/views/approve/finance/pdfUtils";
|
||||
|
||||
export default {
|
||||
name: "ReceiptApprove",
|
||||
components: { ReceiptDetail, ApproveLayout },
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
receiptList: [],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
receiptBillCode: null,
|
||||
partnerName: null,
|
||||
projectName: null,
|
||||
processKey: 'finance_receipt_approve',
|
||||
},
|
||||
dateRange: [],
|
||||
detailDialogVisible: false,
|
||||
detailLoading: false,
|
||||
form: {},
|
||||
approveLogs: [],
|
||||
opinionDialogVisible: false,
|
||||
confirmDialogTitle: '',
|
||||
currentApproveType: '',
|
||||
opinionForm: {
|
||||
approveOpinion: ''
|
||||
},
|
||||
opinionRules: {
|
||||
approveOpinion: [{ required: true, message: '审批意见不能为空', trigger: 'blur' }],
|
||||
},
|
||||
processKey: 'finance_receipt_approve',
|
||||
taskId: null,
|
||||
currentReceiptId: null,
|
||||
pdfExporting: false
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listReceiptApprove(this.addDateRange(this.queryParams, this.dateRange, 'ApplyTime')).then(response => {
|
||||
this.receiptList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
toApproved() {
|
||||
this.$router.push( '/approve/receiptLog' )
|
||||
},
|
||||
handleApprove(row) {
|
||||
this.resetDetailForm();
|
||||
this.currentReceiptId = row.id;
|
||||
this.taskId = row.taskId;
|
||||
this.detailLoading = true;
|
||||
this.detailDialogVisible = true;
|
||||
|
||||
getReceiptDetail(this.currentReceiptId).then(response => {
|
||||
this.form = response.data;
|
||||
this.loadApproveHistory(this.form.receiptBillCode);
|
||||
this.detailLoading = false;
|
||||
}).catch(() => {
|
||||
this.detailLoading = false;
|
||||
});
|
||||
},
|
||||
resetDetailForm() {
|
||||
this.form = {};
|
||||
this.approveLogs = [];
|
||||
this.opinionForm.approveOpinion = '';
|
||||
},
|
||||
loadApproveHistory(businessKey) {
|
||||
if (businessKey) {
|
||||
let keys = [];
|
||||
if(this.processKey) keys.push(this.processKey);
|
||||
|
||||
listCompletedFlows({ businessKey: businessKey, processKeyList: keys }).then(response => {
|
||||
this.approveLogs = response.data;
|
||||
});
|
||||
}
|
||||
},
|
||||
openOpinionDialog(type) {
|
||||
this.currentApproveType = type;
|
||||
this.confirmDialogTitle = type === 'approve' ? '同意审批' : '驳回审批';
|
||||
this.opinionDialogVisible = true;
|
||||
this.opinionForm.approveOpinion = '';
|
||||
this.$nextTick(() => {
|
||||
if(this.$refs.opinionForm) this.$refs.opinionForm.clearValidate();
|
||||
});
|
||||
},
|
||||
showConfirmDialog() {
|
||||
this.$refs.opinionForm.validate(valid => {
|
||||
if (valid) {
|
||||
this.opinionDialogVisible = false;
|
||||
this.submitApproval();
|
||||
}
|
||||
});
|
||||
},
|
||||
submitApproval() {
|
||||
const approveBtn = this.currentApproveType === 'approve' ? 1 : 0;
|
||||
const params = {
|
||||
businessKey: this.form.receiptBillCode,
|
||||
processKey: this.processKey,
|
||||
taskId: this.taskId,
|
||||
variables: {
|
||||
comment: this.opinionForm.approveOpinion,
|
||||
approveBtn: approveBtn
|
||||
}
|
||||
};
|
||||
|
||||
approveTask(params).then(() => {
|
||||
this.$modal.msgSuccess(this.confirmDialogTitle + "成功");
|
||||
this.detailDialogVisible = false;
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
getStatusText(status) {
|
||||
if (!status) {
|
||||
return '提交审批'
|
||||
}
|
||||
const map = { '1': '提交审批', '2': '驳回', '3': '批准' };
|
||||
return map[status] || '提交审批';
|
||||
},
|
||||
async exportPDF() {
|
||||
this.pdfExporting = true;
|
||||
try {
|
||||
const element = this.$refs.approveLayout.$el;
|
||||
const fileName = `收款单-${this.form.receiptBillCode || ''}.pdf`;
|
||||
await exportElementToPDF(element, fileName);
|
||||
this.$modal.msgSuccess('PDF导出成功');
|
||||
} catch (error) {
|
||||
console.error('PDF导出失败:', error);
|
||||
this.$modal.msgError('PDF导出失败,请稍后重试');
|
||||
} finally {
|
||||
this.pdfExporting = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.process-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* 导出PDF时的特殊样式 */
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--primary,
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--text {
|
||||
display: none;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__inner,
|
||||
.approve-container.exporting-pdf ::v-deep .el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background-color: transparent !important;
|
||||
resize: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__suffix {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,213 +0,0 @@
|
|||
<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="receiptBillCode">
|
||||
<el-input v-model="queryParams.receiptBillCode" placeholder="请输入收款编号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商" prop="partnerName">
|
||||
<el-input v-model="queryParams.partnerName" placeholder="请输入进货商" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table v-loading="loading" :data="receiptList">
|
||||
<el-table-column label="序号" type="index" width="50" align="center" />
|
||||
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
||||
<el-table-column label="客户" align="center" prop="partnerName" />
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.applyTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">详情</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
|
||||
|
||||
<!-- 详情对话框 -->
|
||||
<el-dialog title="收款单详情" :visible.sync="detailDialogVisible" width="80%" append-to-body>
|
||||
<div v-loading="detailLoading" style="max-height: 70vh; overflow-y: auto; padding: 20px;">
|
||||
<div style="display: flex;flex-direction: row-reverse; margin-bottom: 10px;">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
@click="exportPDF"
|
||||
:loading="pdfExporting"
|
||||
>导出PDF</el-button>
|
||||
</div>
|
||||
<div class="approve-container" :class="{ 'exporting-pdf': pdfExporting }">
|
||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||
<receipt-detail :data="form"></receipt-detail>
|
||||
<template #footer>
|
||||
<span>收款编号: {{ form.receiptBillCode }}</span>
|
||||
</template>
|
||||
</ApproveLayout>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">流转意见</el-divider>
|
||||
<div class="process-container">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(log, index) in approveLogs" :key="index" :timestamp="log.approveTime" placement="top">
|
||||
<el-card>
|
||||
<h4>{{ log.approveOpinion }}</h4>
|
||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<div v-if="!approveLogs || approveLogs.length === 0">暂无流转过程数据。</div>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="detailDialogVisible = false">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listReceiptApproved, getReceiptDetail } from "@/api/finance/receipt";
|
||||
import { listCompletedFlows } from "@/api/flow";
|
||||
import ReceiptDetail from "../components/ReceiptDetail";
|
||||
import ApproveLayout from "@/views/approve/ApproveLayout";
|
||||
import { exportElementToPDF } from "@/views/approve/finance/pdfUtils";
|
||||
|
||||
export default {
|
||||
name: "ReceiptRefoundApproved",
|
||||
components: { ReceiptDetail, ApproveLayout },
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
receiptList: [],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
receiptBillCode: null,
|
||||
partnerName: null,
|
||||
projectName: null,
|
||||
processKey: 'finance_receipt_refound',
|
||||
},
|
||||
dateRange: [],
|
||||
detailDialogVisible: false,
|
||||
detailLoading: false,
|
||||
form: {},
|
||||
approveLogs: [],
|
||||
currentReceiptId: null,
|
||||
pdfExporting: false
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listReceiptApproved(this.addDateRange(this.queryParams, this.dateRange, 'ApplyTime')).then(response => {
|
||||
this.receiptList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
handleView(row) {
|
||||
this.form = {};
|
||||
this.approveLogs = [];
|
||||
this.currentReceiptId = row.id;
|
||||
this.detailLoading = true;
|
||||
this.detailDialogVisible = true;
|
||||
|
||||
getReceiptDetail(this.currentReceiptId).then(response => {
|
||||
this.form = response.data;
|
||||
this.loadApproveHistory(this.form.receiptBillCode);
|
||||
this.detailLoading = false;
|
||||
}).catch(() => {
|
||||
this.detailLoading = false;
|
||||
});
|
||||
},
|
||||
loadApproveHistory(businessKey) {
|
||||
if (businessKey) {
|
||||
listCompletedFlows({ businessKey: businessKey }).then(response => {
|
||||
this.approveLogs = response.data;
|
||||
});
|
||||
}
|
||||
},
|
||||
getStatusText(status) {
|
||||
const map = { '1': '提交审批', '2': '驳回', '3': '批准' };
|
||||
return map[status] || '提交审批';
|
||||
},
|
||||
async exportPDF() {
|
||||
this.pdfExporting = true;
|
||||
try {
|
||||
const element = this.$refs.approveLayout.$el;
|
||||
const fileName = `收款单-${this.form.receiptBillCode || ''}.pdf`;
|
||||
await exportElementToPDF(element, fileName);
|
||||
this.$modal.msgSuccess('PDF导出成功');
|
||||
} catch (error) {
|
||||
console.error('PDF导出失败:', error);
|
||||
this.$modal.msgError('PDF导出失败,请稍后重试');
|
||||
} finally {
|
||||
this.pdfExporting = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.process-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* 导出PDF时的特殊样式 */
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--primary,
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--text {
|
||||
display: none;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__inner,
|
||||
.approve-container.exporting-pdf ::v-deep .el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background-color: transparent !important;
|
||||
resize: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__suffix {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,133 +0,0 @@
|
|||
<template>
|
||||
<div class="receipt-detail">
|
||||
<el-descriptions title="收款单信息" :column="3" border>
|
||||
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
||||
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="收款单类型">-->
|
||||
<!-- <dict-tag :options="dict.type.receipt_bill_type" :value="data.receiptBillType"/>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
||||
<el-descriptions-item label="税额(元)">{{ data.taxAmount }}</el-descriptions-item>
|
||||
<el-descriptions-item label="支付方式">
|
||||
<dict-tag :options="dict.type.payment_method" :value="data.receiptMethod"/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="银行账号">{{ data.receiptBankNumber }}</el-descriptions-item>
|
||||
<el-descriptions-item label="账户名称">{{ data.receiptAccountName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="银行开户行">{{ data.receiptBankOpenAddress }}</el-descriptions-item>
|
||||
<el-descriptions-item label="银行行号">{{ data.bankNumber }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="备注" :span="3">{{ data.remark }}</el-descriptions-item>-->
|
||||
</el-descriptions>
|
||||
|
||||
<div class="section" style="margin-top: 20px;" v-show="data.detailDTOList && data.detailDTOList.length>0">
|
||||
<div class="el-descriptions__title">应收单列表</div>
|
||||
<el-table :data="data.detailDTOList" border style="width: 100%; margin-top: 10px;">
|
||||
<el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
|
||||
<el-table-column prop="receivableBillCode" label="销售-应收单编号" align="center"></el-table-column>
|
||||
<el-table-column prop="projectName" label="项目名称" align="center"></el-table-column>
|
||||
<el-table-column prop="productType" label="产品类型" align="center">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.product_type" :value="scope.row.productType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="totalPriceWithTax" label="含税总价" align="center"></el-table-column>
|
||||
<el-table-column prop="receiptAmount" label="本次收款金额" align="center"></el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<div class="section" style="margin-top: 20px;" v-if="attachments && attachments.length > 0">
|
||||
<div class="el-descriptions__title">附件信息</div>
|
||||
<el-table :data="attachments" border style="width: 100%; margin-top: 10px;">
|
||||
<el-table-column prop="fileName" label="附件名称" align="center"></el-table-column>
|
||||
<el-table-column prop="createUserName" label="上传人" align="center"></el-table-column>
|
||||
<el-table-column prop="createTime" label="上传时间" align="center"></el-table-column>
|
||||
<el-table-column label="操作" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-view" @click="handlePreview(scope.row)">预览</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-download" @click="handleDownload(scope.row)">下载</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<el-dialog :visible.sync="pdfPreviewVisible" width="80%" append-to-body top="5vh" title="PDF预览">
|
||||
<iframe :src="currentPdfUrl" width="100%" height="600px" frameborder="0"></iframe>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="imagePreviewVisible" width="60%" append-to-body top="5vh" title="图片预览">
|
||||
<img :src="currentImageUrl" style="width: 100%;" />
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import request from '@/utils/request';
|
||||
|
||||
export default {
|
||||
name: "ReceiptRefoundDetail",
|
||||
props: {
|
||||
data: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
dicts: ['receipt_bill_type', 'product_type','payment_method'],
|
||||
data() {
|
||||
return {
|
||||
attachments: [],
|
||||
pdfPreviewVisible: false,
|
||||
currentPdfUrl: '',
|
||||
imagePreviewVisible: false,
|
||||
currentImageUrl: ''
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
|
||||
},
|
||||
methods: {
|
||||
|
||||
isPdf(filePath) {
|
||||
return filePath && filePath.toLowerCase().endsWith('.pdf');
|
||||
},
|
||||
getImageUrl(resource) {
|
||||
return process.env.VUE_APP_BASE_API + "/common/download/resource?resource=" + resource;
|
||||
},
|
||||
handlePreview(row) {
|
||||
if (this.isPdf(row.filePath)) {
|
||||
// PDF Preview logic
|
||||
request({
|
||||
url: '/common/download/resource',
|
||||
method: 'get',
|
||||
params: { resource: row.filePath },
|
||||
responseType: 'blob'
|
||||
}).then(res => {
|
||||
const blob = new Blob([res.data], { type: 'application/pdf' });
|
||||
this.currentPdfUrl = URL.createObjectURL(blob);
|
||||
this.pdfPreviewVisible = true;
|
||||
});
|
||||
} else {
|
||||
// Image Preview
|
||||
this.currentImageUrl = this.getImageUrl(row.filePath);
|
||||
this.imagePreviewVisible = true;
|
||||
}
|
||||
},
|
||||
handleDownload(row) {
|
||||
const link = document.createElement('a');
|
||||
link.href = this.getImageUrl(row.filePath);
|
||||
link.download = row.fileName || 'attachment';
|
||||
link.style.display = 'none';
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.receipt-detail {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,300 +0,0 @@
|
|||
<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="receiptBillCode">
|
||||
<el-input v-model="queryParams.receiptBillCode" placeholder="请输入收款编号" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商" prop="partnerName">
|
||||
<el-input v-model="queryParams.partnerName" placeholder="请输入进货商名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="提交日期">
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" 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">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
size="mini"
|
||||
@click="toApproved()"
|
||||
>审批历史</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="receiptList">
|
||||
<el-table-column label="序号" type="index" width="50" align="center" />
|
||||
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
||||
<el-table-column label="进货商" align="center" prop="partnerName" />
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.applyTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleApprove(scope.row)">审批</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList"/>
|
||||
|
||||
<!-- 审批详情主对话框 -->
|
||||
<el-dialog title="收款单审批" :visible.sync="detailDialogVisible" width="80%" append-to-body>
|
||||
<div v-loading="detailLoading" style="max-height: 70vh; overflow-y: auto; padding: 20px;">
|
||||
<div style="display: flex;flex-direction: row-reverse; margin-bottom: 10px;">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
icon="el-icon-download"
|
||||
@click="exportPDF"
|
||||
:loading="pdfExporting"
|
||||
>导出PDF</el-button>
|
||||
</div>
|
||||
<div class="approve-container" :class="{ 'exporting-pdf': pdfExporting }">
|
||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||
<receipt-detail :data="form"></receipt-detail>
|
||||
<template #footer>
|
||||
<span>{{ form.receiptBillCode }}</span>
|
||||
</template>
|
||||
</ApproveLayout>
|
||||
</div>
|
||||
|
||||
<el-divider content-position="left">流转意见</el-divider>
|
||||
<div class="process-container">
|
||||
<el-timeline>
|
||||
<el-timeline-item v-for="(log, index) in approveLogs" :key="index" :timestamp="log.approveTime" placement="top">
|
||||
<el-card>
|
||||
<h4>{{ log.approveOpinion }}</h4>
|
||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<div v-if="!approveLogs || approveLogs.length === 0">暂无流转过程数据。</div>
|
||||
</div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="openOpinionDialog('approve')">同意</el-button>
|
||||
<el-button type="danger" @click="openOpinionDialog('reject')">驳回</el-button>
|
||||
<el-button @click="detailDialogVisible = false">取 消</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 审批意见对话框 -->
|
||||
<el-dialog :title="confirmDialogTitle" :visible.sync="opinionDialogVisible" width="30%" append-to-body>
|
||||
<el-form ref="opinionForm" :model="opinionForm" :rules="opinionRules" label-width="100px">
|
||||
<el-form-item label="审批意见" prop="approveOpinion">
|
||||
<el-input v-model="opinionForm.approveOpinion" type="textarea" :rows="4" placeholder="请输入审批意见"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="opinionDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="showConfirmDialog()">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listReceiptApprove, getReceiptDetail } from "@/api/finance/receipt";
|
||||
import { approveTask, listCompletedFlows } from "@/api/flow";
|
||||
import ReceiptDetail from "./components/ReceiptDetail";
|
||||
import ApproveLayout from "@/views/approve/ApproveLayout";
|
||||
import { exportElementToPDF } from "@/views/approve/finance/pdfUtils";
|
||||
|
||||
export default {
|
||||
name: "ReceiptRefoundApprove",
|
||||
components: { ReceiptDetail, ApproveLayout },
|
||||
data() {
|
||||
return {
|
||||
loading: true,
|
||||
showSearch: true,
|
||||
total: 0,
|
||||
receiptList: [],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
receiptBillCode: null,
|
||||
partnerName: null,
|
||||
projectName: null,
|
||||
processKey: 'finance_receipt_refound',
|
||||
},
|
||||
dateRange: [],
|
||||
detailDialogVisible: false,
|
||||
detailLoading: false,
|
||||
form: {},
|
||||
approveLogs: [],
|
||||
opinionDialogVisible: false,
|
||||
confirmDialogTitle: '',
|
||||
currentApproveType: '',
|
||||
opinionForm: {
|
||||
approveOpinion: ''
|
||||
},
|
||||
opinionRules: {
|
||||
approveOpinion: [{ required: true, message: '审批意见不能为空', trigger: 'blur' }],
|
||||
},
|
||||
processKey: 'finance_receipt_refound',
|
||||
taskId: null,
|
||||
currentReceiptId: null,
|
||||
pdfExporting: false
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listReceiptApprove(this.addDateRange(this.queryParams, this.dateRange, 'ApplyTime')).then(response => {
|
||||
this.receiptList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetQuery() {
|
||||
this.dateRange = [];
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
toApproved() {
|
||||
this.$router.push( '/approve/receiptRefoundLog' )
|
||||
},
|
||||
handleApprove(row) {
|
||||
this.resetDetailForm();
|
||||
this.currentReceiptId = row.id;
|
||||
this.taskId = row.taskId;
|
||||
this.detailLoading = true;
|
||||
this.detailDialogVisible = true;
|
||||
|
||||
getReceiptDetail(this.currentReceiptId).then(response => {
|
||||
this.form = response.data;
|
||||
this.loadApproveHistory(this.form.receiptBillCode);
|
||||
this.detailLoading = false;
|
||||
}).catch(() => {
|
||||
this.detailLoading = false;
|
||||
});
|
||||
},
|
||||
resetDetailForm() {
|
||||
this.form = {};
|
||||
this.approveLogs = [];
|
||||
this.opinionForm.approveOpinion = '';
|
||||
},
|
||||
loadApproveHistory(businessKey) {
|
||||
if (businessKey) {
|
||||
let keys = [];
|
||||
if(this.processKey) keys.push(this.processKey);
|
||||
|
||||
listCompletedFlows({ businessKey: businessKey, processKeyList: keys }).then(response => {
|
||||
this.approveLogs = response.data;
|
||||
});
|
||||
}
|
||||
},
|
||||
openOpinionDialog(type) {
|
||||
this.currentApproveType = type;
|
||||
this.confirmDialogTitle = type === 'approve' ? '同意审批' : '驳回审批';
|
||||
this.opinionDialogVisible = true;
|
||||
this.opinionForm.approveOpinion = '';
|
||||
this.$nextTick(() => {
|
||||
if(this.$refs.opinionForm) this.$refs.opinionForm.clearValidate();
|
||||
});
|
||||
},
|
||||
showConfirmDialog() {
|
||||
this.$refs.opinionForm.validate(valid => {
|
||||
if (valid) {
|
||||
this.opinionDialogVisible = false;
|
||||
this.submitApproval();
|
||||
}
|
||||
});
|
||||
},
|
||||
submitApproval() {
|
||||
const approveBtn = this.currentApproveType === 'approve' ? 1 : 0;
|
||||
const params = {
|
||||
businessKey: this.form.receiptBillCode,
|
||||
processKey: this.processKey,
|
||||
taskId: this.taskId,
|
||||
variables: {
|
||||
comment: this.opinionForm.approveOpinion,
|
||||
approveBtn: approveBtn
|
||||
}
|
||||
};
|
||||
|
||||
approveTask(params).then(() => {
|
||||
this.$modal.msgSuccess(this.confirmDialogTitle + "成功");
|
||||
this.detailDialogVisible = false;
|
||||
this.getList();
|
||||
});
|
||||
},
|
||||
getStatusText(status) {
|
||||
if (!status) {
|
||||
return '提交审批'
|
||||
}
|
||||
const map = { '1': '提交审批', '2': '驳回', '3': '批准' };
|
||||
return map[status] || '提交审批';
|
||||
},
|
||||
async exportPDF() {
|
||||
this.pdfExporting = true;
|
||||
try {
|
||||
const element = this.$refs.approveLayout.$el;
|
||||
const fileName = `收款单-${this.form.receiptBillCode || ''}.pdf`;
|
||||
await exportElementToPDF(element, fileName);
|
||||
this.$modal.msgSuccess('PDF导出成功');
|
||||
} catch (error) {
|
||||
console.error('PDF导出失败:', error);
|
||||
this.$modal.msgError('PDF导出失败,请稍后重试');
|
||||
} finally {
|
||||
this.pdfExporting = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.process-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* 导出PDF时的特殊样式 */
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--primary,
|
||||
.approve-container.exporting-pdf ::v-deep .el-button--text {
|
||||
display: none;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__inner,
|
||||
.approve-container.exporting-pdf ::v-deep .el-textarea__inner {
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
background-color: transparent !important;
|
||||
resize: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.approve-container.exporting-pdf ::v-deep .el-input__suffix {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -7,47 +7,45 @@
|
|||
<div class="details-container">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>项目编号:</strong> {{ formData.projectCode }}</div>
|
||||
<div class="detail-item"><strong>应收单编号:</strong> {{ formData.receivableBillCode }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>项目名称:</strong> {{ formData.projectName }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>销售-应收单编号:</strong> {{ formData.receivableBillCode }}</div>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="16">
|
||||
<div class="detail-item"><strong>生成时间:</strong> {{ formData.createTime }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>该进货商是否有预收单:</strong> {{ formData.remainingAmount == 0 ? '否' : '是' }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>预收金额:</strong> {{ formData.remainingAmount }}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>进货商名称:</strong> {{ formData.partnerName }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>订单编号:</strong> {{ formData.orderCode }}</div>
|
||||
<div class="detail-item"><strong>项目编号:</strong> {{ formData.projectCode }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>出库单号:</strong> {{ formData.inventoryCode }}</div>
|
||||
<div class="detail-item"><strong>项目名称:</strong> {{ formData.projectName }}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>含税总价(元):</strong> {{ formData.totalPriceWithTax }}</div>
|
||||
<div class="detail-item"><strong>合同编号:</strong> {{ formData.orderCode }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>未税总价(元):</strong> {{ formData.totalPriceWithoutTax }}</div>
|
||||
<div class="detail-item"><strong>出入库单号:</strong> {{ formData.inventoryCode }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>税额(元):</strong> {{ formData.taxAmount }}</div>
|
||||
<div class="detail-item" style="display: flex"><strong>产品类型:</strong>
|
||||
<dict-tag :options="dict.type.product_type" :value="formData.productType"/>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>含税总价:</strong> {{ formData.totalPriceWithTax }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>未税总价:</strong> {{ formData.totalPriceWithoutTax }}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>税额:</strong> {{ formData.taxAmount }}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
|
|
@ -72,19 +70,6 @@
|
|||
<div class="detail-item"><strong>开票中金额:</strong> {{ this.$calc.sub(this.$calc.sub(formData.totalPriceWithTax,formData.invoicedAmount),formData.uninvoicedAmount)}}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>生成收款单:</strong> {{ formData.totalPriceWithTax==formData.unreceivedAmount ? '未生成' : formData.unreceivedAmount == 0 ? '已生成' : '部分生成'}}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item"><strong>生成开票单:</strong> {{ formData.totalPriceWithTax==formData.uninvoicedAmount ? '未生成' : formData.uninvoicedAmount == 0 ? '已生成' : '部分生成'}}</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="detail-item" style="display: flex"><strong>产品类型:</strong>
|
||||
<dict-tag :options="dict.type.product_type" :value="formData.productType"/>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -92,7 +77,7 @@
|
|||
<div style="padding: 20px">
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane label="明细" name="details">
|
||||
<el-divider content-position="left">销售-收款单</el-divider>
|
||||
<el-divider content-position="left">销售收款单</el-divider>
|
||||
<el-table :data="formData.detailList" style="width: 100%" show-summary :summary-method="getSummaries">
|
||||
<el-table-column type="index" label="序号" width="50"></el-table-column>
|
||||
<el-table-column prop="receivableDetailType" label="收款通道">
|
||||
|
|
@ -112,7 +97,7 @@
|
|||
<dict-tag :options="dict.type.receipt_bill_status" :value="scope.row.receiptStatus"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="receiptBillCode" label="销售-收款单编号"></el-table-column>
|
||||
<el-table-column prop="receiptBillCode" label="销售收款单编号"></el-table-column>
|
||||
<el-table-column label="回执单/退款图">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.finAttachment">
|
||||
|
|
@ -124,14 +109,14 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-divider content-position="left">销售-开票单</el-divider>
|
||||
<el-divider content-position="left">销售开票单</el-divider>
|
||||
<el-table :data="formData.invoiceDetailList" style="width: 100%" show-summary :summary-method="getInvoiceSummaries">
|
||||
<el-table-column type="index" label="序号" width="50"></el-table-column>
|
||||
<el-table-column prop="receivableDetailType" label="开票通道">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.invoice_detail_type" :value="scope.row.receivableDetailType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="receivableDetailType" label="开票通道">-->
|
||||
<!-- <template slot-scope="scope">-->
|
||||
<!-- <dict-tag :options="dict.type.receivable_detail_type" :value="scope.row.receivableDetailType"/>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="actualInvoiceTime" label="实际开票时间">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.actualInvoiceTime || '-' }}
|
||||
|
|
@ -144,8 +129,8 @@
|
|||
<dict-tag :options="dict.type.invoice_bill_status" :value="scope.row.invoiceStatus"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="invoiceBillCode" label="销售-开票单编号"></el-table-column>
|
||||
<el-table-column label="发票/红冲发票">
|
||||
<el-table-column prop="invoiceBillCode" label="销售开票单编号"></el-table-column>
|
||||
<el-table-column label="回执单/退款图">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.attachment">
|
||||
<el-button type="text" size="mini" icon="el-icon-view" @click="handlePreview(scope.row.attachment)">预览</el-button>
|
||||
|
|
@ -183,7 +168,7 @@ import GlobalFilePreview from "@/components/GlobalFilePreview/index.vue";
|
|||
|
||||
export default {
|
||||
name: "EditForm",
|
||||
dicts: ['product_type','receipt_bill_status','receivable_detail_type', 'invoice_bill_status','invoice_detail_type'],
|
||||
dicts: ['product_type','receipt_bill_status','receivable_detail_type', 'invoice_bill_status'],
|
||||
components: {
|
||||
GlobalFilePreview,
|
||||
ReceiptPlan,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
|
||||
<el-table-column label="预计开票时间" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-date-picker v-model="scope.row.planInvoiceDate" type="datetime" style="width: 180px"
|
||||
<el-date-picker v-model="scope.row.planInvoiceDate" type="date" style="width: 180px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择日期"
|
||||
:disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker>
|
||||
|
|
|
|||
|
|
@ -3,55 +3,44 @@
|
|||
<div class="dialog-body">
|
||||
<el-form ref="form" :model="form" :inline="true" label-width="120px">
|
||||
<el-row>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <el-form-item label="开票单类型" prop="invoiceBillType">-->
|
||||
<!-- <el-select disabled v-model="form.invoiceBillType" placeholder="请选择开票单类型" clearable>-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="dict in dict.type.receipt_bill_type"-->
|
||||
<!-- :key="dict.value"-->
|
||||
<!-- :label="dict.label"-->
|
||||
<!-- :value="dict.value"-->
|
||||
<!-- />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="开票单类型" prop="invoiceBillType">
|
||||
<el-select disabled v-model="form.invoiceBillType" placeholder="请选择开票单类型" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.receipt_bill_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="进货商名称">
|
||||
<el-input v-model="form.partnerName" readonly/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <el-form-item label="预计开票时间" prop="invoiceTime">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="form.invoiceTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
|
||||
<!-- placeholder="选择日期"-->
|
||||
<!-- ></el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="预计开票时间" prop="invoiceTime">
|
||||
<el-date-picker
|
||||
v-model="form.invoiceTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-divider content-position="left">销售-应收单表</el-divider>
|
||||
<el-divider content-position="left">销售应收单表</el-divider>
|
||||
<el-table :data="receivableBillsWithPlans" border max-height="300px" style="margin-bottom: 20px;">
|
||||
<el-table-column label="销售-应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="预计开票时间" align="center" prop="planInvoiceDate" width="180"/>
|
||||
<!-- <el-table-column label="开票计划" align="center" width="100" prop="planInvoiceAmount">-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="预期开票金额" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentInvoiceAmount(scope.row.id).toFixed(2) }}
|
||||
</template>
|
||||
<el-table-column label="开票计划" align="center" width="100" prop="planInvoiceAmount">
|
||||
</el-table-column>
|
||||
<el-table-column label="预期开票比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentInvoiceRate(scope.row.id) }}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="150"/>
|
||||
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
|
||||
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
|
||||
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
|
||||
<!-- <el-table-column label="开票状态" align="center" prop="invoiceStatus" width="120">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.invoice_status" :value="scope.row.invoiceStatus"/>
|
||||
|
|
@ -59,13 +48,17 @@
|
|||
</el-table-column> -->
|
||||
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
|
||||
<el-table-column label="未开票金额" align="center" prop="uninvoicedAmount" width="120"/>
|
||||
|
||||
<el-table-column label="已开票金额" align="center" prop="invoicedAmount" width="120"/>
|
||||
<el-table-column label="开票中金额" align="center" prop="invoicedAmount" width="120">
|
||||
<el-table-column label="本次开票金额" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax, scope.row.invoicedAmount), scope.row.uninvoicedAmount) }}
|
||||
{{ calculateOrderCurrentInvoiceAmount(scope.row.id).toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="本次开票比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentInvoiceRate(scope.row.id) }}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已开票金额" align="center" prop="invoicedAmount" width="120"/>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -240,14 +233,14 @@ export default {
|
|||
},
|
||||
handleConfirm() {
|
||||
// Validate main form fields
|
||||
// if (!this.form.invoiceBillType) {
|
||||
// this.$modal.msgError('请选择开票单类型');
|
||||
// return;
|
||||
// }
|
||||
// if (!this.form.invoiceTime) {
|
||||
// this.$modal.msgError('请选择预计开票时间');
|
||||
// return;
|
||||
// }
|
||||
if (!this.form.invoiceBillType) {
|
||||
this.$modal.msgError('请选择开票单类型');
|
||||
return;
|
||||
}
|
||||
if (!this.form.invoiceTime) {
|
||||
this.$modal.msgError('请选择预计开票时间');
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate each receivable order's invoice plans
|
||||
for (const order of this.receivableBillsWithPlans) {
|
||||
|
|
|
|||
|
|
@ -3,69 +3,63 @@
|
|||
<div class="dialog-body">
|
||||
<el-form ref="form" :model="form" :inline="true" label-width="120px">
|
||||
<el-row>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <el-form-item label="收款单类型" prop="receiptBillType">-->
|
||||
<!-- <el-select disabled v-model="form.receiptBillType" placeholder="请选择收款单类型" clearable>-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="dict in dict.type.receipt_bill_type"-->
|
||||
<!-- :key="dict.value"-->
|
||||
<!-- :label="dict.label"-->
|
||||
<!-- :value="dict.value"-->
|
||||
<!-- />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款单类型" prop="receiptBillType">
|
||||
<el-select disabled v-model="form.receiptBillType" placeholder="请选择收款单类型" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.receipt_bill_type"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="进货商名称">
|
||||
<el-input v-model="form.partnerName" readonly/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <el-form-item label="预计收款时间" prop="estimatedReceiptTime">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="form.estimatedReceiptTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
|
||||
<!-- placeholder="选择日期"-->
|
||||
<!-- ></el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="预计收款时间" prop="estimatedReceiptTime">
|
||||
<el-date-picker
|
||||
v-model="form.estimatedReceiptTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-divider content-position="left">销售-应收单表</el-divider>
|
||||
<el-divider content-position="left">销售应收单表</el-divider>
|
||||
<el-table :data="receivableBillsWithPlans" border max-height="300px" style="margin-bottom: 20px;">
|
||||
<el-table-column label="销售-应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="预计收款时间" align="center" prop="planReceiptDate" width="180"/>
|
||||
<!-- <el-table-column label="收款计划" align="center" width="100" prop="planAmount">-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="预期收款金额" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptAmount(scope.row.id).toFixed(2) }}
|
||||
</template>
|
||||
<el-table-column label="收款计划" align="center" width="100" prop="planAmount">
|
||||
</el-table-column>
|
||||
<el-table-column label="预期收款比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptRate(scope.row.id) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="150"/>
|
||||
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" width="150"/> -->
|
||||
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
|
||||
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
|
||||
<!-- <el-table-column label="收款状态" align="center" prop="collectionStatus" width="120">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.collection_status" :value="scope.row.collectionStatus"/>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
|
||||
<el-table-column label="未收款金额(元)" align="center" prop="unreceivedAmount" width="120"/>
|
||||
<el-table-column label="已收款金额(元)" align="center" prop="receivedAmount" width="120"/>
|
||||
<el-table-column label="收款中金额(元)" align="center" prop="receivedAmount" width="120">
|
||||
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
|
||||
<el-table-column label="未收款金额" align="center" prop="unreceivedAmount" width="120"/>
|
||||
<el-table-column label="本次收款金额" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax, scope.row.receivedAmount), scope.row.unreceivedAmount) }}
|
||||
{{ calculateOrderCurrentReceiptAmount(scope.row.id).toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="本次收款比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptRate(scope.row.id) }}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已收款金额" align="center" prop="receivedAmount" width="120"/>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
@ -238,14 +232,14 @@ export default {
|
|||
},
|
||||
handleConfirm() {
|
||||
// Validate main form fields
|
||||
// if (!this.form.receiptBillType) {
|
||||
// this.$modal.msgError('请选择收款单类型');
|
||||
// return;
|
||||
// }
|
||||
// if (!this.form.estimatedReceiptTime) {
|
||||
// this.$modal.msgError('请选择预计收款时间');
|
||||
// return;
|
||||
// }
|
||||
if (!this.form.receiptBillType) {
|
||||
this.$modal.msgError('请选择收款单类型');
|
||||
return;
|
||||
}
|
||||
if (!this.form.estimatedReceiptTime) {
|
||||
this.$modal.msgError('请选择预计收款时间');
|
||||
return;
|
||||
}
|
||||
|
||||
// Validate each receivable order's receipt plans
|
||||
for (const order of this.receivableBillsWithPlans) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<el-table-column label="序号" type="index" width="50" align="center"></el-table-column>
|
||||
<el-table-column label="预计收款时间" align="center" width="200">
|
||||
<template slot-scope="scope">
|
||||
<el-date-picker v-model="scope.row.planReceiptDate" type="datetime" style="width: 180px"
|
||||
<el-date-picker v-model="scope.row.planReceiptDate" type="date" style="width: 180px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择日期"
|
||||
:disabled="!isEditing || isNumberStr(scope.row.detailId)"></el-date-picker>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="150px">
|
||||
<!-- <el-form-item label="项目编号" prop="projectCode">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="queryParams.projectCode"-->
|
||||
<!-- placeholder="请输入项目编号"-->
|
||||
<!-- clearable-->
|
||||
<!-- @keyup.enter.native="handleQuery"-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.projectCode"
|
||||
placeholder="请输入项目编号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input
|
||||
v-model="queryParams.projectName"
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="销售-应收单编号" prop="receivableBillCode">
|
||||
<el-form-item label="应收单编号" prop="receivableBillCode">
|
||||
<el-input
|
||||
v-model="queryParams.receivableBillCode"
|
||||
placeholder="请输入应收单编号"
|
||||
|
|
@ -25,9 +25,9 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商名称" prop="partnerName">
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
<el-input
|
||||
v-model="queryParams.partnerName"
|
||||
v-model="queryParams.customerName"
|
||||
placeholder="请输入客户名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
|
|
@ -43,16 +43,16 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="收款状态" prop="collectionStatus">-->
|
||||
<!-- <el-select v-model="queryParams.collectionStatus" placeholder="请选择收款状态" clearable>-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="dict in dict.type.collection_status"-->
|
||||
<!-- :key="dict.value"-->
|
||||
<!-- :label="dict.label"-->
|
||||
<!-- :value="dict.value"-->
|
||||
<!-- />-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
<el-form-item label="收款状态" prop="collectionStatus">
|
||||
<el-select v-model="queryParams.collectionStatus" placeholder="请选择收款状态" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.collection_status"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="开票状态" prop="invoiceStatus">
|
||||
<el-select v-model="queryParams.invoiceStatus" placeholder="请选择开票状态" clearable>
|
||||
<el-option
|
||||
|
|
@ -66,9 +66,9 @@
|
|||
<el-form-item label="预计收款时间">
|
||||
<el-date-picker
|
||||
v-model="estimatedReceiptDateRange"
|
||||
style="width: 300px"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="datetimerange"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
|
|
@ -82,13 +82,13 @@
|
|||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5" >
|
||||
<el-button type="primary" plain @click="handleMergeAndInitiateReceipt" v-hasPermi="['finance:receipt:generate']">
|
||||
合并发起收款单
|
||||
<el-button type="primary" plain icon="el-icon-plus" @click="handleMergeAndInitiateReceipt" v-hasPermi="['finance:receivable:mergeReceipt']">
|
||||
合并并发起收款单
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5" >
|
||||
<el-button type="primary" plain @click="handleMergeAndInitiateInvoice" v-hasPermi="['finance:invoice:generate']">
|
||||
合并发起开票单
|
||||
<el-button type="primary" plain icon="el-icon-plus" @click="handleMergeAndInitiateInvoice" v-hasPermi="['finance:receivable:mergeInvoice']">
|
||||
合并并发起开票单
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
|
|
@ -97,26 +97,22 @@
|
|||
|
||||
<el-table v-loading="loading" :data="receivableList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" />
|
||||
<!-- <el-table-column label="项目编号" align="center" prop="projectCode" width="120" />-->
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="240" />
|
||||
<el-table-column label="销售-应收单编号" align="center" prop="receivableBillCode" width="150" />
|
||||
<el-table-column label="项目编号" align="center" prop="projectCode" width="120" />
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="150" />
|
||||
<el-table-column label="应收单编号" align="center" prop="receivableBillCode" width="150" />
|
||||
<el-table-column label="预计收款时间" align="center" prop="planReceiptDate" width="180"/>
|
||||
<el-table-column label="预计收款金额" align="center" prop="planAmount" width="120" />
|
||||
<el-table-column label="该进货商是否有预收单" align="center" prop="hasAdvanceReceipt" width="150" >
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.remainingAmount == 0 ? '否' : '是' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="该客户是否有预收单" align="center" prop="hasAdvanceReceipt" width="150" /> -->
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="150" />
|
||||
<el-table-column label="产品类型" align="center" prop="productType" width="120">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.product_type" :value="scope.row.productType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120" />
|
||||
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120" />
|
||||
<el-table-column label="未收款金额" align="center" prop="unreceivedAmount" width="120" />
|
||||
<el-table-column label="未开票金额" align="center" prop="uninvoicedAmount" width="120" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300" fixed="right">
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
|
|
@ -131,16 +127,15 @@
|
|||
icon="el-icon-edit"
|
||||
v-show="scope.row.unreceivedAmount!==0"
|
||||
@click="handleGeneratedReceipt(scope.row)"
|
||||
v-hasPermi="['finance:receipt:generate']"
|
||||
v-hasPermi="['finance:receivable:edit']"
|
||||
>生成收款单</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
v-show="scope.row.unreceivedAmount!==0"
|
||||
@click="handleGeneratedInvoice(scope.row)"
|
||||
v-hasPermi="['finance:invoice:generate']"
|
||||
>生成收票单</el-button>
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(scope.row)"
|
||||
v-hasPermi="['finance:receivable:remove']"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -199,7 +194,7 @@ export default {
|
|||
projectCode: null,
|
||||
projectName: null,
|
||||
receivableBillCode: null,
|
||||
partnerName: null,
|
||||
customerName: null,
|
||||
productType: null,
|
||||
collectionStatus: null,
|
||||
createTimeStart: null,
|
||||
|
|
@ -222,10 +217,15 @@ export default {
|
|||
/** 查询销售应收单列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
let query = { ...this.queryParams };
|
||||
query = this.addDateRange(query, this.estimatedReceiptDateRange, 'PlanReceiptDate');
|
||||
|
||||
listReceivable(query).then(response => {
|
||||
if (null != this.dateRange && '' != this.dateRange) {
|
||||
this.queryParams.createTimeStart = this.dateRange[0];
|
||||
this.queryParams.createTimeEnd = this.dateRange[1];
|
||||
}
|
||||
if (null != this.estimatedReceiptDateRange && '' != this.estimatedReceiptDateRange) {
|
||||
this.queryParams.estimatedReceiptTimeStart = this.estimatedReceiptDateRange[0];
|
||||
this.queryParams.estimatedReceiptTimeEnd = this.estimatedReceiptDateRange[1];
|
||||
}
|
||||
listReceivable(this.queryParams).then(response => {
|
||||
this.receivableList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
|
|
@ -268,10 +268,6 @@ export default {
|
|||
this.selectedReceivableRows=[row]
|
||||
this.handleMergeAndInitiateReceipt()
|
||||
},
|
||||
handleGeneratedInvoice(row) {
|
||||
this.selectedReceivableRows=[row]
|
||||
this.handleMergeAndInitiateInvoice()
|
||||
},
|
||||
/** 合并并发起收款单按钮操作 */
|
||||
handleMergeAndInitiateReceipt() {
|
||||
if (this.selectedReceivableRows.length === 0) {
|
||||
|
|
@ -279,7 +275,7 @@ export default {
|
|||
return;
|
||||
}
|
||||
let customerLength = new Set(this.selectedReceivableRows.map(item=>item.customerCode)).size; // Use customerCode to differentiate
|
||||
// Or check partnerName if code is not available in row, but row usually has it.
|
||||
// Or check customerName if code is not available in row, but row usually has it.
|
||||
if (customerLength > 1) {
|
||||
this.$modal.msgWarning("请选择同一家客户的应收单进行合并操作");
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -4,9 +4,8 @@
|
|||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="进货商名称" prop="partnerName">
|
||||
<el-input v-model="form.partnerName" placeholder="请选择进货商" readonly
|
||||
@click.native="showPartnerSelector = true">
|
||||
<el-form-item label="代理商" prop="partnerName">
|
||||
<el-input v-model="form.partnerName" placeholder="请选择代理商" readonly @click.native="showPartnerSelector = true">
|
||||
<el-button slot="append" icon="el-icon-search" @click="showPartnerSelector = true"></el-button>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
|
@ -14,25 +13,27 @@
|
|||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="receiveBillType">
|
||||
<el-checkbox v-model="form.receiveBillType" true-label="PRE_RECEIPT" false-label="FROM_RECEIVABLE">预付
|
||||
</el-checkbox>
|
||||
<el-form-item label="是否预收" prop="receiveBillType">
|
||||
<el-radio-group v-model="form.receiveBillType">
|
||||
<el-radio label="PRE_RECEIPT">是</el-radio>
|
||||
<el-radio label="FROM_RECEIVABLE">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-row>-->
|
||||
<!-- <el-col :span="24">-->
|
||||
<!-- <el-form-item label="预计收款时间" prop="receiptTime">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="form.receiptTime"-->
|
||||
<!-- type="date"-->
|
||||
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
|
||||
<!-- placeholder="选择日期"-->
|
||||
<!-- ></el-date-picker>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="预计收款时间" prop="receiptTime">
|
||||
<el-date-picker
|
||||
v-model="form.receiptTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="选择日期"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row v-if="form.receiveBillType === 'PRE_RECEIPT'">
|
||||
<el-col :span="12">
|
||||
|
|
@ -51,43 +52,37 @@
|
|||
ref="receivableTable"
|
||||
:data="receivableList"
|
||||
border
|
||||
v-loading="receivableLoading"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
max-height="400"
|
||||
row-key="id"
|
||||
>
|
||||
<el-table-column type="selection" width="55" reserve-selection></el-table-column>
|
||||
<el-table-column label="销售-应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="应收单编号" align="center" prop="receivableBillCode" width="150"/>
|
||||
<el-table-column label="预计收款时间" align="center" prop="planReceiptDate" width="180"/>
|
||||
<!-- <el-table-column label="收款计划" align="center" width="100" prop="planAmount">-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column label="预期收款金额">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptAmount(scope.row).toFixed(2) }}
|
||||
</template>
|
||||
<el-table-column label="收款计划" align="center" width="100" prop="planAmount">
|
||||
</el-table-column>
|
||||
<el-table-column label="预期收款比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptRate(scope.row) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目名称" align="center" prop="projectName" width="150"/>
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="150"/>
|
||||
<!-- <el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>-->
|
||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" width="150"/> -->
|
||||
<el-table-column label="合同编号" align="center" prop="orderCode" width="150"/>
|
||||
<el-table-column label="出入库单号" align="center" prop="inventoryCode" width="150"/>
|
||||
<!-- <el-table-column label="收款状态" align="center" prop="collectionStatus" width="120">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.collection_status" :value="scope.row.collectionStatus"/>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="120"/>
|
||||
<el-table-column label="未收款金额(元)" align="center" prop="unreceivedAmount" width="120"/>
|
||||
<el-table-column label="已收款金额(元)" align="center" prop="receivedAmount" width="120"/>
|
||||
<el-table-column label="收款中金额(元)" align="center" prop="receivedAmount" width="120">
|
||||
<el-table-column label="含税总价" align="center" prop="totalPriceWithTax" width="120"/>
|
||||
<el-table-column label="未收款金额" align="center" prop="unreceivedAmount" width="120"/>
|
||||
<el-table-column label="本次收款金额">
|
||||
<template slot-scope="scope">
|
||||
{{ $calc.sub($calc.sub(scope.row.totalPriceWithTax, scope.row.receivedAmount), scope.row.unreceivedAmount) }}
|
||||
{{ calculateOrderCurrentReceiptAmount(scope.row).toFixed(2) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="本次收款比例" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ calculateOrderCurrentReceiptRate(scope.row) }}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已收款金额" align="center" prop="receivedAmount" width="120"/>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100"
|
||||
fixed="right">
|
||||
<template slot-scope="scope">
|
||||
|
|
@ -123,7 +118,6 @@
|
|||
ref="orderTable"
|
||||
:data="orderList"
|
||||
border
|
||||
v-loading="orderLoading"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
@select="handleSelect"
|
||||
|
|
@ -151,7 +145,7 @@
|
|||
</div>
|
||||
|
||||
<div v-if="!form.partnerCode" style="text-align: center; color: #909399; padding: 20px;">
|
||||
请先选择进货商
|
||||
请先选择代理商
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -216,8 +210,6 @@ export default {
|
|||
actualReceiveTime: null
|
||||
},
|
||||
showPartnerSelector: false,
|
||||
receivableLoading: false,
|
||||
orderLoading: false,
|
||||
rules: {
|
||||
partnerName: [{required: true, message: "代理商不能为空", trigger: "change"}],
|
||||
actualReceiveTime: [{required: true, message: "实际收款时间不能为空", trigger: "change"}],
|
||||
|
|
@ -292,7 +284,6 @@ export default {
|
|||
|
||||
if (this.form.receiveBillType === 'FROM_RECEIVABLE' && this.form.partnerCode) {
|
||||
query.partnerCode = this.form.partnerCode;
|
||||
this.receivableLoading = true
|
||||
listReceivable(query).then(res => {
|
||||
this.receivableList = (res.rows || []).map(item => {
|
||||
const receiptPlans = item.receiptPlans ? [...item.receiptPlans] : [];
|
||||
|
|
@ -311,17 +302,14 @@ export default {
|
|||
}
|
||||
});
|
||||
this.total = res.total;
|
||||
this.receivableLoading = false
|
||||
});
|
||||
} else if (this.form.receiveBillType === 'PRE_RECEIPT' && this.form.partnerCode) {
|
||||
// Filter Sales Orders for the agent (partner)
|
||||
query.partnerCode = this.form.partnerCode;
|
||||
query.orderStatus = '2'; // Example status
|
||||
this.orderLoading=true
|
||||
listOrder(query).then(res => {
|
||||
this.orderList = res.rows || [];
|
||||
this.total = res.total;
|
||||
this.orderLoading=false
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
<el-row :gutter="20">
|
||||
<!-- Left Side: Form Data -->
|
||||
<el-col :span="12">
|
||||
<div class="form-tip">请选择客户的支付方式并确认客户打款的账户信息,提交至财务审批</div>
|
||||
<div class="form-tip">请选择客户的付款方式并确认客户打款的账户信息,提交至财务审批</div>
|
||||
<el-form ref="form" :model="form" label-width="120px" size="small">
|
||||
<el-form-item label="支付方式" prop="receiptMethod">
|
||||
<el-select v-model="form.receiptMethod" placeholder="请选择支付方式" style="width: 100%">
|
||||
<el-form-item label="付款方式" prop="receiptMethod">
|
||||
<el-select v-model="form.receiptMethod" placeholder="请选择付款方式" style="width: 100%">
|
||||
<el-option
|
||||
v-for="dict in dicts.payment_method"
|
||||
:key="dict.value"
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="收款金额" prop="totalPriceWithTax">
|
||||
<el-form-item label="含税金额" prop="totalPriceWithTax">
|
||||
<el-input v-model="form.totalPriceWithTax" :disabled="true"/>
|
||||
</el-form-item>
|
||||
|
||||
|
|
@ -203,10 +203,6 @@ export default {
|
|||
this.previewUrl = '';
|
||||
},
|
||||
handleSubmit() {
|
||||
if (this.$calc.sub(this.form.totalPriceWithTax,this.form.confirmAmount)!=0){
|
||||
this.$modal.msgError("确认收款金额与收款金额需相同");
|
||||
return
|
||||
}
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
// Construct FormData
|
||||
|
|
@ -222,7 +218,6 @@ export default {
|
|||
formData.append("file", this.form.file);
|
||||
}
|
||||
|
||||
|
||||
// Since applyPaymentApi usually takes JSON, we might need to verify if backend supports FormData
|
||||
// Assuming we are sending FormData now.
|
||||
applyReceipt(formData).then(response => {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="150px">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
|
||||
<el-form-item label="项目编号" prop="projectCode">
|
||||
<el-input
|
||||
v-model="queryParams.projectCode"
|
||||
|
|
@ -17,23 +17,23 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="销售-收款单编号" prop="receiptBillCode">
|
||||
<el-form-item label="收款单编号" prop="receiveBillCode">
|
||||
<el-input
|
||||
v-model="queryParams.receiptBillCode"
|
||||
v-model="queryParams.receiveBillCode"
|
||||
placeholder="请输入收款单编号"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="进货商名称" prop="partnerName">
|
||||
<el-form-item label="客户名称" prop="customerName">
|
||||
<el-input
|
||||
v-model="queryParams.partnerName"
|
||||
placeholder="请输入进货商名称"
|
||||
v-model="queryParams.customerName"
|
||||
placeholder="请输入客户名称"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="销售-应收单编号" prop="receivableBillCode">
|
||||
<el-form-item label="应收单编号" prop="receivableBillCode">
|
||||
<el-input
|
||||
v-model="queryParams.receivableBillCode"
|
||||
placeholder="请输入应收单编号"
|
||||
|
|
@ -41,25 +41,23 @@
|
|||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="receiveBillType">
|
||||
<el-select v-model="queryParams.receiveBillType" placeholder="请选择" clearable>
|
||||
<el-form-item label="收款单类型" prop="receiveBillType">
|
||||
<el-select v-model="queryParams.receiveBillType" placeholder="请选择收款单类型" clearable>
|
||||
<el-option v-for="dict in dict.type.receive_bill_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="支付方式" prop="receiptMethod">
|
||||
<el-select v-model="queryParams.receiptMethod" placeholder="请选择" clearable>
|
||||
<el-option v-for="dict in dict.type.payment_method" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审批状态" prop="approveStatus">
|
||||
<el-select v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable>
|
||||
<el-option v-for="dict in dict.type.approve_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
<el-option label="待提交" value="0" />
|
||||
<el-option label="审批中" value="1" />
|
||||
<el-option label="已审批" value="2" />
|
||||
<el-option label="已驳回" value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="收款状态" prop="receiveStatus">
|
||||
<el-select v-model="queryParams.receiptStatus" placeholder="请选择收款状态" clearable>
|
||||
<el-option v-for="dict in dict.type.receipt_bill_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
|
||||
<el-select v-model="queryParams.receiveStatus" placeholder="请选择收款状态" clearable>
|
||||
<el-option label="待收款" value="0" />
|
||||
<el-option label="已收款" value="1" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批节点" prop="approveNode">
|
||||
|
|
@ -74,8 +72,8 @@
|
|||
<el-date-picker
|
||||
v-model="dateRangeApproval"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="datetimerange"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
|
|
@ -85,8 +83,8 @@
|
|||
<el-date-picker
|
||||
v-model="dateRangeEstimated"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="datetimerange"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
|
|
@ -96,8 +94,8 @@
|
|||
<el-date-picker
|
||||
v-model="dateRangeActual"
|
||||
style="width: 240px"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
type="datetimerange"
|
||||
value-format="yyyy-MM-dd"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
|
|
@ -123,26 +121,26 @@
|
|||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="receiveList">
|
||||
<el-table-column label="销售-收款单编号" align="center" prop="receiptBillCode" width="180" />
|
||||
<el-table-column label="收款单编号" align="center" prop="receiptBillCode" />
|
||||
<el-table-column label="预计收款时间" align="center" prop="receiptTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.receiptTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="230" />
|
||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" />
|
||||
<el-table-column label="备注" align="center" prop="receiptBillType" width="180">
|
||||
<el-table-column label="进货商名称" align="center" prop="partnerName" />
|
||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" />
|
||||
<el-table-column label="收款单类型" align="center" prop="receiptBillType" >
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.receipt_bill_type" :value="scope.row.receiptBillType"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预收单剩余额度" align="center" prop="remainingAmount" width="180"/>
|
||||
<el-table-column label="收款状态" align="center" prop="receiveStatus" width="180">
|
||||
<el-table-column label="预收单剩余额度" align="center" prop="remainingAmount" />
|
||||
<el-table-column label="收款状态" align="center" prop="receiveStatus" >
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.receipt_bill_status" :value="scope.row.receiptStatus"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批状态" align="center" prop="approveStatus" width="180">
|
||||
<el-table-column label="审批状态" align="center" prop="approveStatus" >
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.approve_status" :value="scope.row.approveStatus"/>
|
||||
</template>
|
||||
|
|
@ -152,8 +150,8 @@
|
|||
<span>{{ parseTime(scope.row.approveTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" width="200" fixed="right" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300" fixed="right">
|
||||
<el-table-column label="审批节点" align="center" prop="approveNode" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
|
|
@ -165,38 +163,27 @@
|
|||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-document"
|
||||
v-show="(scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.approveStatus!=='0') ||
|
||||
(scope.row.receiptBillType!=='FROM_RECEIVABLE' && scope.row.approveStatus==='2') "
|
||||
@click="handleReceipt(scope.row)"
|
||||
>{{scope.row.receiptBillType!=='REFUND'?'客户付款图':'退款回执单'}}</el-button>
|
||||
>附件</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-money"
|
||||
v-show="scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.receiptStatus==='1' && scope.row.approveStatus==='0'"
|
||||
@click="handleApplyPayment(scope.row)"
|
||||
>申请收款</el-button>
|
||||
>申请付款</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-money"
|
||||
v-show="scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.receiptStatus==='2' && scope.row.approveStatus==='2'"
|
||||
@click="handleApplyRefund(scope.row)"
|
||||
>申请退款</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-document"
|
||||
v-show="scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.receiptStatus==='1' && scope.row.approveStatus==='0' "
|
||||
v-show="scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.receiptStatus==='1' &&(scope.row.approveStatus==='0' || scope.row.approveStatus==='3') "
|
||||
@click="handleReturn(scope.row)"
|
||||
>退回</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-refresh-right"
|
||||
v-if="(scope.row.approveStatus === '2' || scope.row.approveStatus==='3') && (scope.row.receiptStatus==='1'||scope.row.receiptStatus==='3')"
|
||||
@click="handleRevoke(scope.row)"
|
||||
>撤销</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
|
@ -224,7 +211,7 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import {listReceive, getReceive, redRush, mergeReceivable, returnReceive, addReceipt, revokeReceipt} from "@/api/finance/receive";
|
||||
import {listReceive, getReceive, redRush, mergeReceivable, returnReceive, addReceipt} from "@/api/finance/receive";
|
||||
import { addDateRange } from "@/utils/ruoyi";
|
||||
import DetailDrawer from "./components/DetailDrawer.vue";
|
||||
import AddForm from "./components/AddForm.vue";
|
||||
|
|
@ -258,8 +245,8 @@ export default {
|
|||
pageSize: 10,
|
||||
projectCode: null,
|
||||
projectName: null,
|
||||
receiptBillCode: null,
|
||||
partnerName: null,
|
||||
receiveBillCode: null,
|
||||
customerName: null,
|
||||
receivableBillCode: null,
|
||||
receiveBillType: null,
|
||||
approveStatus: null,
|
||||
|
|
@ -321,7 +308,7 @@ export default {
|
|||
},
|
||||
/** 新增提交 */
|
||||
handleAddSubmit(form) {
|
||||
if (form.receiptBillType==='FROM_RECEIVABLE'){
|
||||
if (form.paymentBillType==='FROM_RECEIVABLE'){
|
||||
mergeReceivable(form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.addOpen = false;
|
||||
|
|
@ -364,19 +351,9 @@ export default {
|
|||
this.currentRow = row;
|
||||
this.receiptOpen = true;
|
||||
},
|
||||
/** 撤销按钮操作 */
|
||||
handleRevoke(row) {
|
||||
let msg = row.receiptBillType === 'REFUND' ? '是否将该笔销售-退款单撤销,将退款单撤销至收款单' : '是否将该笔销售-收款单撤销,撤销至收款单未审批状态';
|
||||
this.$modal.confirm(msg).then(() => {
|
||||
return revokeReceipt(row.id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("撤销成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 退回按钮操作 */
|
||||
handleRedRush(row) {
|
||||
this.$modal.confirm('是否确认收款单编号为"' + row.receiptBillCode + '"的数据项进行红冲,并提交财务审批?').then(function() {
|
||||
this.$modal.confirm('是否确认收款单编号为"' + row.receiveBillCode + '"的数据项进行红冲,并提交财务审批?').then(function() {
|
||||
return redRush(row.id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
|
|
|
|||
|
|
@ -149,21 +149,9 @@ process:
|
|||
financeRefund: finance_refund
|
||||
fiananceTicket: fianance_ticket
|
||||
financeTicketRefound: finance_ticket_refound
|
||||
financeReceiptApprove: finance_receipt_approve
|
||||
financeReceiptRefound: finance_receipt_refound
|
||||
financeInvoiceApprove: finance_invoice_approve
|
||||
financeInvoiceRefound: finance_invoice_refound
|
||||
|
||||
#业务执行实例bean name ,可以按审批节点配置 业务审批回调方法处理业务逻辑. key 为流程节点主键ID value 要执行的业务方法名称,不配置则默认调用TodoCommonTemplate.todoApproveCallback
|
||||
instance:
|
||||
financeReceiptApprove:
|
||||
beanName: omsReceiptBillServiceImpl
|
||||
financeReceiptRefound:
|
||||
beanName: omsReceiptBillServiceImpl
|
||||
financeInvoiceApprove:
|
||||
beanName: omsInvoiceBillServiceImpl
|
||||
financeInvoiceRefound:
|
||||
beanName: omsInvoiceBillServiceImpl
|
||||
orderApproveOnline:
|
||||
beanName: projectOrderInfoServiceImpl
|
||||
orderApproveOffline:
|
||||
|
|
|
|||
|
|
@ -17,9 +17,5 @@ public class Definition {
|
|||
private String financeRefund;
|
||||
private String fiananceTicket;
|
||||
private String financeTicketRefound;
|
||||
private String financeReceiptApprove;
|
||||
private String financeReceiptRefound;
|
||||
private String financeInvoiceApprove;
|
||||
private String financeInvoiceRefound;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,6 @@ public class Instance {
|
|||
private Map<String, Object> finance_refund;
|
||||
private Map<String, Object> fianance_ticket;
|
||||
private Map<String, Object> finance_ticket_refound;
|
||||
private Map<String, Object> finance_receipt_approve;
|
||||
private Map<String, Object> finance_receipt_refound;
|
||||
private Map<String, Object> finance_invoice_approve;
|
||||
private Map<String, Object> finance_invoice_refound;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.ruoyi.sip.controller;
|
||||
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
import com.ruoyi.common.config.flow.ProcessConfig;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
|
|
@ -9,7 +8,6 @@ import com.ruoyi.common.enums.BusinessType;
|
|||
import com.ruoyi.sip.domain.OmsFinAttachment;
|
||||
import com.ruoyi.sip.domain.OmsPaymentBill;
|
||||
import com.ruoyi.sip.domain.OmsReceiptBill;
|
||||
import com.ruoyi.sip.flowable.service.TodoService;
|
||||
import com.ruoyi.sip.service.IOmsFinAttachmentService;
|
||||
import com.ruoyi.sip.service.IOmsReceiptBillService;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
|
|
@ -19,7 +17,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -38,18 +35,11 @@ public class OmsReceiptBillController extends BaseController {
|
|||
@Autowired
|
||||
private IOmsFinAttachmentService omsFinAttachmentService;
|
||||
|
||||
@Autowired
|
||||
private TodoService todoService;
|
||||
@Autowired
|
||||
private ProcessConfig processConfig;
|
||||
|
||||
@PostMapping("/list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(OmsReceiptBill omsReceiptBill) {
|
||||
startPage();
|
||||
List<OmsReceiptBill> list = omsReceiptBillService.queryAll(omsReceiptBill);
|
||||
todoService.fillApproveNode(list,
|
||||
Arrays.asList(processConfig.getDefinition().getFinanceReceiptApprove(), processConfig.getDefinition().getFinanceReceiptRefound())
|
||||
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||
return getDataTable(list);
|
||||
}
|
||||
@PostMapping("/write-off/list")
|
||||
|
|
@ -61,40 +51,9 @@ public class OmsReceiptBillController extends BaseController {
|
|||
return getDataTable(list);
|
||||
}
|
||||
|
||||
@RequiresPermissions("finance:payment:approve")
|
||||
@PostMapping("/approve/list")
|
||||
@ResponseBody
|
||||
public TableDataInfo listApprove(OmsReceiptBill omsReceiptBill) {
|
||||
startPage();
|
||||
List<OmsReceiptBill> list = omsReceiptBillService.listApprove(omsReceiptBill);
|
||||
clearPage();
|
||||
todoService.fillApproveNode(list,
|
||||
Collections.singletonList(omsReceiptBill.getProcessKey())
|
||||
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
@RequiresPermissions("finance:payment:approve")
|
||||
@PostMapping("/approved/list")
|
||||
@ResponseBody
|
||||
public TableDataInfo listApproved(OmsReceiptBill omsReceiptBill) {
|
||||
startPage();
|
||||
List<OmsReceiptBill> list = omsReceiptBillService.listApproved(omsReceiptBill);
|
||||
clearPage();
|
||||
todoService.fillApproveNode(list,
|
||||
Collections.singletonList(omsReceiptBill.getProcessKey())
|
||||
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping(value = "/{id}")
|
||||
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
||||
OmsReceiptBill data = omsReceiptBillService.queryById(id);
|
||||
todoService.fillApproveNode(Collections.singletonList(data),
|
||||
Arrays.asList(processConfig.getDefinition().getFinanceReceiptApprove(), processConfig.getDefinition().getFinanceReceiptRefound())
|
||||
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||
return AjaxResult.success(data);
|
||||
return AjaxResult.success(omsReceiptBillService.queryById(id));
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -199,14 +158,4 @@ public class OmsReceiptBillController extends BaseController {
|
|||
return AjaxResult.error("操作失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
@PostMapping("/revoke")
|
||||
@ResponseBody
|
||||
public AjaxResult revoke(@RequestBody OmsReceiptBill omsReceiptBill) {
|
||||
try {
|
||||
return omsReceiptBillService.revoke(omsReceiptBill);
|
||||
} catch (Exception e) {
|
||||
logger.error("撤销失败", e);
|
||||
return AjaxResult.error("操作失败:" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,7 +159,6 @@ public class OmsInvoiceBill extends BaseEntity
|
|||
WAIT_INVOICE("1", "未开票"),
|
||||
/** 已开票 */
|
||||
INVOICE("2", "已开票"),
|
||||
WAIT_RED_RUSH("3", "未红冲"),
|
||||
|
||||
;
|
||||
private final String code;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
|
||||
|
||||
import com.ruoyi.common.core.domain.BaseEntity;
|
||||
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
|
@ -19,7 +18,7 @@ import lombok.Getter;
|
|||
*/
|
||||
@Data
|
||||
|
||||
public class OmsReceiptBill extends BaseEntity {
|
||||
public class OmsReceiptBill {
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
|
|
@ -29,7 +28,6 @@ public class OmsReceiptBill extends BaseEntity {
|
|||
* 收款单编号
|
||||
*/
|
||||
|
||||
private String receivableBillCode;
|
||||
private String receiptBillCode;
|
||||
private List<String> receiptBillCodeList;
|
||||
/**
|
||||
|
|
@ -167,12 +165,7 @@ public class OmsReceiptBill extends BaseEntity {
|
|||
private OmsFinAttachment attachment;
|
||||
private List<ReceiptDetailDTO> detailDTOList;
|
||||
|
||||
private Long approveUser;
|
||||
private Date applyTime;
|
||||
private Date todoApproveTime;
|
||||
private String processKey;
|
||||
private String todoId;
|
||||
private String taskId;
|
||||
|
||||
|
||||
private BigDecimal writeOffAmount;
|
||||
private BigDecimal writeOffAmountWithoutTax;
|
||||
|
|
@ -224,7 +217,6 @@ public class OmsReceiptBill extends BaseEntity {
|
|||
WAIT_PAYMENT("1", "未付款"),
|
||||
/** 预付单 */
|
||||
PAYMENT("2", "已付款"),
|
||||
WAIT_REFUNDED("3", "未退款"),
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@ public class OmsReceivableInvoiceDetail extends BaseEntity
|
|||
public enum ReceivableDetailTypeEnum {
|
||||
|
||||
/** 正常开票 */
|
||||
NORMAL_INVOICE("1", "申请开票"),
|
||||
NORMAL_INVOICE("1", "正常开票"),
|
||||
/** 红冲 */
|
||||
REFUND("3", "申请红冲"),
|
||||
REFUND("3", "红冲"),
|
||||
|
||||
;
|
||||
private final String code;
|
||||
|
|
|
|||
|
|
@ -75,10 +75,10 @@ public class OmsReceivableReceiptDetail extends BaseEntity
|
|||
public enum ReceivableDetailTypeEnum {
|
||||
|
||||
/** 正常收款 */
|
||||
NORMAL_RECEIPT("1", "申请收款"),
|
||||
NORMAL_RECEIPT("1", "正常收款"),
|
||||
/** 预收核销 */
|
||||
PRE_RECEIVE_WRITE_OFF("2", "预收核销"),
|
||||
REFUND("3", "申请退款"),
|
||||
REFUND("3", "退款"),
|
||||
|
||||
;
|
||||
private final String code;
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
package com.ruoyi.sip.flowable.domain;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author : ch
|
||||
* @version : 1.0
|
||||
* @ClassName : FlowRelationDto
|
||||
* @Description :
|
||||
* @DATE : Created in 9:25 2025/12/29
|
||||
* <pre> Copyright: Copyright(c) 2025 </pre>
|
||||
* <pre> Company : 紫光汇智信息技术有限公司 </pre>
|
||||
* Modification History:
|
||||
* Date Author Version Discription
|
||||
* --------------------------------------------------------------------------
|
||||
* 2025/12/29 ch 1.0 Why & What is modified: <修改原因描述> *
|
||||
*/
|
||||
@Data
|
||||
public class FlowRelationDto {
|
||||
|
||||
private String querySql;
|
||||
private String joinSql;
|
||||
}
|
||||
|
|
@ -3,7 +3,6 @@ package com.ruoyi.sip.flowable.service;
|
|||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.sip.domain.OmsPurchaseOrder;
|
||||
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
||||
import com.ruoyi.sip.flowable.domain.FlowRelationDto;
|
||||
import com.ruoyi.sip.flowable.domain.Todo;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
|
||||
|
|
@ -11,7 +10,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 待办Service接口
|
||||
|
|
@ -145,9 +143,6 @@ public interface TodoService
|
|||
|
||||
|
||||
AjaxResult statisticsTodo();
|
||||
FlowRelationDto getFlowRelationSql(String tableName, List<String> processKeyList, Long approveUser
|
||||
, List<String> notInTaskName, Supplier<String> supplier);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.ruoyi.sip.flowable.service.impl;
|
|||
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.ruoyi.common.config.flow.Instance;
|
||||
import com.ruoyi.common.config.flow.ProcessConfig;
|
||||
|
|
@ -16,7 +15,6 @@ import com.ruoyi.common.utils.bean.BeanUtils;
|
|||
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||
import com.ruoyi.sip.domain.OmsPurchaseOrder;
|
||||
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
||||
import com.ruoyi.sip.flowable.domain.FlowRelationDto;
|
||||
import com.ruoyi.sip.flowable.domain.Todo;
|
||||
import com.ruoyi.sip.flowable.mapper.TodoMapper;
|
||||
import com.ruoyi.sip.flowable.service.DeleteFlowableProcessInstanceCmd;
|
||||
|
|
@ -41,7 +39,6 @@ import java.util.*;
|
|||
import java.util.function.BiConsumer;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
|
|
@ -444,42 +441,6 @@ public class TodoServiceImpl implements TodoService {
|
|||
return AjaxResult.success(resultMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FlowRelationDto getFlowRelationSql(String tableName, List<String> processKeyList, Long approveUser, List<String> notInTaskName, Supplier<String> function) {
|
||||
FlowRelationDto flowRelationDto = new FlowRelationDto();
|
||||
StringBuilder joinQuerySql = new StringBuilder();
|
||||
StringBuilder joinSql = new StringBuilder();
|
||||
if ("bu_todo".equals(tableName)){
|
||||
joinQuerySql.append( " ,t3.apply_time,t3.process_key,t3.todo_id,t3.task_id");
|
||||
joinSql.append(" inner join ( ");
|
||||
joinSql.append(" select bt.business_key,bt.apply_time,bt.process_key,bt.todo_id,bt.task_id from bu_todo bt where ");
|
||||
joinSql.append(StrUtil.format(" bt.process_key IN ({})", processKeyList.stream().map(processKey -> "'" + processKey + "'").collect(Collectors.joining(","))));
|
||||
joinSql.append(" AND bt.approve_user = ").append(approveUser).append(" ");
|
||||
if (CollUtil.isNotEmpty(notInTaskName)) {
|
||||
joinSql.append(" AND bt.task_name NOT IN (");
|
||||
joinSql.append(notInTaskName.stream().map(taskName -> "'" + taskName + "'").collect(Collectors.joining(",")));
|
||||
joinSql.append(") ");
|
||||
}
|
||||
joinSql.append(") t3 on t3.business_key =");
|
||||
}else{
|
||||
joinQuerySql.append( " ,t3.apply_time,t3.approve_time as todo_approve_time,t3.process_key ");
|
||||
joinSql.append(" inner join ( SELECT business_key, max(btc.approve_time) approve_time, max(btc.apply_time) apply_time, max(btc.process_key) process_key FROM bu_todo_completed btc");
|
||||
joinSql.append(StrUtil.format(" where btc.process_key IN ({})", processKeyList.stream().map(processKey -> "'" + processKey + "'").collect(Collectors.joining(","))));
|
||||
joinSql.append(" AND btc.approve_user = ").append(approveUser).append(" ");
|
||||
if (CollUtil.isNotEmpty(notInTaskName)) {
|
||||
joinSql.append(" AND btc.task_name NOT IN (");
|
||||
joinSql.append(notInTaskName.stream().map(taskName -> "'" + taskName + "'").collect(Collectors.joining(",")));
|
||||
joinSql.append(") ");
|
||||
}
|
||||
joinSql.append(" GROUP BY business_key) t3 on t3.business_key = ");
|
||||
}
|
||||
|
||||
joinSql.append(function.get());
|
||||
flowRelationDto.setQuerySql(joinQuerySql.toString());
|
||||
flowRelationDto.setJoinSql(joinSql.toString());
|
||||
return flowRelationDto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 流程审批
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package com.ruoyi.sip.mapper;
|
||||
|
||||
import com.ruoyi.sip.domain.OmsReceiptBill;
|
||||
import com.ruoyi.sip.flowable.domain.FlowRelationDto;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -57,9 +55,4 @@ public interface OmsReceiptBillMapper {
|
|||
OmsReceiptBill queryByCode(String code);
|
||||
|
||||
void updateReturnWriteOffBatch(List<OmsReceiptBill> updateBills);
|
||||
|
||||
List<OmsReceiptBill> listApprove(@Param("entity") OmsReceiptBill omsReceiptBill, @Param("flowRelationDto") FlowRelationDto flowRelationDto);
|
||||
|
||||
void revoke(OmsReceiptBill omsReceiptBill);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,4 @@ public interface OmsReceivableReceiptDetailMapper
|
|||
void updateWriteOffIdBatch(List<OmsReceivableReceiptDetail> updateList);
|
||||
|
||||
void clearWriteOffByWriteOffId(List<Long> ids);
|
||||
|
||||
void deleteByBillCode(String receiptBillCode);
|
||||
}
|
||||
|
|
@ -62,12 +62,6 @@ public interface IOmsReceiptBillService {
|
|||
void returnWriteOff(List<String> collect, List<OmsReceivableReceiptDetail> omsReceivableReceiptDetails);
|
||||
|
||||
List<OmsReceiptBill> listWriteOff(OmsReceiptBill omsReceiptBill);
|
||||
|
||||
List<OmsReceiptBill> listApprove(OmsReceiptBill omsReceiptBill);
|
||||
|
||||
List<OmsReceiptBill> listApproved(OmsReceiptBill omsReceiptBill);
|
||||
|
||||
AjaxResult revoke(OmsReceiptBill omsReceiptBill);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -82,7 +82,4 @@ public interface IOmsReceivableReceiptDetailService
|
|||
void clearWriteOffByWriteOffId(List<Long> ids);
|
||||
|
||||
List<OmsReceivableReceiptDetail> listByPlanIdList(List<Long> planIdList);
|
||||
|
||||
void deleteByBillCode(String receiptBillCode);
|
||||
|
||||
}
|
||||
|
|
@ -425,21 +425,28 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
|
|||
|
||||
List<OmsPayablePaymentDetail> omsPayablePaymentDetails = omsPayablePaymentDetailService.listByPayableBillIdList(idList);
|
||||
// 1. 构建 payableBillId -> (paymentPlanId -> 最新PaymentDetail) 的 Map
|
||||
Map<Long, List<OmsPayablePaymentDetail>> payableDtailListMap =
|
||||
Map<Long, Map<Long, OmsPayablePaymentDetail>> planMap =
|
||||
omsPayablePaymentDetails.stream()
|
||||
.collect(Collectors.groupingBy(OmsPayablePaymentDetail::getPayableBillId ));
|
||||
.collect(Collectors.groupingBy(
|
||||
OmsPayablePaymentDetail::getPayableBillId,
|
||||
Collectors.toMap(
|
||||
OmsPayablePaymentDetail::getPaymentPlanId,
|
||||
Function.identity(),
|
||||
(d1, d2) -> d1.getCreateTime().after(d2.getCreateTime()) ? d1 : d2
|
||||
)
|
||||
));
|
||||
|
||||
for (OmsPayableBill payableBill : omsPayableBills) {
|
||||
|
||||
// 2. 获取当前账单的支付明细 Map(避免 NPE)
|
||||
List<OmsPayablePaymentDetail> detailList =
|
||||
payableDtailListMap.getOrDefault(payableBill.getId(), Collections.emptyList());
|
||||
Map<Long, OmsPayablePaymentDetail> paymentDetailMap =
|
||||
planMap.getOrDefault(payableBill.getId(), Collections.emptyMap());
|
||||
|
||||
if (CollUtil.isNotEmpty(detailList)) {
|
||||
if (CollUtil.isNotEmpty(paymentDetailMap)) {
|
||||
|
||||
// 3. 按支付状态汇总金额
|
||||
Map<String, BigDecimal> amountMap =
|
||||
detailList.stream()
|
||||
paymentDetailMap.values().stream()
|
||||
.filter(d -> d.getPaymentAmount() != null)
|
||||
.collect(Collectors.toMap(
|
||||
OmsPayablePaymentDetail::getPaymentStatus,
|
||||
|
|
@ -451,8 +458,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
|
|||
BigDecimal paidAmount = amountMap
|
||||
.getOrDefault(OmsPaymentBill.PaymentStatusEnum.PAYMENT.getCode(), BigDecimal.ZERO)
|
||||
.add(amountMap.getOrDefault(
|
||||
OmsPaymentBill.PaymentStatusEnum.REFUNDED.getCode(), BigDecimal.ZERO))
|
||||
.subtract(amountMap.getOrDefault(OmsPaymentBill.PaymentStatusEnum.WAIT_REFUNDED.getCode(), BigDecimal.ZERO));
|
||||
OmsPaymentBill.PaymentStatusEnum.REFUNDED.getCode(), BigDecimal.ZERO));
|
||||
|
||||
BigDecimal waitPayAmount =
|
||||
amountMap.getOrDefault(
|
||||
|
|
@ -491,20 +497,27 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
|
|||
return 0;
|
||||
}
|
||||
List<OmsPayableTicketDetail> omsPayableTicketDetails = omsPayableTicketDetailService.listByPayableBillIdList(idList);
|
||||
Map<Long, List<OmsPayableTicketDetail>> payableListMap =
|
||||
Map<Long, Map<Long, OmsPayableTicketDetail>> planMap =
|
||||
omsPayableTicketDetails.stream()
|
||||
.collect(Collectors.groupingBy(OmsPayableTicketDetail::getPayableBillId));
|
||||
.collect(Collectors.groupingBy(
|
||||
OmsPayableTicketDetail::getPayableBillId,
|
||||
Collectors.toMap(
|
||||
OmsPayableTicketDetail::getTicketPlanId,
|
||||
Function.identity(),
|
||||
(d1, d2) -> d1.getCreateTime().after(d2.getCreateTime()) ? d1 : d2
|
||||
)
|
||||
));
|
||||
for (OmsPayableBill payableBill : omsPayableBills) {
|
||||
|
||||
// 2. 获取当前账单的支付明细 Map(避免 NPE)
|
||||
List<OmsPayableTicketDetail> detailList =
|
||||
payableListMap.getOrDefault(payableBill.getId(), Collections.emptyList());
|
||||
Map<Long, OmsPayableTicketDetail> paymentDetailMap =
|
||||
planMap.getOrDefault(payableBill.getId(), Collections.emptyMap());
|
||||
|
||||
if (CollUtil.isNotEmpty(detailList)) {
|
||||
if (CollUtil.isNotEmpty(paymentDetailMap)) {
|
||||
|
||||
// 3. 按支付状态汇总金额
|
||||
Map<String, BigDecimal> amountMap =
|
||||
detailList.stream()
|
||||
paymentDetailMap.values().stream()
|
||||
.filter(d -> d.getPaymentAmount() != null)
|
||||
.collect(Collectors.toMap(
|
||||
OmsPayableTicketDetail::getTicketStatus,
|
||||
|
|
@ -516,8 +529,7 @@ public class OmsPayableBillServiceImpl implements IOmsPayableBillService {
|
|||
BigDecimal paidAmount = amountMap
|
||||
.getOrDefault(OmsTicketBill.TicketStatusEnum.TICKET.getCode(), BigDecimal.ZERO)
|
||||
.add(amountMap.getOrDefault(
|
||||
OmsTicketBill.TicketStatusEnum.RED_RUSH.getCode(), BigDecimal.ZERO))
|
||||
.subtract(amountMap.getOrDefault(OmsTicketBill.TicketStatusEnum.WAIT_RED_RUSH.getCode(), BigDecimal.ZERO));
|
||||
OmsTicketBill.TicketStatusEnum.RED_RUSH.getCode(), BigDecimal.ZERO));
|
||||
|
||||
BigDecimal waitPayAmount =
|
||||
amountMap.getOrDefault(
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ public class OmsPayablePaymentDetailServiceImpl implements IOmsPayablePaymentDet
|
|||
}
|
||||
|
||||
@Override
|
||||
public void deleteByPaymentCode(String paymentBillCode) {
|
||||
omsPayablePaymentDetailMapper.deleteByPaymentCode(paymentBillCode);
|
||||
public void deleteByPaymentCode(String payableBillCode) {
|
||||
omsPayablePaymentDetailMapper.deleteByPaymentCode(payableBillCode);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -473,7 +473,7 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
|
|||
if (OmsPaymentBill.PaymentBillTypeEnum.REFUND.getCode().equals(existBill.getPaymentBillType())){
|
||||
// 撤销退款单
|
||||
deleteOmsPaymentBillById(existBill.getId());
|
||||
detailService.deleteByPaymentCode(existBill.getPaymentBillCode());
|
||||
detailService.deleteByPaymentCode(existBill.getPayableBillCode());
|
||||
OmsPaymentBill omsPaymentBill = new OmsPaymentBill();
|
||||
omsPaymentBill.setId(existBill.getOriginalBillId());
|
||||
omsPaymentBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
|
||||
|
|
|
|||
|
|
@ -4,31 +4,23 @@ import cn.hutool.core.collection.CollUtil;
|
|||
import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.ruoyi.common.config.RuoYiConfig;
|
||||
import com.ruoyi.common.config.flow.ProcessConfig;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.enums.ApproveStatusEnum;
|
||||
import com.ruoyi.common.utils.DateUtils;
|
||||
import com.ruoyi.common.utils.ShiroUtils;
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
import com.ruoyi.common.utils.file.FileUploadUtils;
|
||||
import com.ruoyi.sip.domain.*;
|
||||
import com.ruoyi.sip.domain.dto.ReceiptDetailDTO;
|
||||
import com.ruoyi.sip.flowable.domain.Todo;
|
||||
import com.ruoyi.sip.flowable.service.TodoCommonTemplate;
|
||||
import com.ruoyi.sip.flowable.service.TodoService;
|
||||
import com.ruoyi.sip.mapper.OmsReceiptBillMapper;
|
||||
import com.ruoyi.sip.service.*;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.rmi.ServerException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -39,8 +31,7 @@ import java.util.stream.Collectors;
|
|||
*/
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCommonTemplate {
|
||||
public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService {
|
||||
|
||||
@Resource
|
||||
private OmsReceiptBillMapper omsReceiptBillMapper;
|
||||
|
|
@ -54,11 +45,6 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
@Autowired
|
||||
private IOmsReceivableWriteOffService omsReceivableWriteOffService;
|
||||
|
||||
@Autowired
|
||||
private TodoService todoService;
|
||||
@Autowired
|
||||
private ProcessConfig processConfig;
|
||||
|
||||
/**
|
||||
* 查询列表数据
|
||||
*
|
||||
|
|
@ -96,12 +82,8 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
omsReceiptBill.setCreateTime(DateUtils.getNowDate());
|
||||
omsReceiptBill.setCreateBy(ShiroUtils.getUserId().toString());
|
||||
omsReceiptBill.setReceiptBillCode(generateReceiptBillCode());
|
||||
if (StringUtils.isEmpty(omsReceiptBill.getReceiptStatus())) {
|
||||
omsReceiptBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode());
|
||||
}
|
||||
if (StringUtils.isEmpty(omsReceiptBill.getApproveStatus())) {
|
||||
omsReceiptBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
||||
}
|
||||
return omsReceiptBillMapper.insert(omsReceiptBill);
|
||||
}
|
||||
|
||||
|
|
@ -180,12 +162,6 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
|
||||
@Override
|
||||
public void applyReceipt(OmsReceiptBill omsReceiptBill, MultipartFile file) throws IOException {
|
||||
OmsReceiptBill receiptBill = queryById(omsReceiptBill.getId());
|
||||
if (!receiptBill.getApproveStatus().equals(ApproveStatusEnum.WAIT_COMMIT.getCode())){
|
||||
throw new ServerException("审批状态不为待审批");
|
||||
}
|
||||
|
||||
|
||||
omsReceiptBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
|
||||
|
||||
|
||||
|
|
@ -207,15 +183,6 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
attachment.setFileType(file.getContentType());
|
||||
attachment.setCreateBy(loginUser.getUserId().toString());
|
||||
attachmentService.insertOmsFinAttachment(attachment);
|
||||
//开始审批
|
||||
todoService.startProcessDeleteBefore(receiptBill.getReceiptBillCode(), receiptBill.getReceiptBillCode()
|
||||
, new HashMap<String, Object>() {{
|
||||
put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
||||
put("applyUser", ShiroUtils.getUserId());
|
||||
}}
|
||||
, processConfig.getDefinition().getFinanceReceiptApprove());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -233,12 +200,7 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
return AjaxResult.error("当前订单已提交审批,请刷新后重试");
|
||||
}
|
||||
receiptBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
|
||||
todoService.startProcessDeleteBefore(receiptBill.getReceiptBillCode(), receiptBill.getReceiptBillCode()
|
||||
, new HashMap<String, Object>() {{
|
||||
put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
||||
put("applyUser", ShiroUtils.getUserId());
|
||||
}}
|
||||
, processConfig.getDefinition().getFinanceReceiptRefound());
|
||||
//todo 开启流程
|
||||
update(receiptBill);
|
||||
return AjaxResult.success("退款申请成功!");
|
||||
}
|
||||
|
|
@ -268,12 +230,12 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
refundBill.setReceiptBillCode(generateReceiptBillCode());
|
||||
// 设置新属性
|
||||
refundBill.setReceiptBillType(OmsReceiptBill.ReceiptBillTypeEnum.REFUND.getCode());
|
||||
refundBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.WAIT_REFUNDED.getCode());
|
||||
refundBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode());
|
||||
refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
|
||||
refundBill.setOriginalBillId(receiptBill.getId());
|
||||
refundBill.setReceiptTime(DateUtils.getNowDate());
|
||||
refundBill.setReceiptTime(null);
|
||||
refundBill.setReceiptMethod(omsReceiptBill.getReceiptMethod());
|
||||
refundBill.setRemark("退款-关联原付款单:" + receiptBill.getReceiptBillCode());
|
||||
refundBill.setRemark("退款-关联原付款单:" + omsReceiptBill.getReceiptBillCode());
|
||||
|
||||
insert(refundBill);
|
||||
|
||||
|
|
@ -283,12 +245,12 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
//4 创建付款明细
|
||||
omsReceivableReceiptDetailService.applyRefund(receiptBill.getReceiptBillCode(), refundBill.getReceiptBillCode());
|
||||
//5. 开始退款审批流程
|
||||
todoService.startProcessDeleteBefore(receiptBill.getReceiptBillCode(), refundBill.getReceiptBillCode(),
|
||||
new HashMap<String, Object>() {{
|
||||
put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
||||
put("applyUser", ShiroUtils.getUserId());
|
||||
}}
|
||||
, processConfig.getDefinition().getFinanceReceiptRefound());
|
||||
// todoService.startProcessDeleteBefore(originalBill.getPaymentBillCode(), originalBill.getPaymentBillCode(),
|
||||
// new HashMap<String, Object>() {{
|
||||
// put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
||||
// put("applyUser", ShiroUtils.getUserId());
|
||||
// }}
|
||||
// , processConfig.getDefinition().getFinanceRefund());
|
||||
return AjaxResult.success("退款申请已提交,新的退款单号为:" + refundBill.getReceiptBillCode());
|
||||
}
|
||||
|
||||
|
|
@ -462,132 +424,6 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
|||
|
||||
return omsReceiptBills;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OmsReceiptBill> listApprove(OmsReceiptBill omsReceiptBill) {
|
||||
omsReceiptBill.setApproveUser(ShiroUtils.getUserId());
|
||||
return omsReceiptBillMapper.listApprove(omsReceiptBill,
|
||||
todoService.getFlowRelationSql("bu_todo",
|
||||
Arrays.asList(omsReceiptBill.getProcessKey()),
|
||||
ShiroUtils.getUserId(),
|
||||
Collections.singletonList("商务"),
|
||||
()->{
|
||||
return "t1.receipt_bill_code";
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OmsReceiptBill> listApproved(OmsReceiptBill omsReceiptBill) {
|
||||
omsReceiptBill.setApproveUser(ShiroUtils.getUserId());
|
||||
return omsReceiptBillMapper.listApprove(omsReceiptBill, todoService.getFlowRelationSql("bu_todo_completed",
|
||||
Arrays.asList(omsReceiptBill.getProcessKey()),
|
||||
ShiroUtils.getUserId(),
|
||||
Collections.singletonList("商务"),
|
||||
()->{
|
||||
return "t1.receipt_bill_code";
|
||||
}));
|
||||
}
|
||||
|
||||
@Override
|
||||
public AjaxResult revoke(OmsReceiptBill omsReceiptBill) {
|
||||
OmsReceiptBill existBill = queryById(omsReceiptBill.getId());
|
||||
|
||||
if (existBill == null){
|
||||
return AjaxResult.error("收款单不存在,请刷新后重试");
|
||||
}
|
||||
if (OmsReceiptBill.ReceiptBillTypeEnum.REFUND.getCode().equals(existBill.getReceiptBillType())){
|
||||
// 撤销退款单
|
||||
deleteById(existBill.getId());
|
||||
omsReceivableReceiptDetailService.deleteByBillCode(existBill.getReceiptBillCode());
|
||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||
updateBill.setId(existBill.getOriginalBillId());
|
||||
updateBill.setRefundStatus(OmsReceiptBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
|
||||
update(updateBill);
|
||||
}else{
|
||||
// 撤销付款单
|
||||
omsReceiptBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
||||
omsReceiptBillMapper.revoke(omsReceiptBill);
|
||||
}
|
||||
return AjaxResult.success("撤销成功");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Object todoDetail(String businessKey, String processKey, String todoId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object completedTodoDetail(String businessKey, String processKey, String todoId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillBusinessInfo(List<Todo> todoCompletedList) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean todoApproveCallback(Todo todo) {
|
||||
if (CollUtil.isEmpty(todo.getVariables())) {
|
||||
return TodoCommonTemplate.super.todoApproveCallback(todo);
|
||||
}
|
||||
|
||||
Integer approveBtn = (Integer) todo.getVariables().get("approveBtn");
|
||||
if (approveBtn == null) {
|
||||
return TodoCommonTemplate.super.todoApproveCallback(todo);
|
||||
}
|
||||
String taskName = todo.getTaskName();
|
||||
String businessKey = todo.getBusinessKey();
|
||||
OmsReceiptBill receiptBill = omsReceiptBillMapper.queryByCode(businessKey);
|
||||
if (approveBtn.equals(0)) {
|
||||
if (receiptBill != null) {
|
||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||
updateBill.setId(receiptBill.getId());
|
||||
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_REJECT.getCode());
|
||||
omsReceiptBillMapper.update(updateBill);
|
||||
}
|
||||
}else{
|
||||
if (todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptApprove()) && taskName.startsWith("财务")){
|
||||
//处理收款审批
|
||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||
updateBill.setId(receiptBill.getId());
|
||||
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||
updateBill.setActualReceiptTime(DateUtils.getNowDate());
|
||||
updateBill.setApproveTime(DateUtils.getNowDate());
|
||||
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode());
|
||||
if (receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())){
|
||||
updateBill.setRemainingAmount(receiptBill.getTotalPriceWithTax());
|
||||
}
|
||||
omsReceiptBillMapper.update(updateBill);
|
||||
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||
}else if(todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptRefound()) && taskName.startsWith("公司领导")){
|
||||
//处理退款审批
|
||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||
updateBill.setId(receiptBill.getId());
|
||||
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||
updateBill.setApproveTime(DateUtils.getNowDate());
|
||||
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode());
|
||||
omsReceiptBillMapper.update(updateBill);
|
||||
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return TodoCommonTemplate.super.todoApproveCallback(todo);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean multiInstanceApproveCallback(String activityName, ProcessInstance processInstance) {
|
||||
return TodoCommonTemplate.super.multiInstanceApproveCallback(activityName, processInstance);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package com.ruoyi.sip.service.impl;
|
|||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
|
@ -145,17 +144,10 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
@Override
|
||||
public OmsReceivableBill query(Long id) {
|
||||
OmsReceivableBill omsReceivableBill = omsReceivableBillMapper.selectOmsReceivableBillById(id);
|
||||
|
||||
if (omsReceivableBill != null) {
|
||||
List<OmsReceivableReceiptDetail> detailList = detailService.listByReceivableBillId(id);
|
||||
omsReceivableBill.setDetailList(detailList);
|
||||
List<OmsReceivableInvoiceDetail> omsReceivableInvoiceDetails = invoiceDetailService.listByReceivableBillId(id);
|
||||
omsReceivableBill.setInvoiceDetailList(omsReceivableInvoiceDetails);
|
||||
List<OmsReceiptBill> receiptBills = receiptBillService.listRemainingAmountByPartnerCodeList(Collections.singletonList(omsReceivableBill.getPartnerCode()));
|
||||
Map<String, BigDecimal> decimalMap = receiptBills.stream().filter(item -> item.getRemainingAmount() != null)
|
||||
.collect(Collectors.toMap(OmsReceiptBill::getPartnerCode, OmsReceiptBill::getRemainingAmount, BigDecimal::add));
|
||||
omsReceivableBill.setRemainingAmount(decimalMap.getOrDefault(omsReceivableBill.getPartnerCode(), BigDecimal.ZERO));
|
||||
}
|
||||
return omsReceivableBill;
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +159,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
if (CollUtil.isEmpty(dto.getReceivableBills())) {
|
||||
return 0;
|
||||
}
|
||||
Date minPlanDate=DateUtils.getNowDate();
|
||||
|
||||
// Fetch bills once
|
||||
for (ReceivableOrderReceiptDto order : dto.getReceivableBills()) {
|
||||
BigDecimal taxRate = order.getTaxRate();
|
||||
|
|
@ -176,7 +168,6 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
taxRate = new BigDecimal(defaultTax);
|
||||
}
|
||||
for (OmsReceivableReceiptPlan plan : order.getReceiptPlans()) {
|
||||
minPlanDate=minPlanDate.after(plan.getPlanReceiptDate())?plan.getPlanReceiptDate():minPlanDate;
|
||||
// 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数
|
||||
// 计算未税金额 = planAmount / (1 + 税率)
|
||||
BigDecimal divisor = BigDecimal.ONE.add(taxRate);
|
||||
|
|
@ -191,7 +182,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
receiptBill.setReceiptBillType(OmsReceiptBill.ReceiptBillTypeEnum.FROM_RECEIVABLE.getCode());
|
||||
receiptBill.setPartnerCode(firstReceivableBill.getPartnerCode());
|
||||
receiptBill.setPartnerName(firstReceivableBill.getPartnerName());
|
||||
receiptBill.setReceiptTime(dto.getEstimatedReceiptTime()==null?minPlanDate:dto.getEstimatedReceiptTime());
|
||||
receiptBill.setReceiptTime(dto.getEstimatedReceiptTime());
|
||||
receiptBill.setTotalPriceWithTax(dto.getTotalMergeReceiptAmount());
|
||||
receiptBill.setTotalPriceWithoutTax(totalWithoutTax);
|
||||
receiptBill.setTaxAmount(dto.getTotalMergeReceiptAmount().subtract(totalWithoutTax));
|
||||
|
|
@ -277,13 +268,20 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
}
|
||||
|
||||
List<OmsReceivableInvoiceDetail> invoiceDetails = invoiceDetailService.listByReceivableBillIdList(idList);
|
||||
Map<Long, List< OmsReceivableInvoiceDetail>> receivableInvoiceDetailMap = invoiceDetails.stream().collect(Collectors.groupingBy(OmsReceivableInvoiceDetail::getReceivableBillId ));
|
||||
Map<Long, Map<Long, OmsReceivableInvoiceDetail>> planMap = invoiceDetails.stream().collect(Collectors.groupingBy(
|
||||
OmsReceivableInvoiceDetail::getReceivableBillId,
|
||||
Collectors.toMap(
|
||||
OmsReceivableInvoiceDetail::getInvoicePlanId,
|
||||
Function.identity(),
|
||||
(d1, d2) -> d1.getCreateTime().after(d2.getCreateTime()) ? d1 : d2
|
||||
)
|
||||
));
|
||||
for (OmsReceivableBill bill : bills) {
|
||||
List<OmsReceivableInvoiceDetail> detailList =
|
||||
receivableInvoiceDetailMap.getOrDefault(bill.getId(), Collections.emptyList());
|
||||
if (CollUtil.isNotEmpty(detailList)) {
|
||||
Map<Long, OmsReceivableInvoiceDetail> paymentDetailMap =
|
||||
planMap.getOrDefault(bill.getId(), Collections.emptyMap());
|
||||
if (CollUtil.isNotEmpty(paymentDetailMap)) {
|
||||
Map<String, BigDecimal> amountMap =
|
||||
detailList.stream()
|
||||
paymentDetailMap.values().stream()
|
||||
.filter(d -> d.getInvoiceAmount() != null)
|
||||
.collect(Collectors.toMap(
|
||||
OmsReceivableInvoiceDetail::getInvoiceStatus,
|
||||
|
|
@ -294,8 +292,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
BigDecimal paidAmount = amountMap
|
||||
.getOrDefault(OmsInvoiceBill.InvoiceStatusEnum.INVOICE.getCode(), BigDecimal.ZERO)
|
||||
.add(amountMap.getOrDefault(
|
||||
OmsInvoiceBill.InvoiceStatusEnum.RED_RUSH.getCode(), BigDecimal.ZERO))
|
||||
.subtract(amountMap.getOrDefault( OmsInvoiceBill.InvoiceStatusEnum.WAIT_RED_RUSH.getCode(), BigDecimal.ZERO));
|
||||
OmsInvoiceBill.InvoiceStatusEnum.RED_RUSH.getCode(), BigDecimal.ZERO));
|
||||
|
||||
BigDecimal waitPayAmount =
|
||||
amountMap.getOrDefault(
|
||||
|
|
@ -318,7 +315,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
if (CollUtil.isEmpty(dto.getReceivableBills())) {
|
||||
return 0;
|
||||
}
|
||||
Date minPlanDate=DateUtils.getNowDate();
|
||||
|
||||
|
||||
// Fetch bills once
|
||||
for (ReceivableOrderInvoiceDto order : dto.getReceivableBills()) {
|
||||
|
|
@ -330,7 +327,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
order.setTaxRate(taxRate);
|
||||
for (OmsReceivableInvoicePlan plan : order.getInvoicePlans()) {
|
||||
// 计算每个 plan 的未税金额 = planAmount / (1 + 税率),保留两位小数
|
||||
minPlanDate = minPlanDate.after(plan.getPlanInvoiceDate()) ? plan.getPlanInvoiceDate() : minPlanDate;
|
||||
|
||||
// 计算未税金额 = planAmount / (1 + 税率)
|
||||
BigDecimal divisor = BigDecimal.ONE.add(taxRate);
|
||||
BigDecimal planWithoutTax = plan.getPlanAmount().divide(divisor, 2, java.math.RoundingMode.HALF_UP);
|
||||
|
|
@ -342,7 +339,7 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
OmsInvoiceBill invoiceBill = new OmsInvoiceBill();
|
||||
OmsReceivableBill firstReceivableBill = selectOmsReceivableBillById(dto.getReceivableBills().get(0).getId());
|
||||
invoiceBill.setInvoiceBillType(dto.getInvoiceBillType());
|
||||
invoiceBill.setInvoiceTime(dto.getInvoiceTime()==null?minPlanDate:dto.getInvoiceTime());
|
||||
invoiceBill.setInvoiceTime(dto.getInvoiceTime());
|
||||
invoiceBill.setPartnerCode(firstReceivableBill.getPartnerCode());
|
||||
invoiceBill.setPartnerName(firstReceivableBill.getPartnerName());
|
||||
invoiceBill.setTotalPriceWithTax(dto.getTotalMergeInvoiceAmount());
|
||||
|
|
@ -441,14 +438,21 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
|
||||
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = detailService.listByReceivableBillIdList(idList);
|
||||
|
||||
Map<Long, List<OmsReceivableReceiptDetail>> receiverableReceiptDetailMap = omsReceivableReceiptDetailList.stream().collect(Collectors.groupingBy(OmsReceivableReceiptDetail::getReceivableBillId ));
|
||||
Map<Long, Map<Long, OmsReceivableReceiptDetail>> planMap = omsReceivableReceiptDetailList.stream().collect(Collectors.groupingBy(
|
||||
OmsReceivableReceiptDetail::getReceivableBillId,
|
||||
Collectors.toMap(
|
||||
OmsReceivableReceiptDetail::getReceiptPlanId,
|
||||
Function.identity(),
|
||||
(d1, d2) -> d1.getCreateTime().after(d2.getCreateTime()) ? d1 : d2
|
||||
)
|
||||
));
|
||||
|
||||
for (OmsReceivableBill bill : receivableBills) {
|
||||
List< OmsReceivableReceiptDetail> detailList =
|
||||
receiverableReceiptDetailMap.getOrDefault(bill.getId(), Collections.emptyList());
|
||||
if (CollUtil.isNotEmpty(detailList)) {
|
||||
Map<Long, OmsReceivableReceiptDetail> paymentDetailMap =
|
||||
planMap.getOrDefault(bill.getId(), Collections.emptyMap());
|
||||
if (CollUtil.isNotEmpty(paymentDetailMap)) {
|
||||
Map<String, BigDecimal> amountMap =
|
||||
detailList.stream()
|
||||
paymentDetailMap.values().stream()
|
||||
.filter(d -> d.getReceiptAmount() != null)
|
||||
.collect(Collectors.toMap(
|
||||
OmsReceivableReceiptDetail::getReceiptStatus,
|
||||
|
|
@ -459,12 +463,11 @@ public class OmsReceivableBillServiceImpl implements IOmsReceivableBillService
|
|||
BigDecimal paidAmount = amountMap
|
||||
.getOrDefault(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode(), BigDecimal.ZERO)
|
||||
.add(amountMap.getOrDefault(
|
||||
OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode(), BigDecimal.ZERO))
|
||||
//减去等待退款的数据 因为退款是负数
|
||||
.subtract(amountMap.getOrDefault( OmsReceiptBill.ReceiptStatusEnum.WAIT_REFUNDED.getCode(), BigDecimal.ZERO));
|
||||
OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode(), BigDecimal.ZERO));
|
||||
|
||||
BigDecimal waitPayAmount =
|
||||
amountMap.getOrDefault(OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode(), BigDecimal.ZERO);
|
||||
amountMap.getOrDefault(
|
||||
OmsReceiptBill.ReceiptStatusEnum.WAIT_PAYMENT.getCode(), BigDecimal.ZERO);
|
||||
bill.setReceivedAmount(paidAmount);
|
||||
bill.setUnreceivedAmount(bill.getTotalPriceWithTax() .subtract(paidAmount)
|
||||
.subtract(waitPayAmount));
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ public class OmsReceivableReceiptDetailServiceImpl implements IOmsReceivableRece
|
|||
omsFinAttachment.setRelatedBillType(OmsFinAttachment.RelatedBillTypeEnum.RECEIPT.getCode());
|
||||
omsFinAttachment.setDelFlag("0");
|
||||
List<OmsFinAttachment> attachmentList = finAttachmentService.selectOmsFinAttachmentList(omsFinAttachment);
|
||||
Map<Long, OmsFinAttachment> collect = attachmentList.stream().collect(Collectors.toMap(OmsFinAttachment::getRelatedBillId, Function.identity(),(v1,v2)->v1.getCreateTime().after(v2.getCreateTime())?v1:v2));
|
||||
Map<Long, OmsFinAttachment> collect = attachmentList.stream().collect(Collectors.toMap(OmsFinAttachment::getRelatedBillId, Function.identity()));
|
||||
for (OmsReceivableReceiptDetail payablePaymentDetail : list) {
|
||||
payablePaymentDetail.setFinAttachment(collect.get(payablePaymentDetail.getReceiptBillId()));
|
||||
}
|
||||
|
|
@ -224,9 +224,4 @@ public class OmsReceivableReceiptDetailServiceImpl implements IOmsReceivableRece
|
|||
omsReceivableReceiptDetail.setReceiptPlanIdList(planIdList);
|
||||
return omsReceivableReceiptDetailMapper.list(omsReceivableReceiptDetail);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByBillCode(String receiptBillCode) {
|
||||
omsReceivableReceiptDetailMapper.deleteByBillCode(receiptBillCode);
|
||||
}
|
||||
}
|
||||
|
|
@ -83,9 +83,7 @@ public class OmsReceivableReceiptPlanServiceImpl implements IOmsReceivableReceip
|
|||
for (OmsReceivableReceiptPlan omsReceivableReceiptPlan : omsReceivableReceiptPlans) {
|
||||
//找到最新的一条数据 如果不是退款 那么不允许再次勾选
|
||||
OmsReceivableReceiptDetail omsReceivableReceiptDetail = detailMap.get(omsReceivableReceiptPlan.getId());
|
||||
if (omsReceivableReceiptDetail != null &&
|
||||
!(OmsReceivableReceiptDetail.ReceivableDetailTypeEnum.REFUND.getCode().equalsIgnoreCase(omsReceivableReceiptDetail.getReceivableDetailType())
|
||||
&& omsReceivableReceiptDetail.getReceiptStatus().equals(OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode())))
|
||||
if (omsReceivableReceiptDetail != null && !OmsReceivableReceiptDetail.ReceivableDetailTypeEnum.REFUND.getCode().equalsIgnoreCase(omsReceivableReceiptDetail.getReceivableDetailType()))
|
||||
omsReceivableReceiptPlan.setDetailId(omsReceivableReceiptDetail.getId());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
select
|
||||
t1.id, t1.receipt_bill_code, t1.receipt_bill_type, t1.receipt_time, t1.actual_receipt_time, t1.partner_code,
|
||||
t1.order_code, t1.total_price_with_tax, t1.total_price_without_tax, t1.tax_amount, t1.create_by, t1.create_time, t1.update_by, t1.update_time, t1.remark, t1.del_flag, t1.project_code, t1.project_name, t1.receipt_status, t1.approve_status, t1.approve_node, t1.approve_time, t1.receipt_method, t1.receipt_account_name, t1.receipt_bank_number, t1.receipt_bank_open_address, t1.bank_number, t1.refund_status,
|
||||
t1.remaining_amount,t2.partner_name,t1.original_bill_id
|
||||
t1.remaining_amount,t2.partner_name
|
||||
from oms_receipt_bill t1
|
||||
left join partner_info t2 on t1.partner_code=t2.partner_code
|
||||
</sql>
|
||||
|
|
@ -57,31 +57,6 @@
|
|||
<if test="receiptBillCode != null and receiptBillCode != ''">
|
||||
and t1.receipt_bill_code = #{receiptBillCode}
|
||||
</if>
|
||||
<if test="projectCode != null and projectCode != ''">
|
||||
and t1.receipt_bill_code in (
|
||||
select t1.receipt_bill_code from oms_payable_ticket_detail t1
|
||||
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
|
||||
inner join project_order_info t3 on t2.order_code=t3.order_code
|
||||
inner join project_info t4 on t3.project_id=t4.id
|
||||
where t4.project_code = #{projectCode}
|
||||
)
|
||||
</if>
|
||||
<if test="projectName != null and projectName != ''">
|
||||
and t1.receipt_bill_code in (
|
||||
select t1.receipt_bill_code from oms_payable_ticket_detail t1
|
||||
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
|
||||
inner join project_order_info t3 on t2.order_code=t3.order_code
|
||||
inner join project_info t4 on t3.project_id=t4.id
|
||||
where t4.project_name like concat('%',#{projectName},'%')
|
||||
)
|
||||
</if>
|
||||
<if test="receivableBillCode != null and receivableBillCode != ''">
|
||||
t1.receipt_bill_code in (
|
||||
select receipt_bill_code from oms_receivable_receipt_detail orrd
|
||||
left join oms_receivable_bill orb on orrd.receivable_bill_id=orb.ID
|
||||
where orb.receivable_bill_code=#{receivableBillCode}
|
||||
)
|
||||
</if>
|
||||
<if test="receiptBillCodeList != null and receiptBillCodeList != ''">
|
||||
and t1.receipt_bill_code in
|
||||
<foreach collection="receiptBillCodeList" item="item" separator="," open="(" close=")">
|
||||
|
|
@ -111,9 +86,6 @@
|
|||
<if test="partnerCode != null and partnerCode != ''">
|
||||
and t1.partner_code = #{partnerCode}
|
||||
</if>
|
||||
<if test="partnerName != null and partnerName != ''">
|
||||
and t1.partner_name = #{partnerName}
|
||||
</if>
|
||||
<if test="orderCode != null and orderCode != ''">
|
||||
and t1.order_code = #{orderCode}
|
||||
</if>
|
||||
|
|
@ -144,6 +116,12 @@
|
|||
<if test="delFlag != null and delFlag != ''">
|
||||
and t1.del_flag = #{delFlag}
|
||||
</if>
|
||||
<if test="projectCode != null and projectCode != ''">
|
||||
and t1.project_code = #{projectCode}
|
||||
</if>
|
||||
<if test="projectName != null and projectName != ''">
|
||||
and t1.project_name = #{projectName}
|
||||
</if>
|
||||
<if test="receiptStatus != null and receiptStatus != ''">
|
||||
and t1.receipt_status = #{receiptStatus}
|
||||
</if>
|
||||
|
|
@ -151,11 +129,7 @@
|
|||
and t1.approve_status = #{approveStatus}
|
||||
</if>
|
||||
<if test="approveNode != null and approveNode != ''">
|
||||
and t1.receipt_bill_code in
|
||||
(
|
||||
select business_key from bu_todo where approve_user_name like concat('%', #{approveNode}, '%') and process_key in (
|
||||
'finance_ticket_refound','fianance_ticket')
|
||||
)
|
||||
and t1.approve_node = #{approveNode}
|
||||
</if>
|
||||
<if test="approveTime != null">
|
||||
and t1.approve_time = #{approveTime}
|
||||
|
|
@ -178,56 +152,43 @@
|
|||
<if test="refundStatus != null and refundStatus != ''">
|
||||
and t1.refund_status = #{refundStatus}
|
||||
</if>
|
||||
<if test="(params.beginApproveTime != null and params.beginApproveTime != '') or (params.endApproveTime != null and params.endApproveTime!='')">
|
||||
<choose>
|
||||
<when test="(params.beginApproveTime != null and params.beginApproveTime != '') and (params.endApproveTime != null and params.endApproveTime!='')">
|
||||
and t1.approve_time between #{params.beginApproveTime} and #{params.endApproveTime}
|
||||
</when>
|
||||
<when test="(params.beginApproveTime != null and params.beginApproveTime != '')">
|
||||
and t1.approve_time <![CDATA[ >= ]]> #{params.beginApproveTime}
|
||||
</when>
|
||||
<when test="(params.endApproveTime != null and params.endApproveTime!='')">
|
||||
and t1.approve_time <![CDATA[ <= ]]> #{params.endApproveTime}
|
||||
</when>
|
||||
|
||||
</choose>
|
||||
</if>
|
||||
<if test="(params.beginPlanReceiveTime != null and params.beginPlanReceiveTime != '') or (params.endPlanReceiveTime != null and params.endPlanReceiveTime!='')">
|
||||
<choose>
|
||||
<when test="(params.beginPlanReceiveTime != null and params.beginPlanReceiveTime != '') and (params.endPlanReceiveTime != null and params.endPlanReceiveTime!='')">
|
||||
and t1.receipt_time between #{params.beginPlanReceiveTime} and #{params.endPlanReceiveTime}
|
||||
</when>
|
||||
<when test="(params.beginPlanReceiveTime != null and params.beginPlanReceiveTime != '')">
|
||||
and t1.receipt_time <![CDATA[ >= ]]> #{params.beginPlanReceiveTime}
|
||||
</when>
|
||||
<when test="(params.endPlanReceiveTime != null and params.endPlanReceiveTime!='')">
|
||||
and t1.receipt_time <![CDATA[ <= ]]> #{params.endPlanReceiveTime}
|
||||
</when>
|
||||
|
||||
</choose>
|
||||
</if>
|
||||
<if test="(params.beginActualReceiveTime != null and params.beginActualReceiveTime != '') or (params.endActualReceiveTime != null and params.endActualReceiveTime!='')">
|
||||
<choose>
|
||||
<when test="(params.beginActualReceiveTime != null and params.beginActualReceiveTime != '') and (params.endActualReceiveTime != null and params.endActualReceiveTime!='')">
|
||||
and t1.actual_receipt_time between #{params.beginActualReceiveTime} and #{params.endActualReceiveTime}
|
||||
</when>
|
||||
<when test="(params.beginActualReceiveTime != null and params.beginActualReceiveTime != '')">
|
||||
and t1.actual_receipt_time <![CDATA[ >= ]]> #{params.beginActualReceiveTime}
|
||||
</when>
|
||||
<when test="(params.endActualReceiveTime != null and params.endActualReceiveTime!='')">
|
||||
and t1.actual_receipt_time <![CDATA[ <= ]]> #{params.endActualReceiveTime}
|
||||
</when>
|
||||
|
||||
</choose>
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
||||
<!--根据ID查详情-->
|
||||
<select id="queryById" parameterType="Long" resultMap="OmsReceiptBillMap">
|
||||
<include refid="selectReceiptBillVo"/>
|
||||
WHERE t1.id = #{id}
|
||||
SELECT id,
|
||||
receipt_bill_code,
|
||||
receipt_bill_type,
|
||||
receipt_time,
|
||||
actual_receipt_time,
|
||||
partner_code,
|
||||
order_code,
|
||||
total_price_with_tax,
|
||||
total_price_without_tax,
|
||||
tax_amount,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
remark,
|
||||
del_flag,
|
||||
project_code,
|
||||
project_name,
|
||||
receipt_status,
|
||||
approve_status,
|
||||
approve_node,
|
||||
approve_time,
|
||||
receipt_method,
|
||||
receipt_account_name,
|
||||
receipt_bank_number,
|
||||
receipt_bank_open_address,
|
||||
bank_number,
|
||||
refund_status,
|
||||
remaining_amount
|
||||
FROM oms_receipt_bill
|
||||
WHERE id = #{id}
|
||||
LIMIT 1
|
||||
</select>
|
||||
<select id="selectMaxCodeByPrefix" resultType="java.lang.Integer">
|
||||
|
|
@ -253,98 +214,6 @@
|
|||
receipt_bill_code = #{receiptBillCode}
|
||||
</where>
|
||||
</select>
|
||||
<select id="listApprove" resultType="com.ruoyi.sip.domain.OmsReceiptBill">
|
||||
select
|
||||
t1.id, t1.receipt_bill_code, t1.receipt_bill_type, t1.receipt_time, t1.actual_receipt_time, t1.partner_code,
|
||||
t1.order_code, t1.total_price_with_tax, t1.total_price_without_tax, t1.tax_amount, t1.create_by, t1.create_time, t1.update_by, t1.update_time, t1.remark, t1.del_flag, t1.project_code, t1.project_name, t1.receipt_status, t1.approve_status, t1.approve_node, t1.approve_time, t1.receipt_method, t1.receipt_account_name, t1.receipt_bank_number, t1.receipt_bank_open_address, t1.bank_number, t1.refund_status,
|
||||
t1.remaining_amount,t2.partner_name
|
||||
${flowRelationDto.querySql}
|
||||
from oms_receipt_bill t1
|
||||
left join partner_info t2 on t1.partner_code=t2.partner_code
|
||||
${flowRelationDto.joinSql}
|
||||
<where>
|
||||
<if test="entity.id != null">
|
||||
and t1.id = #{entity.id}
|
||||
</if>
|
||||
<if test="entity.receiptBillCode != null and entity.receiptBillCode != ''">
|
||||
and t1.receipt_bill_code = #{entity.receiptBillCode}
|
||||
</if>
|
||||
<if test="entity.projectCode != null and entity.projectCode != ''">
|
||||
and t1.receipt_bill_code in (
|
||||
select t1.receipt_bill_code from oms_payable_ticket_detail t1
|
||||
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
|
||||
inner join project_order_info t3 on t2.order_code=t3.order_code
|
||||
inner join project_info t4 on t3.project_id=t4.id
|
||||
where t4.project_code = #{entity.projectCode}
|
||||
)
|
||||
</if>
|
||||
<if test="entity.projectName != null and entity.projectName != ''">
|
||||
and t1.receipt_bill_code in (
|
||||
select t1.receipt_bill_code from oms_payable_ticket_detail t1
|
||||
inner join oms_payable_bill t2 on t1.payable_bill_id=t2.id
|
||||
inner join project_order_info t3 on t2.order_code=t3.order_code
|
||||
inner join project_info t4 on t3.project_id=t4.id
|
||||
where t4.project_name like concat('%',#{entity.projectName},'%')
|
||||
)
|
||||
</if>
|
||||
<if test="entity.receivableBillCode != null and entity.receivableBillCode != ''">
|
||||
t1.receipt_bill_code in (
|
||||
select receipt_bill_code from oms_receivable_receipt_detail orrd
|
||||
left join oms_receivable_bill orb on orrd.receivable_bill_id=orb.ID
|
||||
where orb.receivable_bill_code=#{entity.receivableBillCode}
|
||||
)
|
||||
</if>
|
||||
<if test="entity.receiptBillCodeList != null and entity.receiptBillCodeList != ''">
|
||||
and t1.receipt_bill_code in
|
||||
<foreach collection="entity.receiptBillCodeList" item="item" separator="," open="(" close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="entity.remainingAmount != null and entity.remainingAmount != ''">
|
||||
<choose>
|
||||
<when test="entity.remainingAmount == -1">
|
||||
and t1.remaining_amount != 0
|
||||
</when>
|
||||
<when test="entity.remainingAmount !== -1">
|
||||
and t1.remaining_amount = #{entity.remainingAmount}
|
||||
</when>
|
||||
</choose>
|
||||
</if>
|
||||
<if test="entity.receiptBillType != null and entity.receiptBillType != ''">
|
||||
and t1.receipt_bill_type = #{entity.receiptBillType}
|
||||
</if>
|
||||
|
||||
<if test="entity.partnerCode != null and entity.partnerCode != ''">
|
||||
and t1.partner_code = #{partnerCode}
|
||||
</if>
|
||||
<if test="entity.partnerName != null and entity.partnerName != ''">
|
||||
and t1.partner_name = #{entity.partnerName}
|
||||
</if>
|
||||
|
||||
<if test="entity.approveNode != null and entity.approveNode != ''">
|
||||
and t1.receipt_bill_code in
|
||||
(
|
||||
select business_key from bu_todo where approve_user_name like concat('%', #{entity.approveNode}, '%') and process_key =#{entity.processKey}
|
||||
)
|
||||
</if>
|
||||
|
||||
<if test="(entity.params.beginApplyTime != null and entity.params.beginApplyTime != '') or (entity.params.endApplyTime != null and entity.params.endApplyTime!='')">
|
||||
<choose>
|
||||
<when test="(entity.params.beginApplyTime != null and entity.params.beginApplyTime != '') and (entity.params.endApplyTime != null and entity.params.endApplyTime!='')">
|
||||
and t3.apply_time between #{entity.params.beginApplyTime} and #{entity.params.endApplyTime}
|
||||
</when>
|
||||
<when test="(entity.params.beginApplyTime != null and entity.params.beginApplyTime != '')">
|
||||
and t3.apply_time <![CDATA[ >= ]]> #{entity.params.beginApplyTime}
|
||||
</when>
|
||||
<when test="(entity.params.endApplyTime != null and entity.params.endApplyTime!='')">
|
||||
and t3.apply_time <![CDATA[ <= ]]> #{entity.params.endApplyTime}
|
||||
</when>
|
||||
|
||||
</choose>
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
|
||||
<!--新增所有列-->
|
||||
|
|
@ -435,9 +304,6 @@
|
|||
<if test="remainingAmount != null">
|
||||
remaining_amount,
|
||||
</if>
|
||||
<if test="originalBillId != null">
|
||||
original_bill_id,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="receiptBillCode != null and receiptBillCode != ''">
|
||||
|
|
@ -524,9 +390,6 @@
|
|||
<if test="remainingAmount != null">
|
||||
#{remainingAmount},
|
||||
</if>
|
||||
<if test="originalBillId != null">
|
||||
#{originalBillId},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
|
@ -630,14 +493,6 @@
|
|||
where id = #{item.id}
|
||||
</foreach>
|
||||
</update>
|
||||
<update id="revoke">
|
||||
update oms_receipt_bill
|
||||
set approve_status = #{approveStatus},
|
||||
approve_time =null,
|
||||
remaining_amount=null,
|
||||
update_time=now()
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<!--通过主键删除-->
|
||||
<delete id="deleteById">
|
||||
|
|
|
|||
|
|
@ -52,8 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
t1.update_time
|
||||
from oms_payable_payment_plan t1
|
||||
left join oms_payable_payment_detail t2 on t1.id = t2.payment_plan_id
|
||||
left join oms_payment_bill t3 on t2.payment_bill_code=t3.payment_bill_code
|
||||
where (t2.id is null or t3.payment_status='-1') and t1.payable_bill_id = #{payableBillId}
|
||||
where t2.id is null and t1.payable_bill_id = #{payableBillId}
|
||||
order by plan_payment_date
|
||||
limit 1
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -60,8 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
t1.update_time
|
||||
from oms_payable_ticket_plan t1
|
||||
left join oms_payable_ticket_detail t2 on t1.id=t2.ticket_plan_id
|
||||
left join oms_ticket_bill t3 on t2.ticket_bill_code =t3.ticket_bill_code
|
||||
where (t2.id is null or t3.ticket_status='-1') and t1.payable_bill_id=#{payableBillId}
|
||||
where t2.id is null and t1.payable_bill_id=#{payableBillId}
|
||||
order by t1.plan_ticket_date
|
||||
limit 1
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -116,49 +116,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
, t1.status, t1.approve_status, t1.approve_time, t1.approve_node, t1.confirm_status, t1.create_time, t1.update_time, t1.del_flag,t1.version
|
||||
, t1.file_id
|
||||
,t2.vendor_name,t2.vendor_user,t2.vendor_phone
|
||||
|
||||
<choose>
|
||||
<when test="'bu_todo'.equals(tableName)">
|
||||
,t3.apply_time,t3.process_key,t3.todo_id,t3.task_id
|
||||
</when>
|
||||
<when test="'bu_todo_completed'.equals(tableName)">
|
||||
,t3.apply_time,t3.approve_time as todo_approve_time,t3.process_key
|
||||
</when>
|
||||
</choose>
|
||||
<if test="'bu_todo_completed'.equals(tableName)">
|
||||
,t3.approve_time as todo_approve_time
|
||||
</if>
|
||||
from oms_purchase_order t1
|
||||
left join oms_vendor_info t2 on t1.vendor_id = t2.vendor_id
|
||||
inner join
|
||||
<choose>
|
||||
<when test="'bu_todo'.equals(tableName)">
|
||||
(select bt.business_key,bt.apply_time,bt.process_key,bt.todo_id,bt.task_id from bu_todo bt
|
||||
WHERE
|
||||
bt.process_key IN ('purchase_order_online')
|
||||
AND bt.approve_user = #{entity.approveUser}
|
||||
AND bt.task_name!='商务'
|
||||
)
|
||||
</when>
|
||||
<when test="'bu_todo_completed'.equals(tableName)">
|
||||
(SELECT
|
||||
business_key,
|
||||
max(btc.approve_time) approve_time,
|
||||
max(btc.apply_time) apply_time,
|
||||
max(btc.process_key) process_key
|
||||
|
||||
FROM
|
||||
bu_todo_completed btc
|
||||
WHERE
|
||||
btc.process_key IN ('purchase_order_online')
|
||||
AND btc.approve_user = #{entity.approveUser}
|
||||
AND btc.task_name!='商务'
|
||||
GROUP BY business_key)
|
||||
</when>
|
||||
</choose>
|
||||
t3 on t3.business_key=t1.purchase_no
|
||||
inner join ${tableName} t3 on (t3.process_key in ('purchase_order_online') and t3.approve_user=#{entity.approveUser} and t3.task_name!='商务' and t3.business_key=t1.purchase_no)
|
||||
<where>
|
||||
<if test="entity.purchaseNo != null and entity.purchaseNo != ''"> and t1.purchase_no = #{entity.purchaseNo}</if>
|
||||
<if test="entity.vendorName != null "> and t2.vendor_name = #{entity.vendorName}</if>
|
||||
<if test="entity.ownerName != null "> and t1.owner_name = #{entity.ownerName}</if>
|
||||
<!-- <if test="entity.approveUser != null "> and t3.approve_user = #{entity.approveUser}</if>-->
|
||||
<if test="entity.approveUser != null "> and t3.approve_user = #{entity.approveUser}</if>
|
||||
<if test="entity.params.applyTimeStart != null and entity.params.applyTimeEnd != ''">
|
||||
<choose>
|
||||
<when test="entity.params.applyTimeStart != null and entity.params.applyTimeEnd != null">
|
||||
|
|
|
|||
|
|
@ -64,21 +64,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="inventoryCode != null and inventoryCode != ''"> and t1.inventory_code = #{inventoryCode}</if>
|
||||
<if test="productType != null and productType != ''"> and t1.product_type = #{productType}</if>
|
||||
<if test="createBy != null and createBy != ''"> and t1.create_by = #{createBy}</if>
|
||||
<if test="projectName != null and projectName != ''"> and t3.project_name like concat('%', #{projectName}, '%')</if>
|
||||
<if test="(params.beginPlanReceiptDate != null and params.beginPlanReceiptDate != '') or (params.endPlanReceiptDate != null and params.endPlanReceiptDate!='')">
|
||||
<choose>
|
||||
<when test="(params.beginPlanReceiptDate != null and params.beginPlanReceiptDate != '') and (params.endPlanReceiptDate != null and params.endPlanReceiptDate!='')">
|
||||
and t4.plan_receipt_date between #{params.beginPlanReceiptDate} and #{params.endPlanReceiptDate}
|
||||
</when>
|
||||
<when test="(params.beginPlanReceiptDate != null and params.beginPlanReceiptDate != '')">
|
||||
and t4.plan_receipt_date <![CDATA[ >= ]]> #{params.beginPlanReceiptDate}
|
||||
</when>
|
||||
<when test="(params.endPlanReceiptDate != null and params.endPlanReceiptDate!='')">
|
||||
and t4.plan_receipt_date <![CDATA[ <= ]]> #{params.endPlanReceiptDate}
|
||||
</when>
|
||||
|
||||
</choose>
|
||||
</if>
|
||||
and t1.del_flag = '0'
|
||||
</where>
|
||||
</select>
|
||||
|
|
|
|||
|
|
@ -42,8 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
t1.update_time
|
||||
from oms_receivable_invoice_plan t1
|
||||
left join oms_receivable_invoice_detail t2 on t1.id=t2.invoice_plan_id
|
||||
left join oms_invoice_bill t3 on t2.invoice_bill_code=t3.invoice_bill_code
|
||||
where (t2.id is null or t3.invoice_status='-1') and t1.receivable_bill_id=#{payableBillId}
|
||||
where t2.id is null and t1.receivable_bill_id=#{payableBillId}
|
||||
order by t1.plan_invoice_date
|
||||
limit 1
|
||||
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
ORDER BY t1.create_time DESC
|
||||
</select>
|
||||
<select id="listReceivableByReceiptBillCode" resultType="com.ruoyi.sip.domain.dto.ReceiptDetailDTO">
|
||||
select t1.receipt_amount, t2.receivable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax,t2.product_type
|
||||
select t1.receipt_amount, t2.receivable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax
|
||||
from (SELECT sum(receipt_amount) receipt_amount,
|
||||
receivable_bill_id
|
||||
FROM oms_receivable_receipt_detail
|
||||
|
|
@ -213,9 +213,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteByBillCode">
|
||||
delete
|
||||
from oms_receivable_receipt_detail
|
||||
where receipt_bill_code = #{receiptBillCode}
|
||||
</delete>
|
||||
</mapper>
|
||||
|
|
@ -55,8 +55,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
t1.update_time
|
||||
from oms_receivable_receipt_plan t1
|
||||
left join oms_receivable_receipt_detail t2 on t1.id = t2.receipt_plan_id
|
||||
left join oms_receipt_bill t3 on t2.receipt_bill_code=t3.receipt_bill_code
|
||||
where (t2.id is null or t3.receipt_status='-1') and t1.receivable_bill_id = #{receivableBillId}
|
||||
where t2.id is null and t1.receivable_bill_id = #{receivableBillId}
|
||||
order by plan_receipt_date
|
||||
limit 1
|
||||
</select>
|
||||
|
|
|
|||
Loading…
Reference in New Issue