delivery_dealer_validation_example.md
6.89 KB
出库单经销商验证示例
场景说明
本示例展示了出库单经销商验证功能的工作方式,包括成功场景和失败场景。
成功场景
场景1:经销商信息一致
输入数据:
- 订单编号:
ORDER001 - 订单中的经销商编码:
DEALER001 - 出库单中的经销商编码:
DEALER001
验证结果: ✅ 通过验证,继续执行出库单创建/修改流程
代码示例:
// 订单信息
OrderMain order = new OrderMain();
order.setOrderNo("ORDER001");
order.setDealerCode("DEALER001");
// 出库单请求
DeliveryAddReq addReq = new DeliveryAddReq();
addReq.setOrderNo("ORDER001");
addReq.setDealerCode("DEALER001");
// 验证通过,继续执行
deliveryMainService.addDelivery(addReq);
失败场景
场景2:经销商信息不一致
输入数据:
- 订单编号:
ORDER001 - 订单中的经销商编码:
DEALER001 - 出库单中的经销商编码:
DEALER002
验证结果: ❌ 验证失败,抛出 DealerMismatchException
异常信息:
出库单中的经销商编码[DEALER002]与关联订单[ORDER001]中的经销商编码[DEALER001]不一致
代码示例:
// 订单信息
OrderMain order = new OrderMain();
order.setOrderNo("ORDER001");
order.setDealerCode("DEALER001");
// 出库单请求(经销商编码不匹配)
DeliveryAddReq addReq = new DeliveryAddReq();
addReq.setOrderNo("ORDER001");
addReq.setDealerCode("DEALER002"); // 不匹配的经销商编码
// 验证失败,抛出异常
try {
deliveryMainService.addDelivery(addReq);
} catch (DealerMismatchException e) {
System.out.println("验证失败:" + e.getMessage());
// 输出:验证失败:出库单中的经销商编码[DEALER002]与关联订单[ORDER001]中的经销商编码[DEALER001]不一致
}
场景3:关联订单不存在
输入数据:
- 订单编号:
ORDER999(不存在的订单) - 出库单中的经销商编码:
DEALER001
验证结果: ❌ 验证失败,抛出 IllegalArgumentException
异常信息:
关联的订单不存在
代码示例:
// 出库单请求(关联不存在的订单)
DeliveryAddReq addReq = new DeliveryAddReq();
addReq.setOrderNo("ORDER999"); // 不存在的订单
addReq.setDealerCode("DEALER001");
// 验证失败,抛出异常
try {
deliveryMainService.addDelivery(addReq);
} catch (IllegalArgumentException e) {
System.out.println("验证失败:" + e.getMessage());
// 输出:验证失败:关联的订单不存在
}
API调用示例
新增出库单
请求:
POST /api/delivery/add
Content-Type: application/json
{
"deliveryNo": "DELIVERY001",
"orderNo": "ORDER001",
"dealerCode": "DEALER002", // 与订单中的经销商不一致
"dealerName": "测试经销商",
"deliveryDate": "2024-01-15 10:00:00",
"deliveryItems": [
{
"productCode": "PRODUCT001",
"deliveryQty": 10,
"deliveryAmount": 1000.00
}
]
}
响应(失败):
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"code": 400,
"message": "出库单中的经销商编码[DEALER002]与关联订单[ORDER001]中的经销商编码[DEALER001]不一致",
"timestamp": "2024-01-15T10:00:00"
}
修改出库单
请求:
PUT /api/delivery/update
Content-Type: application/json
{
"deliveryId": 1,
"deliveryNo": "DELIVERY001",
"orderNo": "ORDER001",
"dealerCode": "DEALER001", // 与订单中的经销商一致
"dealerName": "测试经销商",
"deliveryDate": "2024-01-15 10:00:00",
"deliveryItems": [
{
"productCode": "PRODUCT001",
"deliveryQty": 10,
"deliveryAmount": 1000.00
}
]
}
响应(成功):
HTTP/1.1 200 OK
Content-Type: application/json
{
"code": 200,
"message": "出库单修改成功",
"data": true
}
前端处理示例
JavaScript错误处理
// 新增出库单
async function addDelivery(deliveryData) {
try {
const response = await fetch('/api/delivery/add', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(deliveryData)
});
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.message);
}
const result = await response.json();
console.log('出库单创建成功', result);
} catch (error) {
if (error.message.includes('经销商编码') && error.message.includes('不一致')) {
// 处理经销商不匹配错误
alert('错误:出库单中的经销商与关联订单中的经销商不一致,请检查经销商信息');
} else if (error.message.includes('关联的订单不存在')) {
// 处理订单不存在错误
alert('错误:关联的订单不存在,请检查订单编号');
} else {
// 处理其他错误
alert('出库单创建失败:' + error.message);
}
}
}
最佳实践
1. 数据录入时验证
在用户录入出库单信息时,可以实时验证经销商信息:
// 当订单编号改变时,自动填充经销商信息
async function onOrderNoChange(orderNo) {
if (orderNo) {
try {
const order = await getOrderByNo(orderNo);
if (order) {
// 自动填充经销商信息
document.getElementById('dealerCode').value = order.dealerCode;
document.getElementById('dealerName').value = order.dealerName;
}
} catch (error) {
console.error('获取订单信息失败', error);
}
}
}
2. 表单验证
在提交前进行客户端验证:
function validateDeliveryForm() {
const orderNo = document.getElementById('orderNo').value;
const dealerCode = document.getElementById('dealerCode').value;
if (orderNo && dealerCode) {
// 可以调用API验证经销商一致性
return validateDealerConsistency(orderNo, dealerCode);
}
return true;
}
3. 错误提示优化
提供更友好的错误提示:
function handleDealerValidationError(error) {
const errorMessage = error.message;
if (errorMessage.includes('经销商编码') && errorMessage.includes('不一致')) {
return {
type: 'warning',
title: '经销商信息不匹配',
message: '出库单中的经销商与关联订单中的经销商不一致,请确认经销商信息是否正确',
action: '请检查并修正经销商编码'
};
}
return {
type: 'error',
title: '验证失败',
message: errorMessage
};
}