From 21b0f5d0b9fb0fbe52a3d86697dd30d193f50adbe1a1141ccb1e1ccf42c80906 Mon Sep 17 00:00:00 2001 From: PC <2413103649@qq.com> Date: Mon, 19 Jan 2026 14:34:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=94=9F=E6=88=90=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E5=B7=A5=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EbikeBikeOrderController.java | 24 ++++++++++ .../operations/model/vo/DispatchSwapVo.java | 21 +++++++++ .../service/EbikeBikeOrderService.java | 14 ++++++ .../impl/EbikeBikeOrderServiceImpl.java | 46 +++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/model/vo/DispatchSwapVo.java diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java index 9661970..c2ab3ea 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java @@ -137,6 +137,30 @@ public class EbikeBikeOrderController { return JsonResult.success(); } + /** + * 校验车辆是否可以生成调度工单。 + * + * @param bikeCode 车辆编号 + * @return 结果 + */ + @GetMapping("checkDispatchSwapOrder") + public JsonResult checkDispatchSwapOrder(@NotNull(message = "车辆编号不能为空") String bikeCode) { + Boolean checked = ebikeBikeOrderService.checkDispatchSwapOrder(bikeCode); + return JsonResult.success(checked); + } + + /** + * 批量生成调度工单。 + * + * @param dispatchSwapVo 车辆编号 + * @return 结果 + */ + @GetMapping("dispatchSwapOrders") + public JsonResult dispatchSwapOrders(@RequestBody @Validated DispatchSwapVo dispatchSwapVo) { + ebikeBikeOrderService.createDispatchSwapOrders(dispatchSwapVo); + return JsonResult.success(); + } + /** * 生成维修工单。 * diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/DispatchSwapVo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/DispatchSwapVo.java new file mode 100644 index 0000000..f2f5273 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/DispatchSwapVo.java @@ -0,0 +1,21 @@ +package com.cdzy.operations.model.vo; + +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DispatchSwapVo { + @NotNull(message = "车辆编号不能为空") + private List bikeCodes; + + @NotNull(message = "是否接单不能为空") + private Boolean acceptOrders; +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java index 7593d9d..b44f3a0 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java @@ -5,6 +5,7 @@ import com.cdzy.operations.model.entity.EbikeBikeOrder; import com.cdzy.operations.model.entity.EbikeRegion; import com.cdzy.operations.model.vo.*; import com.mybatisflex.core.service.IService; +import jakarta.validation.constraints.NotNull; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -143,4 +144,17 @@ public interface EbikeBikeOrderService extends IService { * @return 结果 */ EbikeOrderUnfinishedInfo unfinishedOrders(); + + /** + * 批量生成工单信息 + * @param dispatchSwapVo 车辆编号 + */ + void createDispatchSwapOrders(DispatchSwapVo dispatchSwapVo); + + /** + * 校验车辆是否已存在调度工单。 + * + * @param bikeCode 车辆编号 + */ + Boolean checkDispatchSwapOrder(@NotNull(message = "车辆编号不能为空") String bikeCode); } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java index d87bcd8..e2dc59d 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java @@ -811,6 +811,52 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl bikeCodes = dispatchSwapVo.getBikeCodes(); + QueryWrapper queryWrapper = new QueryWrapper() + .select(EBIKE_BIKE_INFO.OPERATOR_ID) + .where(EBIKE_BIKE_INFO.BIKE_CODE.in(bikeCodes)) + .groupBy(EBIKE_BIKE_INFO.OPERATOR_ID); + long count = bikeInfoMapper.selectCountByQuery(queryWrapper); + if (count > 1) { + throw new EbikeException("该列表中同时存在不同运营商的车辆"); + } + queryWrapper.clear(); + queryWrapper.select(EBIKE_BIKE_INFO.OPERATOR_ID) + .where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCodes.get(0))) + .groupBy(EBIKE_BIKE_INFO.OPERATOR_ID); + Long operatorId = bikeInfoMapper.selectOneByQueryAs(queryWrapper, Long.class); + List list = new ArrayList<>(); + long staffId = StpUtil.getLoginIdAsLong(); + for (String bikeCode : bikeCodes) { + EbikeBikeOrder ebikeBikeOrder = EbikeBikeOrder.builder() + .bikeCode(bikeCode) + .orderCode(snowFlakeIDKeyGenerator.nextId()) + .orderType(BikeOrderType.DISPATCH) + .operatorId(operatorId) + .dispatchState(OrderDispatchState.PROCESSED) + .build(); + if (dispatchSwapVo.getAcceptOrders()) { + ebikeBikeOrder.setReceiverId(staffId); + } + list.add(ebikeBikeOrder); + } + this.mapper.insertBatch(list); + + } + + @Override + public Boolean checkDispatchSwapOrder(String bikeCode) { + checkBikeCode(bikeCode); + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(bikeCode)) + .where(EBIKE_BIKE_ORDER.HANDLE_STATE.ne(OrderHandleState.PROCESSED)) + .and(EBIKE_BIKE_ORDER.HANDLE_STATE.ne(OrderHandleState.VOIDED)); + EbikeBikeInfo ebikeBikeInfo = bikeInfoMapper.selectOneByQuery(queryWrapper); + return ebikeBikeInfo == null; + } + EbikeBikeInfo checkBikeCode(String bikeCode) { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode))