From 119d53ee69a963675384eb0e3b8a04682165cf0f5bc88b05b9b8c31ffa0a625d Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Tue, 23 Dec 2025 15:03:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E5=8D=95=E8=BF=87=E6=9C=9F=E5=AE=8C?= =?UTF-8?q?=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/EbikeTenantFactory.java | 60 +++++++++++-------- .../controller/EbikeBikeOrderController.java | 11 ++++ .../model/dto/EffectiveDispatchOrderDto.java | 33 ++++++++++ .../service/EbikeBikeOrderService.java | 12 ++-- .../impl/EbikeBikeOrderServiceImpl.java | 41 ++++++++++--- .../EbikeOperationsApplicationTests.java | 6 ++ 6 files changed, 125 insertions(+), 38 deletions(-) create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/model/dto/EffectiveDispatchOrderDto.java diff --git a/ebike-operations/src/main/java/com/cdzy/operations/component/EbikeTenantFactory.java b/ebike-operations/src/main/java/com/cdzy/operations/component/EbikeTenantFactory.java index 8e6d463..49e4b10 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/component/EbikeTenantFactory.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/component/EbikeTenantFactory.java @@ -16,35 +16,43 @@ import java.util.TimeZone; public class EbikeTenantFactory implements TenantFactory { public Object[] getTenantIds() { - if (StpUtil.isLogin()) { - RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); - Object attribute = attributes.getAttribute("tenantId", RequestAttributes.SCOPE_REQUEST); - if (attribute != null) { - String id = (String) StpUtil.getLoginId(); - Object object = StpUtil.getSessionByLoginId(id).get(id); - ObjectMapper objectMapper = new ObjectMapper() - .registerModule(new JavaTimeModule()) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); - CommonStaffInfo staffInfo = objectMapper.convertValue(object, CommonStaffInfo.class); - List roles = staffInfo.getRoles(); - boolean isSysAdmin = false; - for (CommonEbikeRole role : roles) { - if (role.getSysAdmin()) { - isSysAdmin = true; - break; + try { + if (StpUtil.isLogin()) { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + if (attributes != null) { + Object attribute = attributes.getAttribute("tenantId", RequestAttributes.SCOPE_REQUEST); + String id = (String) StpUtil.getLoginId(); + Object object = StpUtil.getSessionByLoginId(id).get(id); + ObjectMapper objectMapper = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); + CommonStaffInfo staffInfo = objectMapper.convertValue(object, CommonStaffInfo.class); + List roles = staffInfo.getRoles(); + boolean isSysAdmin = false; + for (CommonEbikeRole role : roles) { + if (role.getSysAdmin()) { + isSysAdmin = true; + break; + } + } + long tenantId = 0; + if (attribute != null) { + tenantId = Long.parseLong(attribute.toString()); + } + //系统管理员 + if (isSysAdmin) { + return null; + } else { + return new Object[]{tenantId}; } } - long tenantId = Long.parseLong(attribute.toString()); - //系统管理员 - if (isSysAdmin) { - return null; - } else { - return new Object[]{tenantId}; - } - } + } + return null; + } catch (Exception e) { + return null; } - return null; + } } \ No newline at end of file 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 8ac18cf..169a75b 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 @@ -276,6 +276,17 @@ public class EbikeBikeOrderController { } + /** + * 有效调度工单统计 + * + * @return 操作结果 + */ + @GetMapping("effectiveDispatchOrder") + public JsonResult> effectiveDispatchOrder(@RequestBody EffectiveDispatchOrderVo effectiveDispatchOrderVo) { + List list = ebikeBikeOrderService.effectiveDispatchOrder(effectiveDispatchOrderVo); + return JsonResult.success(list); + } + /** * 工单看板 * diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EffectiveDispatchOrderDto.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EffectiveDispatchOrderDto.java new file mode 100644 index 0000000..e28c10e --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EffectiveDispatchOrderDto.java @@ -0,0 +1,33 @@ +package com.cdzy.operations.model.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author attiya + * @since 2025-12-23 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EffectiveDispatchOrderDto { + + /** + * 用户名 + */ + private String username; + + /** + * 用户名 + */ + private String staffId; + + /** + * 有效调度工单总数 + */ + private Integer count; + +} 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 dad4e79..9db2c9c 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 @@ -1,9 +1,6 @@ package com.cdzy.operations.service; -import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeListDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto; -import com.cdzy.operations.model.dto.EbikeOrderBulletinBoardInfo; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeBikeOrder; import com.cdzy.operations.model.entity.EbikeRegion; import com.cdzy.operations.model.vo.*; @@ -133,4 +130,11 @@ public interface EbikeBikeOrderService extends IService { * 工单看板 */ EbikeOrderBulletinBoardInfo bulletinBoard(); + + /** + * 有效调度工单统计 + * @param effectiveDispatchOrderVo 筛选信息 + * @return 统计结果 + */ + List effectiveDispatchOrder(EffectiveDispatchOrderVo effectiveDispatchOrderVo); } 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 b741283..a7f733e 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 @@ -6,10 +6,7 @@ import com.cdzy.common.ex.EbikeException; import com.cdzy.common.model.dto.ResGPSDto; import com.cdzy.operations.enums.*; import com.cdzy.operations.mapper.*; -import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeListDto; -import com.cdzy.operations.model.dto.EbikeOrderBulletinBoardInfo; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.*; import com.cdzy.operations.model.vo.*; import com.cdzy.operations.service.EbikeBikeOrderService; @@ -34,7 +31,11 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.*; +import java.util.concurrent.TimeUnit; import static com.cdzy.operations.model.entity.table.EbikeBatteryInfoTableDef.EBIKE_BATTERY_INFO; import static com.cdzy.operations.model.entity.table.EbikeBikeInfoTableDef.EBIKE_BIKE_INFO; @@ -200,6 +201,7 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl list = ebikeOrderFileMapper.selectListByQueryAs(queryWrapper,String.class); + .where(EBIKE_ORDER_FILE.ORDER_ID.eq(bikeOrder.getOrderId())); + List list = ebikeOrderFileMapper.selectListByQueryAs(queryWrapper, String.class); queryWrapper.clear(); queryWrapper.select(EBIKE_ORDER_PART.ORDER_PART) - .where(EBIKE_ORDER_PART.ORDER_ID.eq( bikeOrder.getOrderId())); + .where(EBIKE_ORDER_PART.ORDER_ID.eq(bikeOrder.getOrderId())); List parts = ebikeOrderPartMapper.selectListByQueryAs(queryWrapper, Integer.class); EbikeBikeOrder ebikeBikeOrder = EbikeBikeOrder.builder() @@ -753,6 +757,27 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl effectiveDispatchOrder(EffectiveDispatchOrderVo effectiveDispatchOrderVo) { + + if (effectiveDispatchOrderVo.getStartTime() == null) { + effectiveDispatchOrderVo.setStartTime(LocalDateTime.now().toLocalDate().withDayOfMonth(1).atStartOfDay()); + } + + if (effectiveDispatchOrderVo.getEndTime() == null) { + effectiveDispatchOrderVo.setEndTime(LocalDateTime.now().toLocalDate().withDayOfMonth(LocalDate.now().lengthOfMonth()).atTime(LocalTime.MAX)); + } + + QueryWrapper queryWrapper = QueryWrapper.create() + .select(QueryMethods.count().as(EffectiveDispatchOrderDto::getCount),EBIKE_BIKE_ORDER.RECEIVER_ID.as(EffectiveDispatchOrderDto::getStaffId)) + .where(EBIKE_BIKE_ORDER.HANDLE_AT.between(effectiveDispatchOrderVo.getStartTime(), effectiveDispatchOrderVo.getEndTime())) + .where(EBIKE_BIKE_ORDER.ORDER_TYPE.eq(BikeOrderType.DISPATCH)) + .where(EBIKE_BIKE_ORDER.DISPATCH_STATE.eq(OrderDispatchState.EFFECTIVE)) + .groupBy(EBIKE_BIKE_ORDER.RECEIVER_ID) + .orderBy("count",true); + return ebikeBikeOrderMapper.selectListByQueryAs(queryWrapper, EffectiveDispatchOrderDto.class); + } + EbikeBikeInfo checkBikeCode(String bikeCode) { QueryWrapper queryWrapper = QueryWrapper.create() .where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode)) diff --git a/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java b/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java index 620f26f..ca54117 100644 --- a/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java +++ b/ebike-operations/src/test/java/com/cdzy/operations/EbikeOperationsApplicationTests.java @@ -1,14 +1,20 @@ package com.cdzy.operations; +import com.cdzy.operations.utils.RedisUtil; +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class EbikeOperationsApplicationTests { + @Resource + RedisUtil redisUtil; + @Test void contextLoads() { + redisUtil.releaseDispatchLock("bike:dispatch:lock:360967408603103232"); }