增加运单和转运单批量查询

This commit is contained in:
wuweihua
2026-09-21 16:08:53 +08:00
parent 83f19e1dca
commit c73effc2f7
9 changed files with 163 additions and 3 deletions
@@ -89,6 +89,20 @@ public class BillingController extends BaseController
return success(prcOrderBillService.listOrderNoOptions(keyword));
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@GetMapping("/bill/trackingNos")
public AjaxResult trackingNoOptions(@RequestParam(value = "keyword", required = false) String keyword)
{
return success(prcOrderBillService.listTrackingNoOptions(keyword));
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@GetMapping("/bill/transferNos")
public AjaxResult transferNoOptions(@RequestParam(value = "keyword", required = false) String keyword)
{
return success(prcOrderBillService.listTransferNoOptions(keyword));
}
@PreAuthorize("@ss.hasPermi('price:billing:bill')")
@GetMapping("/bill/{billId}")
public AjaxResult getBill(@PathVariable String billId)
@@ -21,8 +21,12 @@ public class PrcOrderBill extends BaseEntity
/** 批量查询:多个订单号精确匹配(仅查询用,非表字段) */
private List<String> orderNos;
private String trackingNo;
/** 批量查询:多个运单号精确匹配(仅查询用,非表字段) */
private List<String> trackingNos;
/** transfer order no */
private String transferNo;
/** 批量查询:多个转单号精确匹配(仅查询用,非表字段) */
private List<String> transferNos;
/** 所属销售员 */
private String belongSaler;
/** 结算员 */
@@ -20,6 +20,12 @@ public interface PrcOrderBillMapper
/** 订单号下拉搜索:按关键词模糊匹配,返回去重后的订单号(按最近创建排序,限量返回) */
public List<String> selectOrderNoOptions(@Param("keyword") String keyword, @Param("limit") int limit);
/** 运单号下拉搜索:按关键词模糊匹配,返回去重后的运单号(按最近创建排序,限量返回) */
public List<String> selectTrackingNoOptions(@Param("keyword") String keyword, @Param("limit") int limit);
/** 转单号下拉搜索:按关键词模糊匹配,返回去重后的转单号(按最近创建排序,限量返回) */
public List<String> selectTransferNoOptions(@Param("keyword") String keyword, @Param("limit") int limit);
/** 应收账单生成读取指定客户截止日期前的未出账订单计费快照。 */
public List<PrcOrderBill> selectPrcOrderBillByCustomerPeriod(@Param("customerId") Long customerId,
@Param("customerCode") String customerCode, @Param("orderOrTrackingNo") String orderOrTrackingNo,
@@ -15,6 +15,12 @@ public interface IPrcOrderBillService
/** 订单号下拉搜索选项(模糊匹配,去重限量) */
List<String> listOrderNoOptions(String keyword);
/** 运单号下拉搜索选项(模糊匹配,去重限量) */
List<String> listTrackingNoOptions(String keyword);
/** 转单号下拉搜索选项(模糊匹配,去重限量) */
List<String> listTransferNoOptions(String keyword);
TmsPriceQuoteResult getBill(String billId);
TmsPriceQuoteResult getBillByOrderNo(String orderNo);
@@ -103,6 +103,8 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
query.setOrderNos(normalizeCodeList(query.getOrderNos()));
query.setCustomerCodes(normalizeCodeList(query.getCustomerCodes()));
query.setProductCodes(normalizeCodeList(query.getProductCodes()));
query.setTrackingNos(normalizeCodeList(query.getTrackingNos()));
query.setTransferNos(normalizeCodeList(query.getTransferNos()));
return orderBillMapper.selectPrcOrderBillList(query);
}
@@ -116,6 +118,26 @@ public class PrcOrderBillServiceImpl implements IPrcOrderBillService
return orderBillMapper.selectOrderNoOptions(keyword.trim(), 20);
}
@Override
public List<String> listTrackingNoOptions(String keyword)
{
if (StringUtils.isBlank(keyword))
{
return new ArrayList<>();
}
return orderBillMapper.selectTrackingNoOptions(keyword.trim(), 20);
}
@Override
public List<String> listTransferNoOptions(String keyword)
{
if (StringUtils.isBlank(keyword))
{
return new ArrayList<>();
}
return orderBillMapper.selectTransferNoOptions(keyword.trim(), 20);
}
/**
* 批量编码归一化:逐个 trim、拆开误传的逗号/分号/空白分隔串、去空去重
*/
@@ -117,6 +117,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
limit #{limit}
</select>
<select id="selectTrackingNoOptions" resultType="String">
select tracking_no
from prc_order_bill
<where>
<if test="keyword != null and keyword != ''">
tracking_no like concat('%', #{keyword}, '%')
</if>
</where>
group by tracking_no
order by max(create_time) desc
limit #{limit}
</select>
<select id="selectTransferNoOptions" resultType="String">
select transfer_no
from prc_order_bill
<where>
<if test="keyword != null and keyword != ''">
transfer_no like concat('%', #{keyword}, '%')
</if>
</where>
group by transfer_no
order by max(create_time) desc
limit #{limit}
</select>
<select id="selectPrcOrderBillList" parameterType="PrcOrderBill" resultMap="PrcOrderBillResult">
<include refid="selectPrcOrderBillVo"/>
<where>
@@ -132,9 +158,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="trackingNo != null and trackingNo != ''">
AND tracking_no like concat('%', #{trackingNo}, '%')
</if>
<if test="trackingNos != null and trackingNos.size() > 0">
AND tracking_no IN
<foreach collection="trackingNos" item="tno" open="(" separator="," close=")">
#{tno}
</foreach>
</if>
<if test="transferNo != null and transferNo != ''">
AND transfer_no like concat('%', #{transferNo}, '%')
</if>
<if test="transferNos != null and transferNos.size() > 0">
AND transfer_no IN
<foreach collection="transferNos" item="rno" open="(" separator="," close=")">
#{rno}
</foreach>
</if>
<if test="customerActiveStatus != null and customerActiveStatus != ''">
AND customer_active_status = #{customerActiveStatus}
</if>
+36
View File
@@ -0,0 +1,36 @@
-- =====================================================================
-- 应收主表 prc_income_bill
-- 位于 prc_order_bill(订单主表)与 prc_income_bill_fee(应收费用明细)之间
-- 与 prc_order_bill 一对一(bill_id UNIQUE)
-- 价格层:产品价 / 红线价 / 销售价(当前计费结果)
-- 人员:业务员、结算员
-- 说明:本脚本仅建表;确认后再改 Java/费用表关联
-- =====================================================================
SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS prc_income_bill (
income_bill_id VARCHAR(36) NOT NULL COMMENT '应收主表ID',
bill_id VARCHAR(36) NOT NULL COMMENT '计费订单ID,对应 prc_order_bill.bill_id,一对一',
currency VARCHAR(10) DEFAULT 'CNY' COMMENT '币种',
-- 价格层(后续统计;当前计费写入销售价/应收合计)
product_amount DECIMAL(18,4) DEFAULT NULL COMMENT '产品价合计',
redline_amount DECIMAL(18,4) DEFAULT NULL COMMENT '红线价合计',
sales_amount DECIMAL(18,4) DEFAULT NULL COMMENT '销售价合计(当前计费结果)',
income_total DECIMAL(18,4) DEFAULT NULL COMMENT '应收合计(当前等于销售价)',
-- 人员
belong_saler VARCHAR(64) DEFAULT NULL COMMENT '业务员/销售员',
settlement_man VARCHAR(64) DEFAULT NULL COMMENT '结算员',
create_by VARCHAR(64) DEFAULT '' COMMENT '创建者',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT '' COMMENT '更新者',
update_time DATETIME DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (income_bill_id),
UNIQUE KEY uk_income_bill_order_bill (bill_id),
KEY idx_income_bill_saler (belong_saler),
KEY idx_income_bill_settlement (settlement_man),
CONSTRAINT fk_income_bill_order_bill FOREIGN KEY (bill_id) REFERENCES prc_order_bill (bill_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='应收主表(订单计费与应收费用中间层,与订单一对一)';
+18
View File
@@ -60,3 +60,21 @@ export function listOrderNoOptions(keyword) {
params: { keyword }
})
}
/** 运单号下拉远程搜索选项 */
export function listTrackingNoOptions(keyword) {
return request({
url: '/price/billing/bill/trackingNos',
method: 'get',
params: { keyword }
})
}
/** 转单号下拉远程搜索选项 */
export function listTransferNoOptions(keyword) {
return request({
url: '/price/billing/bill/transferNos',
method: 'get',
params: { keyword }
})
}
+19 -3
View File
@@ -11,6 +11,12 @@
<template #search-orderNos="{ model }">
<multi-value-input v-model="model.orderNos" placeholder="订单号" width="100%" :search-method="searchOrderNoOptions" />
</template>
<template #search-trackingNos="{ model }">
<multi-value-input v-model="model.trackingNos" placeholder="运单号" width="100%" :search-method="searchTrackingNoOptions" />
</template>
<template #search-transferNos="{ model }">
<multi-value-input v-model="model.transferNos" placeholder="转单号" width="100%" :search-method="searchTransferNoOptions" />
</template>
<template #search-customerCodes="{ model }">
<customer-select
v-model="model.customerCodes"
@@ -70,7 +76,7 @@
</template>
<script setup name="BillingBill">
import { listBill, getBill, listOrderNoOptions } from '@/api/price/billing'
import { listBill, getBill, listOrderNoOptions, listTrackingNoOptions, listTransferNoOptions } from '@/api/price/billing'
import { useProducts } from '@/components/ProductSelect/useProducts'
import BillDetail from './components/BillDetail.vue'
@@ -79,6 +85,16 @@ function searchOrderNoOptions(keyword) {
return listOrderNoOptions(keyword).then(res => res.data || [])
}
// 运单号下拉远程搜索
function searchTrackingNoOptions(keyword) {
return listTrackingNoOptions(keyword).then(res => res.data || [])
}
// 转单号下拉远程搜索
function searchTransferNoOptions(keyword) {
return listTransferNoOptions(keyword).then(res => res.data || [])
}
// 产品下拉选项:复用 ProductSelect 的模块级产品缓存(全应用只拉一次)
const { productList, ensureProducts } = useProducts()
ensureProducts()
@@ -118,8 +134,8 @@ const columns = [
const searchColumns = [
{ label: '订单号', prop: 'orderNos', placeholder: '订单号' },
{ label: '运单号', prop: 'trackingNo', component: 'input', placeholder: '运单号' },
{ label: '转单号', prop: 'transferNo', component: 'input', placeholder: '转单号' },
{ label: '运单号', prop: 'trackingNos', placeholder: '运单号' },
{ label: '转单号', prop: 'transferNos', placeholder: '转单号' },
{ label: '客户', prop: 'customerCodes', placeholder: '客户代码' },
{ label: '产品代码', prop: 'productCodes', placeholder: '产品代码' }
]