增加运单和转运单批量查询
This commit is contained in:
+14
@@ -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);
|
||||
|
||||
+22
@@ -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>
|
||||
|
||||
@@ -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='应收主表(订单计费与应收费用中间层,与订单一对一)';
|
||||
@@ -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 }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -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: '产品代码' }
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user