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 909f3f5..1ff27d1 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 @@ -4,7 +4,7 @@ import cn.dev33.satoken.stp.StpUtil; import com.cdzy.common.enums.Message; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; -import com.cdzy.operations.enums.BikeOrderHandleState; +import com.cdzy.operations.enums.OrderHandleState; import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeRegion; import com.cdzy.operations.model.vo.*; @@ -50,7 +50,7 @@ public class EbikeBikeOrderController { public JsonResult page(PageParam page, Integer orderType, String bikeCode) { QueryWrapper queryWrapper = QueryWrapper.create() .select(EBIKE_BIKE_INFO.LOCATION, EBIKE_BIKE_ORDER.ALL_COLUMNS) - .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(BikeOrderHandleState.UNPROCESSED)) + .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.UNPROCESSED)) .where(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(orderType, Objects.nonNull(orderType))) .where(EBIKE_BIKE_ORDER.BIKE_CODE.like(bikeCode, StringUtil.hasText(bikeCode))) .leftJoin(EBIKE_BIKE_INFO).on(EBIKE_BIKE_INFO.BIKE_CODE.eq(EBIKE_BIKE_ORDER.BIKE_CODE)); @@ -68,7 +68,8 @@ public class EbikeBikeOrderController { public JsonResult pageByStaff(PageParam page, Integer orderType, String bikeCode) { QueryWrapper queryWrapper = QueryWrapper.create() .select(EBIKE_BIKE_INFO.LOCATION, EBIKE_BIKE_ORDER.ALL_COLUMNS) - .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(BikeOrderHandleState.RECEIVED)) + .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.ACCEPTED)) + .or(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.ACCEPTED)) .where(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(orderType, Objects.nonNull(orderType))) .where(EBIKE_BIKE_ORDER.BIKE_CODE.like(bikeCode, StringUtil.hasText(bikeCode))) .where(EBIKE_BIKE_ORDER.RECEIVER_ID.eq(StpUtil.getLoginIdAsLong())) @@ -333,4 +334,26 @@ public class EbikeBikeOrderController { EbikeOrderUnfinishedInfo info = ebikeBikeOrderService.unfinishedOrders(); return JsonResult.success(info); } + + /** + * 查看未完成调度工单的车辆编号列表 + * + * @return 操作结果 + */ + @GetMapping("unfinishedDispatchBikeCodes") + public JsonResult> unfinishedDispatchBikeCodes() { + List list = ebikeBikeOrderService.unfinishedDispatchBikeCodes(); + return JsonResult.success(list); + } + + /** + * 批量完成调度工单 + * + * @return 操作结果 + */ + @GetMapping("batchFinishDispatch") + public JsonResult batchFinishDispatch(@RequestBody @Validated EbikeBatchDispatchVo dispatchVo) { + ebikeBikeOrderService.batchFinishDispatch(dispatchVo); + return JsonResult.success(); + } } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/enums/BikeOrderHandleState.java b/ebike-operations/src/main/java/com/cdzy/operations/enums/BikeOrderHandleState.java deleted file mode 100644 index 4382f0d..0000000 --- a/ebike-operations/src/main/java/com/cdzy/operations/enums/BikeOrderHandleState.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.cdzy.operations.enums; - -/** - * @author attiya - * @since 2025-11-25 - */ -public interface BikeOrderHandleState { - - /** - * 未处理 - */ - int UNPROCESSED = 0; - - - /** - * 已接单 - */ - int RECEIVED = 1; - - /** - * 已处理 - */ - int PROCESSED = 2; -} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchDispatchVo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchDispatchVo.java new file mode 100644 index 0000000..178ef0b --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchDispatchVo.java @@ -0,0 +1,45 @@ +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.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * + * @author attiya + * @since 2025-10-21 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeBatchDispatchVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 车辆编号列表 + */ + @NotNull(message = "车辆编号列表不能为空") + private List bikeCodes; + + @NotNull(message = "站点不能为空") + private Long siteId; + + /** + * 文件地址 + */ + private List fileUrls; + + /** + * 备注 + */ + private String remarks; +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchUnLaunchVo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchUnLaunchVo.java index 99ce1c8..78336cf 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchUnLaunchVo.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/vo/EbikeBatchUnLaunchVo.java @@ -11,7 +11,6 @@ import java.io.Serializable; import java.util.List; /** - * 实体类。 * * @author attiya * @since 2025-10-21 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 b44f3a0..50784f1 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 @@ -157,4 +157,17 @@ public interface EbikeBikeOrderService extends IService { * @param bikeCode 车辆编号 */ Boolean checkDispatchSwapOrder(@NotNull(message = "车辆编号不能为空") String bikeCode); + + /** + * 查看未完成调度工单的车辆编号列表 + * + * @return 车辆编号 + */ + List unfinishedDispatchBikeCodes(); + + /** + * 批量完成调度 + * @param dispatchVo 调度信息 + */ + void batchFinishDispatch(EbikeBatchDispatchVo dispatchVo); } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java index 7e20697..efec49f 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeInfoServiceImpl.java @@ -375,7 +375,7 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl unfinishedDispatchBikeCodes() { + QueryWrapper queryWrapper = QueryWrapper.create() + .select(EBIKE_BIKE_ORDER.BIKE_CODE) + .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.ACCEPTED)) + .where(EBIKE_BIKE_ORDER.RECEIVER_ID.eq(StpUtil.getLoginIdAsLong())) + .where(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.DISPATCH)); + return this.mapper.selectListByQueryAs(queryWrapper, String.class); + } + + @Override + public void batchFinishDispatch(EbikeBatchDispatchVo dispatchVo) { + List bikeCodes = dispatchVo.getBikeCodes(); + List fileUrls = dispatchVo.getFileUrls(); + List files = new ArrayList<>(); + Long receiverId = StpUtil.getLoginIdAsLong(); + QueryWrapper queryWrapper = QueryWrapper.create() + .where(EBIKE_BIKE_ORDER.RECEIVER_ID.eq(receiverId)) + .where(EBIKE_BIKE_ORDER.BIKE_CODE.in(bikeCodes)) + .where(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.ACCEPTED).or(EBIKE_BIKE_ORDER.HANDLE_STATE.eq(OrderHandleState.UNPROCESSED))) + .where(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.DISPATCH)); + List list = list(queryWrapper); + if (list == null) { + throw new EbikeException("列表中车辆工单均不存在或已作废"); + } + EbikeDispatchConfiguration dispatchConfiguration = ebikeDispatchConfigurationMapper.selectOneByQuery(queryWrapper); + for (EbikeBikeOrder bikeOrder : list) { + bikeOrder.setSiteId(dispatchVo.getSiteId()); + bikeOrder.setHandleState(OrderHandleState.PROCESSED); + bikeOrder.setRemarks(dispatchVo.getRemarks()); + bikeOrder.setHandleAt(LocalDateTime.now()); + redisUtil.saveDispatchOrder(bikeOrder.getOrderId(), bikeOrder, dispatchConfiguration != null ? dispatchConfiguration.getDispatchDuration() : 24L, TimeUnit.HOURS); + if (fileUrls != null && !fileUrls.isEmpty()) { + for (String fileUrl : fileUrls) { + EbikeOrderFile ebikeOrderFile = EbikeOrderFile.builder() + .orderId(bikeOrder.getOrderId()) + .fileUrl(fileUrl) + .build(); + files.add(ebikeOrderFile); + } + } + } + if (!files.isEmpty()) { + ebikeOrderFileMapper.insertBatch(files); + } + if (!list.isEmpty()) { + updateBatch(list); + } + } + EbikeBikeInfo checkBikeCode(String bikeCode) { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode))