| | |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.time.LocalDate; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int addOrEditUsageRecord(EquipmentUsageRecordDto equipmentUsageRecordDto) { |
| | | // 参数校验 |
| | | if (equipmentUsageRecordDto == null) { |
| | | throw new IllegalArgumentException("设备使用记录参数不能为空"); |
| | | } |
| | | |
| | | // 复制属性到实体对象 |
| | | EquipmentUsageRecord equipmentUsageRecord = new EquipmentUsageRecord(); |
| | | BeanUtils.copyProperties(equipmentUsageRecordDto, equipmentUsageRecord); |
| | | |
| | |
| | | Long equipmentId = equipmentUsageRecordDto.getEquipmentId(); |
| | | Integer newUsageQuantity = equipmentUsageRecordDto.getUsageQuantity(); |
| | | |
| | | // 查询设备信息(带乐观锁版本号) |
| | | // 查询设备信息 |
| | | EquipmentManagement equipment = equipmentManagementMapper.selectById(equipmentId); |
| | | if (equipment == null) { |
| | | throw new RuntimeException("设备不存在"); |
| | | } |
| | | |
| | | // 新增记录逻辑 |
| | | if (Objects.isNull(equipmentUsageRecordDto.getId())) { |
| | | // 检查库存是否充足 |
| | | if (equipment.getQuantity() < newUsageQuantity) { |
| | |
| | | equipment.setQuantity(equipment.getQuantity() - newUsageQuantity); |
| | | equipmentManagementMapper.updateById(equipment); |
| | | |
| | | // 创建领用记录 |
| | | // 设置使用开始时间为当前时间 |
| | | equipmentUsageRecord.setUsageStartTime(LocalDate.now()); |
| | | |
| | | // 如果状态为1(已归还),则设置结束时间 |
| | | if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus())) { |
| | | equipmentUsageRecord.setUsageEndTime(LocalDate.now()); |
| | | } |
| | | |
| | | return equipmentUsageRecordMapper.insert(equipmentUsageRecord); |
| | | } else { |
| | | } |
| | | // 更新记录逻辑 |
| | | else { |
| | | // 1. 查询原领用记录 |
| | | EquipmentUsageRecord originalRecord = equipmentUsageRecordMapper.selectById(equipmentUsageRecordDto.getId()); |
| | | if (originalRecord == null) { |
| | |
| | | int quantityDelta = newUsageQuantity - originalRecord.getUsageQuantity(); |
| | | |
| | | if (quantityDelta != 0) { |
| | | // 3. 检查调整后库存是否充足(考虑增加和减少两种情况) |
| | | // 3. 检查调整后库存是否充足 |
| | | int newInventory = equipment.getQuantity() - quantityDelta; |
| | | if (newInventory < 0) { |
| | | throw new RuntimeException("库存不足,调整后库存将为:" + newInventory); |
| | |
| | | } |
| | | } |
| | | |
| | | // 5. 更新领用记录 |
| | | // 5. 如果状态变为1(已归还),则设置结束时间为当前时间 |
| | | if ("1".equals(equipmentUsageRecordDto.getEquipmentStatus()) && |
| | | (originalRecord.getEquipmentStatus() == null || !"1".equals(originalRecord.getEquipmentStatus()))) { |
| | | equipmentUsageRecord.setUsageEndTime(LocalDate.now()); |
| | | } |
| | | |
| | | // 6. 更新领用记录 |
| | | return equipmentUsageRecordMapper.updateById(equipmentUsageRecord); |
| | | } |
| | | } |