|
|
@@ -8,7 +8,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
+import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
import com.sckw.core.common.enums.enums.FileEnum;
|
|
|
+import com.sckw.core.exception.BusinessPlatfromException;
|
|
|
import com.sckw.core.exception.SystemException;
|
|
|
import com.sckw.core.model.base.BaseModel;
|
|
|
import com.sckw.core.model.constant.Global;
|
|
|
@@ -41,6 +43,7 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
|
|
|
import com.sckw.transport.api.dubbo.TransportRemoteService;
|
|
|
import com.sckw.transport.api.model.param.CapacityTruckParam;
|
|
|
import com.sckw.transport.api.model.vo.CapacityTruckVO;
|
|
|
+import com.sckw.transport.api.model.vo.RWaybillOrderVo;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -1140,13 +1143,8 @@ public class KwfDriverService {
|
|
|
*/
|
|
|
public List<KwfDriverAssociatedTrackVO> queryAssociatedTrack(AssociatedTrackRequest request) {
|
|
|
log.info("查询司机关联车辆信息:{}", JSON.toJSONString(request));
|
|
|
- LambdaQueryWrapper<KwfDriverAssociatedTrack> queryWrapper = Wrappers.<KwfDriverAssociatedTrack>lambdaQuery()
|
|
|
- .eq(KwfDriverAssociatedTrack::getEntId, request.getEntId())
|
|
|
- .eq(KwfDriverAssociatedTrack::getDriverId, request.getDriverId())
|
|
|
- .eq(KwfDriverAssociatedTrack::getDelFlag, 0)
|
|
|
- .orderByDesc(KwfDriverAssociatedTrack::getCreateTime);
|
|
|
-
|
|
|
- List<KwfDriverAssociatedTrack> associatedTrackList = driverAssociatedTrackRepository.list(queryWrapper);
|
|
|
+ List<KwfDriverAssociatedTrack> associatedTrackList = driverAssociatedTrackRepository
|
|
|
+ .queryByEntIdAndDriverId(request.getEntId(),request.getDriverId());
|
|
|
if (CollectionUtils.isEmpty(associatedTrackList)) {
|
|
|
return Collections.emptyList();
|
|
|
}
|
|
|
@@ -1195,29 +1193,54 @@ public class KwfDriverService {
|
|
|
log.info("新增司机关联车辆信息:{}", JSON.toJSONString(request));
|
|
|
CapacityTruckParam param = new CapacityTruckParam();
|
|
|
param.setTruckNo(request.getTruckNo());
|
|
|
- param.setEntId(request.getTruckNo());
|
|
|
- //校验物流订单列表里是否存在相同这牌
|
|
|
+ param.setEntId(request.getEntId());
|
|
|
+ //校验物流订单车辆是否存在
|
|
|
List<CapacityTruckVO> capacityTruckVOS = transportRemoteService.queryCapacityTruck(param);
|
|
|
if (CollectionUtils.isEmpty(capacityTruckVOS)) {
|
|
|
- throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, "您所在的企业暂无该车辆,请与企业管理人员联系");
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_TRUCK, "您所在的企业暂无该车辆,请与企业管理人员联系");
|
|
|
}
|
|
|
|
|
|
- Long truckId = capacityTruckVOS.stream().map(CapacityTruckVO::getTruckId)
|
|
|
- .distinct().findFirst().orElse(null);
|
|
|
- KwfTruck truckByTruckId = truckRepository.queryByTruckId(truckId);
|
|
|
+ Long truckId = capacityTruckVOS.stream().map(CapacityTruckVO::getTruckId).distinct().findFirst()
|
|
|
+ .orElseThrow(() ->new BusinessPlatfromException(ErrorCodeEnum.TRUCK_NOT_FOUND, "车牌[" + request.getTruckNo() + "]未关联有效车辆ID"));
|
|
|
+ KwfTruck truck = truckRepository.queryByTruckId(truckId);
|
|
|
+ if (truck == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.TRUCK_NOT_FOUND, "车辆ID[" + truckId + "]不存在");
|
|
|
+ }
|
|
|
+ //校验车辆车轴信息
|
|
|
+ if (StringUtils.isBlank(truck.getCarAxis()) || request.getTruckAxleId() != Long.parseLong(truck.getCarAxis())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_TRUCK, "您所在的企业暂无该车辆,请与企业管理人员联系");
|
|
|
+ }
|
|
|
|
|
|
- //校验物流订单列表里车牌是否存在相同车轴
|
|
|
- if ( truckByTruckId.getCarAxis() == null || request.getTruckAxleId() != Long.parseLong(truckByTruckId.getCarAxis())) {
|
|
|
- throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, "您所在的企业暂无该车辆,请与企业管理人员联系");
|
|
|
+ //校验车辆是否已存在
|
|
|
+ List<KwfDriverAssociatedTrack> associatedTrackList = driverAssociatedTrackRepository.queryByEntIdAndDriverId(request.getEntId(),request.getDriverId());
|
|
|
+ boolean isDuplicate = associatedTrackList.stream()
|
|
|
+ .anyMatch(track -> Objects.equals(track.getTruckNo(), request.getTruckNo()));
|
|
|
+ if (isDuplicate) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.ASSOCIATED_TRUCK_EXIST, "司机已关联车牌[" + request.getTruckNo() + "],无需重复添加");
|
|
|
}
|
|
|
- //新增司机关联车辆信息
|
|
|
+
|
|
|
+ //校验新增车辆是否有未完成运单
|
|
|
+ List<RWaybillOrderVo> waybillVos = transportRemoteService.queryWaybillOrder(param);
|
|
|
+ if (CollectionUtils.isNotEmpty(waybillVos)) {
|
|
|
+ //首次关联不能新增
|
|
|
+ if (CollectionUtils.isEmpty(associatedTrackList)) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.ASSOCIATED_TRUCK_EXIST, "当前车辆正在任务中,请稍后进行添加");
|
|
|
+ }
|
|
|
+ // 非首次关联,允许添加但不设为当前车辆
|
|
|
+ log.info("非首次关联,允许添加有未完成运单的车辆[{}]", request.getTruckNo());
|
|
|
+ }
|
|
|
+
|
|
|
+ //设置关联状态(首次关联设为当前车辆,并将原有当前车辆置为非当前)
|
|
|
KwfDriverAssociatedTrack associatedTrack = new KwfDriverAssociatedTrack();
|
|
|
associatedTrack.setEntId(request.getEntId());
|
|
|
associatedTrack.setDriverId(request.getDriverId());
|
|
|
associatedTrack.setTruckNo(request.getTruckNo());
|
|
|
associatedTrack.setTruckAxleId(request.getTruckAxleId());
|
|
|
+ associatedTrack.setCreateUser(request.getDriverId());
|
|
|
+ //首次关联默认设为当前车辆;
|
|
|
+ associatedTrack.setStatus(associatedTrackList.isEmpty() ? Global.YES : Global.NO);
|
|
|
driverAssociatedTrackRepository.save(associatedTrack);
|
|
|
- log.info("新增司机关联车辆成功!");
|
|
|
+ log.info("新增司机关联车辆成功,记录ID:{},车牌:{}", associatedTrack.getId(), request.getTruckNo());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1227,17 +1250,20 @@ public class KwfDriverService {
|
|
|
public void deleteAssociatedTrack(Long id) {
|
|
|
log.info("删除司机关联车辆:{}", id);
|
|
|
//校验
|
|
|
- if (StringUtils.isBlank(id)) {
|
|
|
- throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ID_MISSING);
|
|
|
+ if (id == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "id不能为空!");
|
|
|
}
|
|
|
KwfDriverAssociatedTrack associatedTrack = driverAssociatedTrackRepository.getById(id);
|
|
|
if (associatedTrack == null) {
|
|
|
- throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.DELETE_FAIL);
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.ASSOCIATED_TRUCK_NOT_FOUND, "司机关联车辆信息不存在!");
|
|
|
}
|
|
|
+ //校验车辆是否有未完成运单
|
|
|
+ checkTruckHasUnfinishedWaybill(associatedTrack.getTruckNo(), associatedTrack.getEntId() , false);
|
|
|
associatedTrack.setDelFlag(Global.YES);
|
|
|
if (!driverAssociatedTrackRepository.updateById(associatedTrack)) {
|
|
|
- throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.DELETE_FAIL);
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.DATA_DELETE_FAIL, "删除失败");
|
|
|
}
|
|
|
+
|
|
|
log.info("删除司机关联车辆成功!");
|
|
|
}
|
|
|
|
|
|
@@ -1249,29 +1275,57 @@ public class KwfDriverService {
|
|
|
public void switchAssociatedTrack(Long id) {
|
|
|
log.info("切换关联车辆id:{}", id);
|
|
|
//校验
|
|
|
- if (StringUtils.isBlank(id)) {
|
|
|
- throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ID_MISSING);
|
|
|
+ if (id == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "id不能为空!");
|
|
|
}
|
|
|
- KwfDriverAssociatedTrack associatedTrack = driverAssociatedTrackRepository.getById(id);
|
|
|
- if (associatedTrack == null) {
|
|
|
- throw new SystemException(HttpStatus.QUERY_FAIL_CODE, HttpStatus.DELETE_FAIL);
|
|
|
+ KwfDriverAssociatedTrack newTrack = driverAssociatedTrackRepository.getById(id);
|
|
|
+ if (newTrack == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.ASSOCIATED_TRUCK_NOT_FOUND, "司机关联车辆信息不存在!");
|
|
|
+ }
|
|
|
+ if (newTrack.getStatus() == Global.YES) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.TRUCK_STATUS_ERROR, "所选车辆为当前车辆,不能切换,请重新选择!");
|
|
|
}
|
|
|
+ //校验新车辆是否有未完成运单
|
|
|
+ checkTruckHasUnfinishedWaybill(newTrack.getTruckNo(), newTrack.getEntId() , true);
|
|
|
+
|
|
|
//先更改旧关联车辆
|
|
|
LambdaQueryWrapper<KwfDriverAssociatedTrack> queryWrapper = Wrappers.<KwfDriverAssociatedTrack>lambdaQuery()
|
|
|
- .eq(KwfDriverAssociatedTrack::getDriverId, associatedTrack.getDriverId())
|
|
|
- .eq(KwfDriverAssociatedTrack::getEntId, associatedTrack.getEntId())
|
|
|
+ .eq(KwfDriverAssociatedTrack::getDriverId, newTrack.getDriverId())
|
|
|
+ .eq(KwfDriverAssociatedTrack::getEntId, newTrack.getEntId())
|
|
|
.eq(KwfDriverAssociatedTrack::getStatus, Global.YES);
|
|
|
- KwfDriverAssociatedTrack oldAssociatedTrack = driverAssociatedTrackRepository.getOne(queryWrapper);
|
|
|
- oldAssociatedTrack.setStatus(Global.NO);
|
|
|
- driverAssociatedTrackRepository.updateById(oldAssociatedTrack);
|
|
|
-
|
|
|
+ KwfDriverAssociatedTrack oldTrack = driverAssociatedTrackRepository.getOne(queryWrapper);
|
|
|
+ if (oldTrack != null) {
|
|
|
+ //校验旧车辆否有未完成运单
|
|
|
+ checkTruckHasUnfinishedWaybill(oldTrack.getTruckNo(), oldTrack.getEntId() , false);
|
|
|
+ oldTrack.setStatus(Global.NO);
|
|
|
+ driverAssociatedTrackRepository.updateById(oldTrack);
|
|
|
+ log.info("旧关联车辆[{}]已取消", oldTrack.getTruckNo());
|
|
|
+ }
|
|
|
//更改新关联车辆
|
|
|
- associatedTrack.setStatus(Global.YES);
|
|
|
- driverAssociatedTrackRepository.updateById(associatedTrack);
|
|
|
- log.info("切换关联车辆成功!");
|
|
|
+ newTrack.setStatus(Global.YES);
|
|
|
+ driverAssociatedTrackRepository.updateById(newTrack);
|
|
|
+ log.info("关联车辆切换成功,新车辆[{}]",newTrack.getTruckNo());
|
|
|
}
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验车辆是否有未完成运单
|
|
|
+ */
|
|
|
+ private void checkTruckHasUnfinishedWaybill(String truckNo, Long entId, boolean isNew) {
|
|
|
+ if (truckNo == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, isNew ? "新关联车辆号为空!" : "旧关联车辆号为空!");
|
|
|
+ }
|
|
|
+ CapacityTruckParam param = new CapacityTruckParam();
|
|
|
+ param.setTruckNo(truckNo);
|
|
|
+ param.setEntId(entId);
|
|
|
+ List<RWaybillOrderVo> waybillVos = transportRemoteService.queryWaybillOrder(param);
|
|
|
+ if (CollectionUtils.isNotEmpty(waybillVos)) {
|
|
|
+ String msg = isNew ?
|
|
|
+ String.format("新关联车辆[%s]有未完成运单,无法切换!", truckNo) :
|
|
|
+ String.format("当前车辆[%s]有未完成运单,无法切换!", truckNo);
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_UNFINISHED, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|