feat(bid): 完成物料管理模块全功能开发
1. 新增物料详情页路由、菜单与接口,支持查看物料报价与信息 2. 重构物料列表页面,新增品牌筛选、表格样式优化与详情跳转 3. 扩展物料实体与数据库字段,新增材质、用途、性能参数等字段 4. 新增供应商/甲方报价查询、批量对比、同名称物料匹配接口 5. 新增物料详情组件,包含基础信息、供应商报价、甲方报价标签页 6. 修复比价路由跳转路径错误,调整数据库密码配置 7. 新增物料相关SQL脚本与初始化数据
This commit is contained in:
@@ -9,7 +9,6 @@ public class BizMaterial extends BaseEntity {
|
||||
private String materialCode;
|
||||
private String materialName;
|
||||
private String spec;
|
||||
private String modelNo;
|
||||
private String unit;
|
||||
private String brand;
|
||||
private String description;
|
||||
@@ -17,6 +16,12 @@ public class BizMaterial extends BaseEntity {
|
||||
// search helper
|
||||
private String categoryName;
|
||||
|
||||
// 新增字段
|
||||
private String performanceParams;
|
||||
private String material;
|
||||
private String purpose;
|
||||
private String imageUrl;
|
||||
|
||||
public Long getMaterialId() { return materialId; }
|
||||
public void setMaterialId(Long materialId) { this.materialId = materialId; }
|
||||
public Long getTenantId() { return tenantId; }
|
||||
@@ -29,8 +34,6 @@ public class BizMaterial extends BaseEntity {
|
||||
public void setMaterialName(String materialName) { this.materialName = materialName; }
|
||||
public String getSpec() { return spec; }
|
||||
public void setSpec(String spec) { this.spec = spec; }
|
||||
public String getModelNo() { return modelNo; }
|
||||
public void setModelNo(String modelNo) { this.modelNo = modelNo; }
|
||||
public String getUnit() { return unit; }
|
||||
public void setUnit(String unit) { this.unit = unit; }
|
||||
public String getBrand() { return brand; }
|
||||
@@ -41,4 +44,12 @@ public class BizMaterial extends BaseEntity {
|
||||
public void setStatus(String status) { this.status = status; }
|
||||
public String getCategoryName() { return categoryName; }
|
||||
public void setCategoryName(String categoryName) { this.categoryName = categoryName; }
|
||||
public String getPerformanceParams() { return performanceParams; }
|
||||
public void setPerformanceParams(String performanceParams) { this.performanceParams = performanceParams; }
|
||||
public String getMaterial() { return material; }
|
||||
public void setMaterial(String material) { this.material = material; }
|
||||
public String getPurpose() { return purpose; }
|
||||
public void setPurpose(String purpose) { this.purpose = purpose; }
|
||||
public String getImageUrl() { return imageUrl; }
|
||||
public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.ruoyi.system.mapper.bid;
|
||||
|
||||
import com.ruoyi.system.domain.bid.BizMaterial;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface BizMaterialMapper {
|
||||
List<BizMaterial> selectBizMaterialList(BizMaterial query);
|
||||
@@ -10,4 +12,21 @@ public interface BizMaterialMapper {
|
||||
int updateBizMaterial(BizMaterial record);
|
||||
int deleteBizMaterialById(Long id);
|
||||
int deleteBizMaterialByIds(Long[] ids);
|
||||
|
||||
// 物料详情页
|
||||
List<Map<String, Object>> selectSupplierQuotesByMaterialId(Long materialId);
|
||||
|
||||
// 批量物料对比
|
||||
List<BizMaterial> selectBizMaterialByIds(List<Long> materialIds);
|
||||
List<Map<String, Object>> selectSupplierPriceSummaryByMaterialIds(List<Long> materialIds);
|
||||
List<Map<String, Object>> selectBestSupplierOfferByMaterialIds(List<Long> materialIds);
|
||||
List<Map<String, Object>> selectClientQuotesByMaterialId(Long materialId);
|
||||
List<String> selectManufacturerList();
|
||||
|
||||
// 同类型物料横向对比
|
||||
List<BizMaterial> selectMaterialsWithSupplierQuotes();
|
||||
List<Map<String, Object>> selectSupplierQuoteComparison(List<Long> materialIds);
|
||||
|
||||
// 根据物料名称精确匹配(同名称不同规格/品牌对比)
|
||||
List<BizMaterial> selectMaterialsByExactName(@Param("materialName") String materialName, @Param("excludeId") Long excludeId);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.ruoyi.system.service.bid;
|
||||
|
||||
import com.ruoyi.system.domain.bid.BizMaterial;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IBizMaterialService {
|
||||
List<BizMaterial> selectBizMaterialList(BizMaterial query);
|
||||
@@ -10,4 +11,18 @@ public interface IBizMaterialService {
|
||||
int updateBizMaterial(BizMaterial record);
|
||||
int deleteBizMaterialById(Long id);
|
||||
int deleteBizMaterialByIds(Long[] ids);
|
||||
|
||||
List<Map<String, Object>> selectSupplierQuotesByMaterialId(Long materialId);
|
||||
List<Map<String, Object>> selectClientQuotesByMaterialId(Long materialId);
|
||||
List<String> selectManufacturerList();
|
||||
|
||||
// 批量物料对比
|
||||
Map<String, Object> compareMaterials(List<Long> materialIds);
|
||||
|
||||
// 同类型物料横向对比
|
||||
List<BizMaterial> selectMaterialsWithSupplierQuotes();
|
||||
List<Map<String, Object>> selectSupplierQuoteComparison(List<Long> materialIds);
|
||||
|
||||
// 根据物料名称精确匹配(同名称不同规格/品牌对比)
|
||||
List<BizMaterial> selectMaterialsByExactName(String materialName, Long excludeId);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ import com.ruoyi.system.mapper.bid.BizMaterialMapper;
|
||||
import com.ruoyi.system.service.bid.IBizMaterialService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class BizMaterialServiceImpl implements IBizMaterialService {
|
||||
@@ -41,4 +42,70 @@ public class BizMaterialServiceImpl implements IBizMaterialService {
|
||||
public int deleteBizMaterialByIds(Long[] ids) {
|
||||
return mapper.deleteBizMaterialByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> selectSupplierQuotesByMaterialId(Long materialId) {
|
||||
return mapper.selectSupplierQuotesByMaterialId(materialId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> selectClientQuotesByMaterialId(Long materialId) {
|
||||
return mapper.selectClientQuotesByMaterialId(materialId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> selectManufacturerList() {
|
||||
return mapper.selectManufacturerList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> compareMaterials(List<Long> materialIds) {
|
||||
if (materialIds == null || materialIds.isEmpty()) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
// 1. 获取物料基本信息
|
||||
List<BizMaterial> materials = mapper.selectBizMaterialByIds(materialIds);
|
||||
|
||||
// 2. 获取供应商报价汇总
|
||||
List<Map<String, Object>> priceSummaries = mapper.selectSupplierPriceSummaryByMaterialIds(materialIds);
|
||||
Map<Long, Map<String, Object>> priceMap = new HashMap<>();
|
||||
for (Map<String, Object> row : priceSummaries) {
|
||||
Long mid = ((Number) row.get("material_id")).longValue();
|
||||
priceMap.put(mid, row);
|
||||
}
|
||||
|
||||
// 3. 获取最优报价详情
|
||||
List<Map<String, Object>> bestOffers = mapper.selectBestSupplierOfferByMaterialIds(materialIds);
|
||||
Map<Long, Map<String, Object>> bestOfferMap = new HashMap<>();
|
||||
for (Map<String, Object> row : bestOffers) {
|
||||
Long mid = ((Number) row.get("material_id")).longValue();
|
||||
bestOfferMap.put(mid, row);
|
||||
}
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
result.put("materials", materials);
|
||||
result.put("priceMap", priceMap);
|
||||
result.put("bestOfferMap", bestOfferMap);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BizMaterial> selectMaterialsWithSupplierQuotes() {
|
||||
return mapper.selectMaterialsWithSupplierQuotes();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> selectSupplierQuoteComparison(List<Long> materialIds) {
|
||||
if (materialIds == null || materialIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return mapper.selectSupplierQuoteComparison(materialIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BizMaterial> selectMaterialsByExactName(String materialName, Long excludeId) {
|
||||
return mapper.selectMaterialsByExactName(materialName, excludeId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user