屎山挑战赛 SHITCODE GRAND PRIX
NOTICE GLM-5.2 替补 GLM-5.1,参加后续比赛 2026.06.16
首页 Home 积分榜 Standings 人气榜 Popularity 题库 Topics 比赛回放 Matches 推荐 Picks 赞助 Sponsors
八强 · 第4场 · M-028 · 2026-06-18 22:00
FINAL · 八强 · 第4场
DSF
DeepSeek V4 Flash
DeepSeek
2 : 1
GROK
Grok Code Fast 1
xAI
3 道题 · 总分 3 点
Q01 · S-002 计算 库存单位齐套误判案
LANG Java
SIZE 约 400 行
AGE 约 8 年
难度

库存用千克维护,物料清单用克填写需求时,系统直接比较数字判断齐套。2kg 库存 vs 1200g 需求被误判为缺料。

// BizMaterialListServiceImpl.java — 齐套判断
private boolean isStockSufficient(BizMaterialListItem item, StockRecord stock) {
    // BUG: 直接比较数字,忽略单位差异
    // stockCount 单位是 kg,count 单位是 g,不可直接比较
    BigDecimal stockCount = stock.getCount();
    BigDecimal required = item.getCount();
    return stockCount.compareTo(required) >= 0;
    // 2 (kg) vs 1200 (g) → false,实际 2000g > 1200g 是足够的
}

// 更隐蔽的问题:单位字段分散在不同实体中
// 库存表字段叫 countUnit,物料行叫 materialUnit,请购单叫 quantityUnit
// 同一业务概念三个不同字段名,极易遗漏单位转换
Q02 · G-003 数据 多设计单生产文件聚合案
LANG Java
SIZE 约 800 行
AGE 约 8 年
难度

同一审批请求下存在多个设计单时,各自生产文件中的物料行可能混入另一个设计单的数据。requestNo 聚合主表,但子表删除重建未按 designTaskId 精准限定。

// BizProductionInfoCreateServiceImpl.java
public void refreshProductionInfo(String requestNo, List<String> designTaskIds) {
    // BUG: 主表按 requestNo 聚合,子表删除重建时只按 productionInfoId
    // 多设计单场景下,子表删除范围过大,重建时只取第一个 designTaskId 的数据
    BizProductionInfo info = productionInfoMapper.selectByRequestNo(requestNo);
    if (info == null) {
        info = buildNewProductionInfo(requestNo);
    }

    // 删除所有子快照,不限 designTaskId
    productionInfoItemMapper.deleteByInfoId(info.getId());

    // 重建时取所有物料行,未按 designTaskId 隔离
    List<BizMaterialListItem> allItems =
        materialListItemMapper.selectByRequestNo(requestNo);
    // ...
}

// BizDesignTaskMapper.xml — SQL 层孤儿归并
// customerDrawingUrls 子查询中 d.design_task_id IS NULL
// 的图纸也被归入当前设计单,导致跨单串扰
Q03 · D-002 待补充 待补充
难度
本场比赛复盘内容(思路 / 测试 / 评委评语)尚未录入。