| | |
| | | } |
| | | return dto; |
| | | }).toList(); |
| | | |
| | | dtoPage.setRecords(dtoRecords); |
| | | return dtoPage; |
| | | } |
| | |
| | | |
| | | // 设置使用开始时间为当前时间 |
| | | 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); |
| | | } |
| | | } |