如何使用代码块根据人数确定所需车辆组合
问题描述:
有一个旅行团,每次出发的人员数量不一样,需要系统自动给他计算所需要的大巴车数组合,需要组合的车位数够用并且价格是最便宜的。
实现思路
在表格内手动输入每种车辆的车位数及价格信息,通过实际出发人数,使用代码块根据输入的车辆信息,计算出最便宜的车辆组合。
支持版本:600、700版本皆可使用
表单设计

代码块示例
注释:
qf_field.{人数$$3295DBE1B$$}替换成自己表单内的“人数”字段
qf_field.{表格$$3295DBE1D$$}替换成自己表单内的“车辆价格信息”表
field_317296896替换表格内的“价格”字段
field_317296897替换表格内的“车位数”字段
function calculateOptimalBuses(passengers, busOptions) {
// 过滤出可用的选项
//field_317296896替换表格内的车辆费用字段
const availableBuses = busOptions.filter(option => option.field_317296896 > 0);
let minCost = Infinity;
let bestCombination = [];
// 生成所有可能的二维组合
function findCombinations(currentIndex, currentCombination, currentCost, currentCapacity) {
if (currentCapacity >= passengers) {
if (currentCost < minCost) {
minCost = currentCost;
bestCombination = [...currentCombination];
}
return;
}
for (let i = currentIndex; i < availableBuses.length; i++) {
const bus = availableBuses[i];
currentCombination.push(bus);
//field_317296896替换表格内的车辆费用字段 field_317296897替换表格内的车位字段
findCombinations(i, currentCombination, currentCost + bus.field_317296897, currentCapacity + bus.field_317296896);
currentCombination.pop();
}
}
findCombinations(0, [], 0, 0);
if (bestCombination.length > 0) {
//field_317296896替换表格内的车辆费用字段 field_317296897替换表格内的车位字段
const totalCost = bestCombination.reduce((sum, bus) => sum + bus.field_317296897, 0);
const totalCapacity = bestCombination.reduce((sum, bus) => sum + bus.field_317296896, 0);
// 生成座位数字符串
const seatCounts = bestCombination.map(bus => bus.field_317296896).join('+');
// 统计每种座位的数量
const seatCountMap = {};
bestCombination.forEach(bus => {
//field_317296896替换表格内的车辆费用字段
const seatCount = bus.field_317296896;
seatCountMap[seatCount] = (seatCountMap[seatCount] || 0) + 1;
});
// 生成车辆数量字符串
const vehicleCountString = Object.entries(seatCountMap)
.map(([seat, count]) => `${count}辆${seat}座位`)
.join('+');
return {
totalBuses: bestCombination.length,
totalCost: totalCost,
totalCapacity: totalCapacity,
busDetails: bestCombination,
seatCountString: seatCounts, // 输出座位数字符串
vehicleCountString: vehicleCountString // 输出车辆数量字符串
};
} else {
return null; // 如果没有找到合适的方案
}
}
// 示例输入
const passengers = qf_field.{人数$$3295DBE1B$$}; //qf_field.{人数$$3295DBE1B$$}替换成自己表单的人数字段
const busOptions = qf_field.{表格$$3295DBE1D$$}; //qf_field.{表格$$3295DBE1D$$}替换成自己表单内的车辆价格信息表
// 计算
const result = calculateOptimalBuses(passengers, busOptions);
qf_output = {result}
JsonPath解析

关联代码块的输出内容


实现效果
