liding
2 天以前 4c33acfe648e9b008f91c5e2cf446550e6b0174d
main-business/src/main/java/com/ruoyi/business/service/impl/EquipmentUsageRecordServiceImpl.java
@@ -85,7 +85,6 @@
            }
            return dto;
        }).toList();
        dtoPage.setRecords(dtoRecords);
        return dtoPage;
    }
@@ -125,46 +124,54 @@
            // 设置使用开始时间为当前时间
            equipmentUsageRecord.setUsageStartTime(LocalDate.now());
            // 如果状态为1(已归还),则设置结束时间
            if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus())) {
                equipmentUsageRecord.setUsageEndTime(LocalDate.now());
            }
            return equipmentUsageRecordMapper.insert(equipmentUsageRecord);
        }
        // 更新记录逻辑
        else {
            // 1. 查询原领用记录
        } else {
            // 编辑记录逻辑
            EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId());
            if (originalRecord == null) {
                throw new RuntimeException("领用记录不存在");
            }
            // 2. 计算库存变化量(新数量 - 旧数量)
            int quantityDelta = newUsageQuantity - originalRecord.getUsageQuantity();
            // 处理归还逻辑
            if (equipmentUsageRecordDto.getEquipmentStatus() == 2) {
                // 检查归还数量是否合法
                if (newUsageQuantity > originalRecord.getUsageQuantity()) {
                    throw new RuntimeException("归还数量不能超过原领用数量");
                }
            if (quantityDelta != 0) {
                // 3. 检查调整后库存是否充足
                int newInventory = equipment.getQuantity() - quantityDelta;
                // 计算实际归还数量(原领用数量 - 新领用数量)
                int returnedQuantity = originalRecord.getUsageQuantity() - newUsageQuantity;
                // 恢复部分库存
                equipment.setQuantity(equipment.getQuantity() + returnedQuantity);
                equipmentManagementMapper.updateById(equipment);
                // 如果全部归还,设置归还时间
                if (newUsageQuantity == 0) {
                    equipmentUsageRecord.setUsageEndTime(LocalDate.now());
                }
                return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
            }
            // 处理普通编辑逻辑(非归还状态)
            if (!newUsageQuantity.equals(originalRecord.getUsageQuantity())) {
                // 计算库存变化量(旧数量 - 新数量)
                int quantityDelta = originalRecord.getUsageQuantity() - newUsageQuantity;
                // 检查调整后库存是否充足
                int newInventory = equipment.getQuantity() + quantityDelta;
                if (newInventory < 0) {
                    throw new RuntimeException("库存不足,调整后库存将为:" + newInventory);
                }
                // 4. 调整库存
                // 调整库存
                equipment.setQuantity(newInventory);
                if (equipmentManagementMapper.updateById(equipment) == 0) {
                    throw new RuntimeException("库存更新失败,可能已被其他操作修改");
                }
            }
            // 5. 如果状态变为1(已归还),则设置结束时间为当前时间
            if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus()) &&
                    (originalRecord.getEquipmentStatus() == null || !"1".equals(originalRecord.getEquipmentStatus()))) {
                equipmentUsageRecord.setUsageEndTime(LocalDate.now());
            }
            // 6. 更新领用记录
            // 更新领用记录
            return equipmentUsageRecordMapper.updateById(equipmentUsageRecord);
        }
    }