feat: multi-dim comparison + clustering + per-supplier PDF export

Backend:
- BizComparisonVO: add composite score fields (priceScore, deliveryScore,
  qualityScore, serviceScore, compositeScore, rankBadge) + SupplierPlan cluster VO
- Mapper: join biz_supplier_evaluation for quality/service history scores
- Service: weighted scoring (price 40%/delivery 25%/quality 20%/service 15%),
  greedy clustering assigns each item to best-score supplier, groups into plans
- Controller: returns CompareResult with items + recommendedPlans

Frontend:
- Tab 1 (多维度比价): supplier rank cards with 4-dim progress bars
- Tab 2 (智能推荐方案): per-supplier cluster cards with explanation + PDF export
- PDF: logo header, score legend, items table, cluster reason per supplier
This commit is contained in:
2026-05-22 11:19:29 +08:00
parent 1bc99dcc7c
commit 608ee0ed61
7 changed files with 823 additions and 111 deletions

View File

@@ -10,8 +10,10 @@ import com.ruoyi.system.service.bid.IBizComparisonService;
@RestController
@RequestMapping("/bid/comparison")
public class BizComparisonController extends BaseController {
@Autowired private IBizComparisonService service;
/** 多维比价 + 聚类推荐方案 */
@PreAuthorize("@ss.hasPermi('bid:comparison:list')")
@GetMapping("/rfq/{rfqId}")
public AjaxResult compareRfq(@PathVariable Long rfqId) {