,入库单明细表关联是itemCode,receiptCode。
根据上述需求,可以编写以下Java代码:
- 定义两个实体类:Item(商品)和Vendor(供应商),分别包含对应的属性和getter/setter方法。
public class Item {
private String itemCode; // 商品编码
private String itemName; // 商品名称
// 其他属性和getter/setter方法
}
public class Vendor {
private String vendorCode; // 供应商编码
private String vendorName; // 供应商名称
// 其他属性和getter/setter方法
}
- 定义一个入库单明细实体类ReceiptDetail,包含对应的属性和getter/setter方法,并关联Item和Vendor。
public class ReceiptDetail {
private String receiptCode; // 入库单编码
private String itemCode; // 商品编码
private int quantity; // 商品数量
private double price; // 商品单价
private Item item; // 商品实体
private Vendor vendor; // 供应商实体
// 其他属性和getter/setter方法
}
- 编写查询方法,查询所有供应商都维护了入库单里所有的商品。
public List queryAllVendors() {
List vendors = new ArrayList<>();
// 查询所有商品
List- items = itemDao.queryAllItems();
// 查询所有入库单明细
List receiptDetails = receiptDetailDao.queryAllReceiptDetails();
// 根据商品编码分组,统计每个商品在哪些入库单中出现
Map<String, List> itemReceiptMap = new HashMap<>();
for (ReceiptDetail receiptDetail : receiptDetails) {
String itemCode = receiptDetail.getItemCode();
String receiptCode = receiptDetail.getReceiptCode();
if (!itemReceiptMap.containsKey(itemCode)) {
itemReceiptMap.put(itemCode, new ArrayList<>());
}
itemReceiptMap.get(itemCode).add(receiptCode);
}
// 遍历所有供应商,判断是否维护了所有商品
for (Vendor vendor : vendorDao.queryAllVendors()) {
boolean maintainAllItems = true;
for (Item item : items) {
if (!itemReceiptMap.containsKey(item.getItemCode())) {
// 商品没有出现在任何入库单中,不需要判断供应商是否维护
continue;
}
List receipts = itemReceiptMap.get(item.getItemCode());
boolean maintainItem = false;
for (String receiptCode : receipts) {
ReceiptDetail receiptDetail = receiptDetailDao.queryReceiptDetail(receiptCode, item.getItemCode());
if (receiptDetail != null && receiptDetail.getVendorCode().equals(vendor.getVendorCode())) {
// 该供应商维护了该商品
maintainItem = true;
break;
}
}
if (!maintainItem) {
// 该供应商没有维护该商品
maintainAllItems = false;
break;
}
}
if (maintainAllItems) {
// 该供应商维护了所有商品
vendors.add(vendor);
}
}
return vendors;
}
在该方法中,先查询所有商品和入库单明细,然后根据商品编码分组,统计每个商品在哪些入库单中出现。接着遍历所有供应商,判断是否维护了所有商品,最后返回维护了所有商品的供应商列表