From 7fcd3b6089d0a32038d3d724b541df7f9e6cc3f4 Mon Sep 17 00:00:00 2001 From: wuweihua <88888888> Date: Tue, 27 Oct 2026 13:28:14 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A1=E8=B4=B9=E5=88=97=E8=A1=A8=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=8A=B6=E6=80=81=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/BatchAddIncomeBillFeeRequest.java | 2 + .../vo/ChargeWeightTemplateRequest.java | 2 + .../domain/vo/RecalcBillPriceRequest.java | 2 + .../service/impl/PrcOrderBillServiceImpl.java | 11 ++- bms-front/src/views/price/billing/bill.vue | 96 ++++++++++++++++++- .../components/BatchAddIncomeFeeDialog.vue | 25 +++++ 6 files changed, 133 insertions(+), 5 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BatchAddIncomeBillFeeRequest.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BatchAddIncomeBillFeeRequest.java index 018504cb..511ee24e 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BatchAddIncomeBillFeeRequest.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/BatchAddIncomeBillFeeRequest.java @@ -31,6 +31,8 @@ public class BatchAddIncomeBillFeeRequest implements Serializable private List productCodes; private String countryCode; private String creditArrearsStatus; + /** Same as list filter order_status IN (...). */ + private List orderStatuses; /** Same as list filter billing_fail_status IN (...). */ private List billingFailStatuses; diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/ChargeWeightTemplateRequest.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/ChargeWeightTemplateRequest.java index a48dd69b..d6fc692a 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/ChargeWeightTemplateRequest.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/ChargeWeightTemplateRequest.java @@ -21,6 +21,8 @@ public class ChargeWeightTemplateRequest implements Serializable private List customerCodes; private List productCodes; private String creditArrearsStatus; + /** Same as list filter order_status IN (...). */ + private List orderStatuses; private String beginBizDate; private String endBizDate; } diff --git a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/RecalcBillPriceRequest.java b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/RecalcBillPriceRequest.java index daa67b60..0f398f58 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/RecalcBillPriceRequest.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/domain/vo/RecalcBillPriceRequest.java @@ -25,6 +25,8 @@ public class RecalcBillPriceRequest implements Serializable private List productCodes; private String countryCode; private String creditArrearsStatus; + /** Same as list filter order_status IN (...). */ + private List orderStatuses; /** Same as list filter billing_fail_status IN (...). */ private List billingFailStatuses; private String beginBizDate; diff --git a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java index bbd35945..1e9e691c 100644 --- a/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/price/service/impl/PrcOrderBillServiceImpl.java @@ -675,7 +675,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService List bills = resolveListScopedBills(request.getScopeMode(), request.getBillIds(), request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(), request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(), - request.getCreditArrearsStatus(), request.getBillingFailStatuses(), + request.getCreditArrearsStatus(), request.getOrderStatuses(), request.getBillingFailStatuses(), request.getBeginBizDate(), request.getEndBizDate(), "price.bill.recalc.filterRequired", "price.bill.recalc.scopeRequired", "price.bill.recalc.selectedRequired"); @@ -1251,7 +1251,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService return resolveListScopedBills(request.getScopeMode(), request.getBillIds(), request.getOrderNos(), request.getTrackingNos(), request.getTransferNos(), request.getOrderIdentifiers(), request.getCustomerCodes(), request.getProductCodes(), request.getCountryCode(), - request.getCreditArrearsStatus(), request.getBillingFailStatuses(), + request.getCreditArrearsStatus(), request.getOrderStatuses(), request.getBillingFailStatuses(), request.getBeginBizDate(), request.getEndBizDate(), "price.bill.fee.batch.filterRequired", "price.bill.fee.batch.scopeRequired", "price.bill.fee.batch.selectedRequired"); @@ -1260,11 +1260,12 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService /** * Shared list-scope resolve for batch fee / recalc price. * 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 resolveListScopedBills(String scopeModeRaw, List billIdsRaw, List orderNosRaw, List trackingNosRaw, List transferNosRaw, List orderIdentifiersRaw, List customerCodesRaw, List productCodesRaw, String countryCodeRaw, - String creditArrearsStatusRaw, List billingFailStatusesRaw, + String creditArrearsStatusRaw, List orderStatusesRaw, List billingFailStatusesRaw, String beginBizDateRaw, String endBizDateRaw, String msgFilter, String msgScope, String msgSelected) { @@ -1279,6 +1280,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService List orderIdentifiers = normalizeOrderIdentifiers(orderIdentifiersRaw); List customerCodes = normalizeCodeList(customerCodesRaw); List productCodes = normalizeCodeList(productCodesRaw); + List orderStatuses = normalizeIntegerList(orderStatusesRaw); List billingFailStatuses = normalizeIntegerList(billingFailStatusesRaw); String creditArrearsStatus = StringUtils.isEmpty(creditArrearsStatusRaw) ? null : creditArrearsStatusRaw.trim(); @@ -1320,6 +1322,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService query.setCustomerCodes(customerCodes); query.setProductCodes(productCodes); query.setCreditArrearsStatus(creditArrearsStatus); + query.setOrderStatuses(orderStatuses); query.setBillingFailStatuses(billingFailStatuses); query.setCountryCode(countryCode); if (beginBizDate != null) @@ -2713,6 +2716,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService List transferNos = normalizeCodeList(request.getTransferNos()); List customerCodes = normalizeCodeList(request.getCustomerCodes()); List productCodes = normalizeCodeList(request.getProductCodes()); + List orderStatuses = normalizeIntegerList(request.getOrderStatuses()); String creditArrearsStatus = StringUtils.isEmpty(request.getCreditArrearsStatus()) ? null : request.getCreditArrearsStatus().trim(); String beginBizDate = StringUtils.isEmpty(request.getBeginBizDate()) ? null @@ -2740,6 +2744,7 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService query.setCustomerCodes(customerCodes); query.setProductCodes(productCodes); query.setCreditArrearsStatus(creditArrearsStatus); + query.setOrderStatuses(orderStatuses); if (beginBizDate != null) { query.getParams().put("beginBizDate", beginBizDate); diff --git a/bms-front/src/views/price/billing/bill.vue b/bms-front/src/views/price/billing/bill.vue index 370d3c67..89daf5e2 100644 --- a/bms-front/src/views/price/billing/bill.vue +++ b/bms-front/src/views/price/billing/bill.vue @@ -4,6 +4,7 @@ ref="tableRef" :columns="columns" :search-columns="searchColumns" + :default-params="defaultParams" :query="queryList" :search-per-row="4" row-key="billId" @@ -54,6 +55,32 @@ + @@ -293,6 +320,56 @@ const exportFieldRef = ref() const tableHeight = ref(480) 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() { const tableEl = document.querySelector('.billing-bill > .basic-table .el-table, .billing-bill > .basic-table .basic-table-virtual') if (!tableEl) return @@ -393,7 +470,7 @@ const billingFailStatusOptions = [ const searchColumns = [ { label: '单号', prop: 'orderIdentifiers', placeholder: '订单号/运单号/转单号' }, { label: '客户', prop: 'customerCodes', placeholder: '客户名称/客户代码/对外代码' }, - { label: '产品代码', prop: 'productCodes', placeholder: '产品代码' }, + // { label: '产品代码', prop: 'productCodes', placeholder: '产品代码' }, { label: '额度欠费', prop: 'creditArrearsStatus', @@ -402,6 +479,19 @@ const searchColumns = [ placeholder: '请选择', 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', prop: 'billingFailStatuses', @@ -587,6 +677,7 @@ function buildRecalcPayload() { customerCodes: rest.customerCodes || [], productCodes: rest.productCodes || [], creditArrearsStatus: rest.creditArrearsStatus || undefined, + orderStatuses: Array.isArray(rest.orderStatuses) ? rest.orderStatuses : [], billingFailStatuses: Array.isArray(rest.billingFailStatuses) ? rest.billingFailStatuses : [] } if (Array.isArray(bizDateRange) && (bizDateRange[0] || bizDateRange[1])) { @@ -678,7 +769,8 @@ function buildChargeWeightTemplateQuery() { orderIdentifiers: parseOrderIdentifiers(rest.orderIdentifiers), customerCodes: rest.customerCodes || [], 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])) { payload.beginBizDate = bizDateRange[0] || null diff --git a/bms-front/src/views/price/billing/components/BatchAddIncomeFeeDialog.vue b/bms-front/src/views/price/billing/components/BatchAddIncomeFeeDialog.vue index d9bc0c7c..c92e4613 100644 --- a/bms-front/src/views/price/billing/components/BatchAddIncomeFeeDialog.vue +++ b/bms-front/src/views/price/billing/components/BatchAddIncomeFeeDialog.vue @@ -211,6 +211,11 @@ function buildQueryTags(q) { : (q.creditArrearsStatus === 'NORMAL' ? "正常" : q.creditArrearsStatus) 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) : [] if (failStatuses.length) { const labels = failStatuses.map(v => billingFailStatusLabel(v)) @@ -222,6 +227,25 @@ function buildQueryTags(q) { 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) { const map = { 0: '计费成功', @@ -278,6 +302,7 @@ function buildPayload() { customerCodes: q.customerCodes || [], productCodes: q.productCodes || [], creditArrearsStatus: q.creditArrearsStatus || undefined, + orderStatuses: Array.isArray(q.orderStatuses) ? q.orderStatuses : [], billingFailStatuses: Array.isArray(q.billingFailStatuses) ? q.billingFailStatuses : [], beginBizDate: q.beginBizDate || undefined, endBizDate: q.endBizDate || undefined