Java 需求:供应商比价及订单更新
Java 需求:供应商比价及订单更新
功能描述
该功能用于根据入库单明细货品编码,自动选取供应商并更新订单信息,具体流程如下:
- 供应商查询:
- 根据入库单明细货品编码,在货品供应商表中查询已报价此货品的供应商。
- 只选取状态为有效的供应商(
vendor.status = '1')。 - 若未找到符合条件的供应商,则报错“未找到该货品的供应商商报价”。
- 供应商比价:
- 若只有一条供应商满足,则直接使用该供应商。
- 若有多条供应商满足,则根据以下公式计算每个供应商的订单总价,并选取价格最低的供应商:
订单总价 = 订单数量 * (单价 * (1 + 价格系数))
- 若有多家供应商比价价格相同,则选取价格系数最小的供应商(包含负数且正数大于负数)。
- 若前两者都相同,则选取序号最小的供应商。
- 订单更新:
- 更新单头的订单价格(
订单价格 = 订单数量 * 单价)。 - 更新单头供应商信息(从供应商表带出)。
- 更新审核状态为审核通过。
- 更新单头的订单价格(
实现思路
- 首先根据入库单明细中的货品编码,查询货品供应商表,找到所有已报价此货品的供应商,并且状态为有效的供应商。
- 如果找不到,则报错“未找到该货品的供应商商报价”。
- 如果只有一条供应商满足,则直接使用此供应商。
- 如果有多条供应商满足,则根据比价公式计算每个供应商的订单总价,然后取价格最低的供应商。
- 如果有多家供应商比价价格相同,则取价格系数最小的供应商(包含负数且正数大于负数),若前两者都相同,则取序号最小的供应商。
- 更新入库单单头的订单价格、供应商信息和审核状态为审核通过。
实现代码
//1. 查询货品供应商表,找到所有已报价此货品的供应商,并且状态为有效的供应商
List<Vendor> vendors = vendorDao.findVendorsByProductCode(productCode);
vendors = vendors.stream().filter(vendor -> vendor.getStatus() == 1).collect(Collectors.toList());
//2. 如果没有找到,则报错“未找到该货品的供应商商报价”
if(vendors.isEmpty()){
throw new RuntimeException('未找到该货品的供应商商报价');
}
//3. 如果只有一条供应商满足,则直接使用此供应商
Vendor vendor = null;
if(vendors.size() == 1){
vendor = vendors.get(0);
}else{
//4. 如果有多条供应商满足,则根据比价公式计算每个供应商的订单总价,然后取价格最低的供应商
vendor = vendors.stream()
.min(Comparator.comparingDouble(v -> v.getPriceCoefficient() * v.getPrice() * (1 + v.getPriceCoefficient())))
.orElse(null);
//5. 如果有多家供应商比价价格相同,则取价格系数最小的供应商(包含负数且正数大于负数),若前两者都相同,则取序号最小的供应商
if(vendor != null){
List<Vendor> samePriceVendors = vendors.stream()
.filter(v -> Double.compare(v.getPriceCoefficient() * v.getPrice() * (1 + v.getPriceCoefficient()), vendor.getPriceCoefficient() * vendor.getPrice() * (1 + vendor.getPriceCoefficient())) == 0)
.sorted(Comparator.comparingDouble(Vendor::getPriceCoefficient))
.collect(Collectors.toList());
vendor = samePriceVendors.get(0);
}
}
//6. 更新入库单单头的订单价格、供应商信息和审核状态为审核通过
inboundOrder.setOrderPrice(inboundOrder.getQuantity() * vendor.getPrice());
inboundOrder.setVendor(vendor);
inboundOrder.setAuditStatus(AuditStatus.PASSED);
inboundOrderDao.updateInboundOrder(inboundOrder);
总结
本文详细介绍了供应商比价及订单更新的实现过程,并提供了相应的 Java 代码示例。希望本文能够帮助你更好地理解和实现相关功能。
原文地址: https://www.cveoy.top/t/topic/ovjl 著作权归作者所有。请勿转载和采集!