计费列表增加状态搜索

This commit is contained in:
wuweihua
2026-10-27 13:28:14 +08:00
parent 4659c63ef9
commit 7fcd3b6089
6 changed files with 133 additions and 5 deletions
@@ -31,6 +31,8 @@ public class BatchAddIncomeBillFeeRequest implements Serializable
private List<String> productCodes; private List<String> productCodes;
private String countryCode; private String countryCode;
private String creditArrearsStatus; private String creditArrearsStatus;
/** Same as list filter order_status IN (...). */
private List<Integer> orderStatuses;
/** Same as list filter billing_fail_status IN (...). */ /** Same as list filter billing_fail_status IN (...). */
private List<Integer> billingFailStatuses; private List<Integer> billingFailStatuses;
@@ -21,6 +21,8 @@ public class ChargeWeightTemplateRequest implements Serializable
private List<String> customerCodes; private List<String> customerCodes;
private List<String> productCodes; private List<String> productCodes;
private String creditArrearsStatus; private String creditArrearsStatus;
/** Same as list filter order_status IN (...). */
private List<Integer> orderStatuses;
private String beginBizDate; private String beginBizDate;
private String endBizDate; private String endBizDate;
} }
@@ -25,6 +25,8 @@ public class RecalcBillPriceRequest implements Serializable
private List<String> productCodes; private List<String> productCodes;
private String countryCode; private String countryCode;
private String creditArrearsStatus; private String creditArrearsStatus;
/** Same as list filter order_status IN (...). */
private List<Integer> orderStatuses;
/** Same as list filter billing_fail_status IN (...). */ /** Same as list filter billing_fail_status IN (...). */
private List<Integer> billingFailStatuses; private List<Integer> billingFailStatuses;
private String beginBizDate; private String beginBizDate;
@@ -675,7 +675,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
List<PrcOrderBill> bills = resolveListScopedBills(request.getScopeMode(), request.getBillIds(), List<PrcOrderBill> bills = resolveListScopedBills(request.getScopeMode(), request.getBillIds(),
request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(), request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(),
request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(), request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(),
request.getCreditArrearsStatus(), request.getBillingFailStatuses(), request.getCreditArrearsStatus(), request.getOrderStatuses(), request.getBillingFailStatuses(),
request.getBeginBizDate(), request.getEndBizDate(), request.getBeginBizDate(), request.getEndBizDate(),
"price.bill.recalc.filterRequired", "price.bill.recalc.scopeRequired", "price.bill.recalc.filterRequired", "price.bill.recalc.scopeRequired",
"price.bill.recalc.selectedRequired"); "price.bill.recalc.selectedRequired");
@@ -1251,7 +1251,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
return resolveListScopedBills(request.getScopeMode(), request.getBillIds(), return resolveListScopedBills(request.getScopeMode(), request.getBillIds(),
request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(), request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(),
request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(), request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(),
request.getCreditArrearsStatus(), request.getBillingFailStatuses(), request.getCreditArrearsStatus(), request.getOrderStatuses(), request.getBillingFailStatuses(),
request.getBeginBizDate(), request.getEndBizDate(), request.getBeginBizDate(), request.getEndBizDate(),
"price.bill.fee.batch.filterRequired", "price.bill.fee.batch.scopeRequired", "price.bill.fee.batch.filterRequired", "price.bill.fee.batch.scopeRequired",
"price.bill.fee.batch.selectedRequired"); "price.bill.fee.batch.selectedRequired");
@@ -1260,11 +1260,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
/** /**
* Shared list-scope resolve for batch fee / recalc price. * Shared list-scope resolve for batch fee / recalc price.
* scopeMode: SELECTED uses billIds; ALL uses filters (at least one required). * scopeMode: SELECTED uses billIds; ALL uses filters (at least one required).
* orderStatuses alone does not count as a meaningful filter (same as export).
*/ */
private List<PrcOrderBill> resolveListScopedBills(String scopeModeRaw, List<String> billIdsRaw, private List<PrcOrderBill> resolveListScopedBills(String scopeModeRaw, List<String> billIdsRaw,
List<String> orderNosRaw, List<String> trackingNosRaw, List<String> transferNosRaw, List<String> orderIdentifiersRaw, List<String> orderNosRaw, List<String> trackingNosRaw, List<String> transferNosRaw, List<String> orderIdentifiersRaw,
List<String> customerCodesRaw, List<String> productCodesRaw, String countryCodeRaw, List<String> customerCodesRaw, List<String> productCodesRaw, String countryCodeRaw,
String creditArrearsStatusRaw, List<Integer> billingFailStatusesRaw, String creditArrearsStatusRaw, List<Integer> orderStatusesRaw, List<Integer> billingFailStatusesRaw,
String beginBizDateRaw, String endBizDateRaw, String beginBizDateRaw, String endBizDateRaw,
String msgFilter, String msgScope, String msgSelected) String msgFilter, String msgScope, String msgSelected)
{ {
@@ -1279,6 +1280,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
List<String> orderIdentifiers = normalizeOrderIdentifiers(orderIdentifiersRaw); List<String> orderIdentifiers = normalizeOrderIdentifiers(orderIdentifiersRaw);
List<String> customerCodes = normalizeCodeList(customerCodesRaw); List<String> customerCodes = normalizeCodeList(customerCodesRaw);
List<String> productCodes = normalizeCodeList(productCodesRaw); List<String> productCodes = normalizeCodeList(productCodesRaw);
List<Integer> orderStatuses = normalizeIntegerList(orderStatusesRaw);
List<Integer> billingFailStatuses = normalizeIntegerList(billingFailStatusesRaw); List<Integer> billingFailStatuses = normalizeIntegerList(billingFailStatusesRaw);
String creditArrearsStatus = StringUtils.isEmpty(creditArrearsStatusRaw) ? null String creditArrearsStatus = StringUtils.isEmpty(creditArrearsStatusRaw) ? null
: creditArrearsStatusRaw.trim(); : creditArrearsStatusRaw.trim();
@@ -1320,6 +1322,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
query.setCustomerCodes(customerCodes); query.setCustomerCodes(customerCodes);
query.setProductCodes(productCodes); query.setProductCodes(productCodes);
query.setCreditArrearsStatus(creditArrearsStatus); query.setCreditArrearsStatus(creditArrearsStatus);
query.setOrderStatuses(orderStatuses);
query.setBillingFailStatuses(billingFailStatuses); query.setBillingFailStatuses(billingFailStatuses);
query.setCountryCode(countryCode); query.setCountryCode(countryCode);
if (beginBizDate != null) if (beginBizDate != null)
@@ -2713,6 +2716,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
List<String> transferNos = normalizeCodeList(request.getTransferNos()); List<String> transferNos = normalizeCodeList(request.getTransferNos());
List<String> customerCodes = normalizeCodeList(request.getCustomerCodes()); List<String> customerCodes = normalizeCodeList(request.getCustomerCodes());
List<String> productCodes = normalizeCodeList(request.getProductCodes()); List<String> productCodes = normalizeCodeList(request.getProductCodes());
List<Integer> orderStatuses = normalizeIntegerList(request.getOrderStatuses());
String creditArrearsStatus = StringUtils.isEmpty(request.getCreditArrearsStatus()) ? null String creditArrearsStatus = StringUtils.isEmpty(request.getCreditArrearsStatus()) ? null
: request.getCreditArrearsStatus().trim(); : request.getCreditArrearsStatus().trim();
String beginBizDate = StringUtils.isEmpty(request.getBeginBizDate()) ? null String beginBizDate = StringUtils.isEmpty(request.getBeginBizDate()) ? null
@@ -2740,6 +2744,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
query.setCustomerCodes(customerCodes); query.setCustomerCodes(customerCodes);
query.setProductCodes(productCodes); query.setProductCodes(productCodes);
query.setCreditArrearsStatus(creditArrearsStatus); query.setCreditArrearsStatus(creditArrearsStatus);
query.setOrderStatuses(orderStatuses);
if (beginBizDate != null) if (beginBizDate != null)
{ {
query.getParams().put("beginBizDate", beginBizDate); query.getParams().put("beginBizDate", beginBizDate);
+94 -2
View File
@@ -4,6 +4,7 @@
ref="tableRef" ref="tableRef"
:columns="columns" :columns="columns"
:search-columns="searchColumns" :search-columns="searchColumns"
:default-params="defaultParams"
:query="queryList" :query="queryList"
:search-per-row="4" :search-per-row="4"
row-key="billId" row-key="billId"
@@ -54,6 +55,32 @@
</el-option> </el-option>
</el-select> </el-select>
</template> </template>
<template #search-orderStatuses="{ model }">
<el-select
v-model="model.orderStatuses"
multiple
filterable
clearable
collapse-tags
collapse-tags-tooltip
placeholder="请选择"
style="width: 100%"
>
<template #header>
<el-checkbox
:model-value="isAllSelected(model, 'orderStatuses', orderStatusAllValues)"
:indeterminate="isIndeterminate(model, 'orderStatuses', orderStatusAllValues)"
@change="(checked) => toggleAllSelected(model, 'orderStatuses', orderStatusAllValues, checked)"
>全选</el-checkbox>
</template>
<el-option
v-for="opt in orderStatusOptions"
:key="opt.value"
:label="opt.label"
:value="opt.value"
/>
</el-select>
</template>
<template #col-product="{ row }"> <template #col-product="{ row }">
{{ row.productName || '-' }} ({{ row.productCode }}) {{ row.productName || '-' }} ({{ row.productCode }})
</template> </template>
@@ -293,6 +320,56 @@ const exportFieldRef = ref()
const tableHeight = ref(480) const tableHeight = ref(480)
let tableResizeObserver = null let tableResizeObserver = null
const defaultParams = {
orderStatuses: [3, 4, 5, 6, 7, 8, 11],
billingFailStatuses: []
}
const orderStatusMap = {
0: '草稿订单',
1: '确认订单',
2: '已中转',
3: '已收货',
4: '已装箱',
5: '已出库',
6: '转运中',
7: '已上网',
8: '已签收',
9: '已退件',
10: '已取消',
11: '已复核'
}
const orderStatusOptions = Object.keys(orderStatusMap).map(k => ({ label: orderStatusMap[k], value: Number(k) }))
const orderStatusAllValues = computed(() => orderStatusOptions.map(o => o.value))
function selectedValues(model, key) {
const value = model?.[key]
return Array.isArray(value) ? value : []
}
function resolveAllValues(allValues) {
if (Array.isArray(allValues)) return allValues
const value = allValues?.value
return Array.isArray(value) ? value : []
}
function isAllSelected(model, key, allValues) {
const all = resolveAllValues(allValues)
const selected = selectedValues(model, key)
return all.length > 0 && selected.length === all.length
}
function isIndeterminate(model, key, allValues) {
const all = resolveAllValues(allValues)
const selected = selectedValues(model, key)
return selected.length > 0 && selected.length < all.length
}
function toggleAllSelected(model, key, allValues, checked) {
if (!model) return
model[key] = checked ? [...resolveAllValues(allValues)] : []
}
function updateTableHeight() { function updateTableHeight() {
const tableEl = document.querySelector('.billing-bill > .basic-table .el-table, .billing-bill > .basic-table .basic-table-virtual') const tableEl = document.querySelector('.billing-bill > .basic-table .el-table, .billing-bill > .basic-table .basic-table-virtual')
if (!tableEl) return if (!tableEl) return
@@ -393,7 +470,7 @@ const billingFailStatusOptions = [
const searchColumns = [ const searchColumns = [
{ label: '单号', prop: 'orderIdentifiers', placeholder: '订单号/运单号/转单号' }, { label: '单号', prop: 'orderIdentifiers', placeholder: '订单号/运单号/转单号' },
{ label: '客户', prop: 'customerCodes', placeholder: '客户名称/客户代码/对外代码' }, { label: '客户', prop: 'customerCodes', placeholder: '客户名称/客户代码/对外代码' },
{ label: '产品代码', prop: 'productCodes', placeholder: '产品代码' }, // { label: '产品代码', prop: 'productCodes', placeholder: '产品代码' },
{ {
label: '额度欠费', label: '额度欠费',
prop: 'creditArrearsStatus', prop: 'creditArrearsStatus',
@@ -402,6 +479,19 @@ const searchColumns = [
placeholder: '请选择', placeholder: '请选择',
props: { clearable: true } props: { clearable: true }
}, },
{
label: '订单状态',
prop: 'orderStatuses',
component: 'select',
options: orderStatusOptions,
placeholder: '请选择',
props: {
multiple: true,
clearable: true,
collapseTags: true,
collapseTagsTooltip: true
}
},
{ {
label: '\u8ba1\u8d39\u5931\u8d25', label: '\u8ba1\u8d39\u5931\u8d25',
prop: 'billingFailStatuses', prop: 'billingFailStatuses',
@@ -587,6 +677,7 @@ function buildRecalcPayload() {
customerCodes: rest.customerCodes || [], customerCodes: rest.customerCodes || [],
productCodes: rest.productCodes || [], productCodes: rest.productCodes || [],
creditArrearsStatus: rest.creditArrearsStatus || undefined, creditArrearsStatus: rest.creditArrearsStatus || undefined,
orderStatuses: Array.isArray(rest.orderStatuses) ? rest.orderStatuses : [],
billingFailStatuses: Array.isArray(rest.billingFailStatuses) ? rest.billingFailStatuses : [] billingFailStatuses: Array.isArray(rest.billingFailStatuses) ? rest.billingFailStatuses : []
} }
if (Array.isArray(bizDateRange) && (bizDateRange[0] || bizDateRange[1])) { if (Array.isArray(bizDateRange) && (bizDateRange[0] || bizDateRange[1])) {
@@ -678,7 +769,8 @@ function buildChargeWeightTemplateQuery() {
orderIdentifiers: parseOrderIdentifiers(rest.orderIdentifiers), orderIdentifiers: parseOrderIdentifiers(rest.orderIdentifiers),
customerCodes: rest.customerCodes || [], customerCodes: rest.customerCodes || [],
productCodes: rest.productCodes || [], productCodes: rest.productCodes || [],
creditArrearsStatus: rest.creditArrearsStatus || undefined creditArrearsStatus: rest.creditArrearsStatus || undefined,
orderStatuses: Array.isArray(rest.orderStatuses) ? rest.orderStatuses : []
} }
if (Array.isArray(bizDateRange) && (bizDateRange[0] || bizDateRange[1])) { if (Array.isArray(bizDateRange) && (bizDateRange[0] || bizDateRange[1])) {
payload.beginBizDate = bizDateRange[0] || null payload.beginBizDate = bizDateRange[0] || null
@@ -211,6 +211,11 @@ function buildQueryTags(q) {
: (q.creditArrearsStatus === 'NORMAL' ? "正常" : q.creditArrearsStatus) : (q.creditArrearsStatus === 'NORMAL' ? "正常" : q.creditArrearsStatus)
tags.push("额度欠费" + ':' + label) tags.push("额度欠费" + ':' + label)
} }
const orderStatuses = Array.isArray(q.orderStatuses) ? q.orderStatuses.filter(v => v != null) : []
if (orderStatuses.length) {
const labels = orderStatuses.map(v => orderStatusLabel(v))
tags.push("订单状态" + ':' + labels.join(', '))
}
const failStatuses = Array.isArray(q.billingFailStatuses) ? q.billingFailStatuses.filter(v => v != null) : [] const failStatuses = Array.isArray(q.billingFailStatuses) ? q.billingFailStatuses.filter(v => v != null) : []
if (failStatuses.length) { if (failStatuses.length) {
const labels = failStatuses.map(v => billingFailStatusLabel(v)) const labels = failStatuses.map(v => billingFailStatusLabel(v))
@@ -222,6 +227,25 @@ function buildQueryTags(q) {
return tags return tags
} }
function orderStatusLabel(code) {
const map = {
0: '草稿订单',
1: '确认订单',
2: '已中转',
3: '已收货',
4: '已装箱',
5: '已出库',
6: '转运中',
7: '已上网',
8: '已签收',
9: '已退件',
10: '已取消',
11: '已复核'
}
const key = Number(code)
return map[key] != null ? map[key] : String(code)
}
function billingFailStatusLabel(code) { function billingFailStatusLabel(code) {
const map = { const map = {
0: '计费成功', 0: '计费成功',
@@ -278,6 +302,7 @@ function buildPayload() {
customerCodes: q.customerCodes || [], customerCodes: q.customerCodes || [],
productCodes: q.productCodes || [], productCodes: q.productCodes || [],
creditArrearsStatus: q.creditArrearsStatus || undefined, creditArrearsStatus: q.creditArrearsStatus || undefined,
orderStatuses: Array.isArray(q.orderStatuses) ? q.orderStatuses : [],
billingFailStatuses: Array.isArray(q.billingFailStatuses) ? q.billingFailStatuses : [], billingFailStatuses: Array.isArray(q.billingFailStatuses) ? q.billingFailStatuses : [],
beginBizDate: q.beginBizDate || undefined, beginBizDate: q.beginBizDate || undefined,
endBizDate: q.endBizDate || undefined endBizDate: q.endBizDate || undefined