xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/maintenance/XpWorkOrderClientFallbackFactory.java
New file @@ -0,0 +1,26 @@ package com.xiaopeng.api.factory.maintenance; import com.xiaopeng.api.feignClient.maintenance.XpTaskClient; import com.xiaopeng.api.feignClient.maintenance.XpWorkOrderClient; import com.xiaopeng.api.model.maintenance.XpTask; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; @Slf4j @Component public class XpWorkOrderClientFallbackFactory implements FallbackFactory<XpWorkOrderClient> { @Override public XpWorkOrderClient create(Throwable cause) { return new XpWorkOrderClient() { @Override public R<Boolean> include(Long id) { log.error("XpWorkOrderClientFallbackFactory.include error:{}", cause.getMessage()); return null; } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/maintenance/XpWorkOrderClient.java
New file @@ -0,0 +1,26 @@ package com.xiaopeng.api.feignClient.maintenance; import com.xiaopeng.api.factory.maintenance.XpClockInClientFallbackFactory; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; /** * 打卡服务 Feign 客户端 * * @author mitao * @date 2026-02-14 */ @FeignClient( contextId = "XpClockInClient", value = ServiceNameConstantsEnum.XP_MAINTENANCE_SERVICE, fallbackFactory = XpClockInClientFallbackFactory.class ) public interface XpWorkOrderClient { @GetMapping("/api/v1/workOrder/include") R<Boolean> include(@RequestParam Long id); } xp-robotaxi-api/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -41,4 +41,5 @@ com.xiaopeng.api.factory.maintenance.XpTaskHandleDetailRoutineClientFallbackFactory com.xiaopeng.api.factory.maintenance.XpTaskClientFallbackFactory com.xiaopeng.api.factory.maintenance.XpTaskRuleClientFallbackFactory com.xiaopeng.api.factory.maintenance.XpWorkOrderClientFallbackFactory com.xiaopeng.api.factory.pushMessage.XpAliPushMessageClientFallbackFactory xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpWorkOrderController.java
@@ -1,6 +1,7 @@ package com.xiaopeng.maintenance.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.model.maintenance.XpWorkOrder; import com.xiaopeng.api.model.maintenance.XpWorkOrderLog; import com.xiaopeng.common.core.domain.R; @@ -74,4 +75,19 @@ XpWorkOrder detail =workOrderService.workOrderDetail(id); return R.ok(detail); } /** * 判断工单是否包含这个类型的id * @param id * @return */ @GetMapping("/include") public R<Boolean> include(@RequestParam Long id){ long count = workOrderService.count(new LambdaQueryWrapper<XpWorkOrder>().eq(XpWorkOrder::getFeedbackTypeId, id)); if(count>0){ return R.ok(true); } return R.ok(false); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/constant/I18nKeyConstant.java
@@ -100,4 +100,6 @@ // 邀请码数量上限 String INVITATION_LIMIT_EXCEEDED = "invitation.limit.exceeded"; // 包含这个反馈类型 String INCLUDE = "include"; } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpFeedbackTypeManagementController.java
@@ -1,8 +1,11 @@ package com.xiaopeng.operation.controller; import com.xiaopeng.api.feignClient.maintenance.XpWorkOrderClient; import com.xiaopeng.api.model.operation.XpFeedbackType; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.operation.constant.I18nKeyConstant; import com.xiaopeng.operation.service.IXpFeedbackTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -28,9 +31,14 @@ private final IXpFeedbackTypeService xpFeedbackTypeService; private final XpWorkOrderClient xpWorkOrderClient; public XpFeedbackTypeManagementController(IXpFeedbackTypeService xpFeedbackTypeService) { public XpFeedbackTypeManagementController(IXpFeedbackTypeService xpFeedbackTypeService, XpWorkOrderClient xpWorkOrderClient) { this.xpFeedbackTypeService = xpFeedbackTypeService; this.xpWorkOrderClient = xpWorkOrderClient; } @GetMapping("/getList") @ApiOperation(value = "获取意见反馈类型列表") @@ -51,6 +59,11 @@ @ApiOperation(value = "删除意见反馈类型") @DeleteMapping(value = "/deleteFeedbackType") public R<Boolean> deleteFeedbackType(Long id) { // 判断工单是否包含这个类型 R<Boolean> include = xpWorkOrderClient.include(id); if(include==null || include.getData()){ throw new ServiceException("该类型被工单引用,无法删除",I18nKeyConstant.INCLUDE); } return R.ok(xpFeedbackTypeService.removeById(id)); } } xp-robotaxi-operation-boot/src/main/resources/i18n/messages.properties
@@ -43,3 +43,4 @@ invitation.import.code.contains.chinese=第{0}行邀请码包含中文:{1} invitation.import.code.duplicate=导入文件中邀请码重复:{0} invitation.import.code.exists=以下邀请码已存在:{0} include=该类型被工单引用,无法删除 xp-robotaxi-operation-boot/src/main/resources/i18n/messages_zh_CN.properties
@@ -36,4 +36,5 @@ invitation.import.code.contains.chinese=第{0}行邀请码包含中文:{1} invitation.import.code.duplicate=导入文件中邀请码重复:{0} invitation.import.code.exists=以下邀请码已存在:{0} include=该类型被工单引用,无法删除 invitation.limit.exceeded=系统最多只能有{0}个邀请码,当前已有{1}个,本次新增{2}个,无法生成