package com.ruoyi.vehicle.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.vehicle.mapper.FuelRecordMapper; import com.ruoyi.vehicle.pojo.FuelCard; import com.ruoyi.vehicle.pojo.FuelRecord; import com.ruoyi.vehicle.pojo.VehicleInfo; import com.ruoyi.vehicle.service.FuelCardService; import com.ruoyi.vehicle.service.FuelRecordService; import com.ruoyi.vehicle.service.VehicleInfoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class FuelRecordServiceImpl extends ServiceImpl implements FuelRecordService { @Autowired private FuelCardService fuelCardService; @Autowired private VehicleInfoService vehicleInfoService; @Override @Transactional(rollbackFor = Exception.class) public boolean saveRecord(FuelRecord record) { // 如果没有传入部门,尝试从加油卡或车辆继承 if (record.getDeptId() == null) { if (record.getFuelCardId() != null) { FuelCard card = fuelCardService.getById(record.getFuelCardId()); if (card != null && card.getDeptId() != null) { record.setDeptId(card.getDeptId()); } } else if (record.getVehicleId() != null) { VehicleInfo vehicle = vehicleInfoService.getById(record.getVehicleId()); if (vehicle != null && vehicle.getDeptId() != null) { record.setDeptId(vehicle.getDeptId()); } } } record.setStatus("0"); // 默认草稿 return this.save(record); } @Override @Transactional(rollbackFor = Exception.class) public boolean updateRecord(FuelRecord record) { FuelRecord oldRecord = this.getById(record.getId()); if (oldRecord != null && "1".equals(oldRecord.getStatus())) { throw new RuntimeException("已提交的记录无法修改"); } return this.updateById(record); } @Override @Transactional(rollbackFor = Exception.class) public boolean removeRecordById(Long id) { FuelRecord oldRecord = this.getById(id); if (oldRecord != null && "1".equals(oldRecord.getStatus())) { throw new RuntimeException("已提交的记录无法删除"); } return this.removeById(id); } @Override @Transactional(rollbackFor = Exception.class) public boolean submitRecord(Long id) { FuelRecord record = this.getById(id); if (record == null) return false; if ("1".equals(record.getStatus())) { throw new RuntimeException("该记录已经提交"); } record.setStatus("1"); boolean updated = this.updateById(record); if (updated && record.getFuelCardId() != null && record.getAmount() != null) { FuelCard card = fuelCardService.getById(record.getFuelCardId()); if (card != null) { card.setCurrentBalance(card.getCurrentBalance().subtract(record.getAmount())); fuelCardService.updateById(card); } } return updated; } @Override @Transactional(rollbackFor = Exception.class) public boolean revokeRecord(Long id) { FuelRecord record = this.getById(id); if (record == null) return false; if ("0".equals(record.getStatus())) { throw new RuntimeException("草稿状态无需撤回"); } record.setStatus("0"); boolean updated = this.updateById(record); if (updated && record.getFuelCardId() != null && record.getAmount() != null) { FuelCard card = fuelCardService.getById(record.getFuelCardId()); if (card != null) { card.setCurrentBalance(card.getCurrentBalance().add(record.getAmount())); fuelCardService.updateById(card); } } return updated; } }