feat(bid): 完成甲方报价模块全量功能开发

1.  新增甲方报价业务实体,继承基础实体类
2.  新增供应商报价明细查询接口,支持按供应商ID展开物料明细
3.  重构甲方报价关联逻辑,通过material_id精确关联物料表
4.  新增甲方报价历史统计、月度趋势、快速新建等服务功能
5.  完善菜单配置,修正甲方报价菜单结构,添加完整权限控制
6.  新增物料搜索自动补全功能,优化报价单详情页面
7.  在供应商详情页新增报价历史Tab页签,展示该供应商的所有报价物料明细
8.  在物料详情页新增甲方报价记录Tab页签,展示该物料的所有甲方报价历史
9.  新增数据库优化脚本,添加索引并修复历史数据关联
This commit is contained in:
2026-06-01 19:05:04 +08:00
parent 18a71526dc
commit a75589018f
23 changed files with 1758 additions and 144 deletions

View File

@@ -8,6 +8,7 @@ import com.ruoyi.system.service.bid.IBizClientQuoteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/bid/clientquote")
@@ -41,4 +42,30 @@ public class BizClientQuoteController extends BaseController {
public AjaxResult remove(@PathVariable Long quoteId) {
return toAjax(service.deleteClientQuoteById(quoteId));
}
// ========== 甲方报价历史 - 统计 ==========
@GetMapping("/statistics")
public AjaxResult statistics(BizClientQuote query) {
return success(service.selectClientQuoteStatistics(query));
}
@GetMapping("/monthly-trend")
public AjaxResult monthlyTrend() {
return success(service.selectMonthlyTrend());
}
// ========== 按物料ID查询报价历史 ==========
@GetMapping("/by-material/{materialId}")
public AjaxResult byMaterial(@PathVariable Long materialId) {
return success(service.selectClientQuotesByMaterialId(materialId));
}
// ========== 基于历史报价快速新建 ==========
@PostMapping("/quick-create/{quoteId}")
public AjaxResult quickCreate(@PathVariable Long quoteId) {
return success(service.copyFromExisting(quoteId));
}
}

View File

@@ -1,6 +1,7 @@
package com.ruoyi.web.controller.bid;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@@ -11,11 +12,13 @@ import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.system.domain.bid.BizQuotation;
import com.ruoyi.system.service.bid.IBizQuotationService;
import com.ruoyi.system.mapper.bid.BizQuotationItemMapper;
@RestController
@RequestMapping("/bid/quotation")
public class BizQuotationController extends BaseController {
@Autowired private IBizQuotationService service;
@Autowired private BizQuotationItemMapper quotationItemMapper;
@PreAuthorize("@ss.hasPermi('bid:quotation:list')")
@GetMapping("/list")
@@ -70,4 +73,15 @@ public class BizQuotationController extends BaseController {
public AjaxResult remove(@PathVariable Long[] quotationIds) {
return toAjax(service.deleteBizQuotationByIds(quotationIds));
}
/**
* 按供应商ID查询报价明细展开为每行一条物料
* 用于供应商管理页面的"报价历史"Tab
*/
@PreAuthorize("@ss.hasPermi('bid:quotation:list')")
@GetMapping("/supplier-items/{supplierId}")
public AjaxResult supplierItems(@PathVariable Long supplierId) {
List<Map<String, Object>> list = quotationItemMapper.selectItemsBySupplierId(supplierId);
return success(list);
}
}