diff --git a/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java new file mode 100644 index 00000000..c7d25079 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java @@ -0,0 +1,65 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Distribution; // 导入Distribution实体类,代表配送信息 +import com.example.api.model.entity.Driver; // 导入Driver实体类,代表司机信息 +import com.example.api.model.entity.Vehicle; // 导入Vehicle实体类,代表车辆信息 +import com.example.api.repository.DistributionRepository; // 导入DistributionRepository接口,用于访问配送数据 +import com.example.api.repository.DriverRepository; // 导入DriverRepository接口,用于访问司机数据 +import com.example.api.repository.VehicleRepository; // 导入VehicleRepository接口,用于访问车辆数据 +import com.example.api.service.DistributionService; // 导入DistributionService接口,定义配送服务 +import org.springframework.stereotype.Service; // 导入Service注解,标识服务组件 + +import javax.annotation.Resource; // 注解,用于注入Spring管理的Bean +import java.util.List; // 导入List类,用于处理列表数据 +import java.util.Optional; // 导入Optional类,用于处理可能为空的数据 + +/** + * 配送服务实现类,提供配送相关的业务逻辑。 + */ +@Service +public class DistributionServiceImpl implements DistributionService { + + @Resource + private DistributionRepository distributionRepository; // 注入配送仓库,用于数据库操作 + + @Resource + private DriverRepository driverRepository; // 注入司机仓库,用于数据库操作 + + @Resource + private VehicleRepository vehicleRepository; // 注入车辆仓库,用于数据库操作 + + /** + * 保存配送信息。 + * @param distribution 配送实体对象,包含配送的详细信息 + * @return 保存后的配送实体对象 + * @throws Exception 如果保存过程中出现错误,则抛出异常 + */ + @Override + public Distribution save(Distribution distribution) throws Exception { + // 检查配送信息是否已存在,如果不存在则进行保存 + if (distributionRepository.findById(distribution.getId()) == null) { + // 根据配送信息中的司机ID查询司机信息 + Optional driver = driverRepository.findById(distribution.getDid()); + // 根据配送信息中车辆ID查询车辆信息 + Optional vehicle = vehicleRepository.findById(distribution.getVid()); + // 检查司机或车辆是否已经被分配任务,如果已经被分配则抛出异常 + if (driver.get().isDriving() || vehicle.get().isDriving()) throw new Exception("司机或货车状态不可用"); + // 更新司机和车辆的状态为正在配送 + driverRepository.updateDriving(true, distribution.getDid()); + vehicleRepository.updateDriving(true, distribution.getVid()); + } + // 保存配送信息到数据库 + return distributionRepository.save(distribution); + } + + /** + * 查询所有配送信息。 + * @return 配送实体对象列表,包含所有配送的详细信息 + */ + @Override + public List findAll() { + // 调用配送仓库的方法查询所有配送信息 + return distributionRepository.findAll(); + } + +}