From 1dec90e138d6216d1e46228cfaf1f2c3320bbf24 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 23 四月 2026 19:47:16 +0800
Subject: [PATCH] 新增加巡游打卡规则功能

---
 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java |   77 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 73 insertions(+), 4 deletions(-)

diff --git a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
index 4821fda..59e347e 100644
--- a/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
+++ b/xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -1,17 +1,24 @@
 package com.xiaopeng.maintenance.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.xiaopeng.api.model.maintenance.XpCheckLocation;
-import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRecord;
-import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRule;
-import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRuleLocation;
+import com.xiaopeng.api.feignClient.account.XpOperationUserClient;
+import com.xiaopeng.api.feignClient.account.XpOperationsUserClient;
+import com.xiaopeng.api.model.account.XpOperationsUser;
+import com.xiaopeng.api.model.maintenance.*;
 import com.xiaopeng.common.core.exception.ServiceException;
 import com.xiaopeng.common.core.utils.GeodesyUtil;
+import com.xiaopeng.common.core.utils.StringUtils;
 import com.xiaopeng.common.redis.service.RedisService;
 import com.xiaopeng.maintenance.constant.I18nKeyConstant;
+import com.xiaopeng.maintenance.dto.XpCruiseCheckInRuleDto;
+import com.xiaopeng.maintenance.dto.XpCruiseCheckInRuleListPageDto;
 import com.xiaopeng.maintenance.mapper.XpCruiseCheckInRuleMapper;
+import com.xiaopeng.maintenance.mapper.XpCruiseCheckInRuleOperationsUserMapper;
 import com.xiaopeng.maintenance.model.vo.AppXpCruiseCheckInLocationVo;
 import com.xiaopeng.maintenance.model.vo.AppXpCruiseCheckInRuleVo;
 import com.xiaopeng.maintenance.model.vo.CheckInMessageVo;
@@ -20,6 +27,8 @@
 import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
 import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleLocationService;
 import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleService;
+import com.xiaopeng.maintenance.vo.XpCruiseCheckInRuleListPage;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -49,6 +58,12 @@
     private IXpCheckLocationService xpCheckLocationService;
     @Autowired
     private RedisService redisService;
+
+    @Resource
+    private XpOperationUserClient xpOperationsUserClient;
+
+    @Resource
+    private XpCruiseCheckInRuleOperationsUserMapper xpCruiseCheckInRuleOperationsUserMapper;
 
 
     @Override
@@ -245,4 +260,58 @@
                 .eq(XpCruiseCheckInRecord::getOperationsUserId, uid)
                 .last(" and DATE(check_in_time) = DATE(NOW())"));
     }
+
+
+    /**
+     * 获取巡游打卡规则列表
+     * @param pageInfo
+     * @param dto
+     * @return
+     */
+    @Override
+    public List<XpCruiseCheckInRuleListPage> getXpCruiseCheckInRuleListPage(Page<XpCruiseCheckInRuleListPage> pageInfo, XpCruiseCheckInRuleListPageDto dto) {
+        List<Long> ids = new ArrayList<>();
+        if(StringUtils.isNotEmpty(dto.getUserName())){
+            List<XpOperationsUser> data = xpOperationsUserClient.listByName(dto.getUserName()).getData();
+            ids.addAll(data.stream().map(XpOperationsUser::getId).collect(Collectors.toList()));
+        }
+        if(StringUtils.isNotEmpty(dto.getPhoneNumber())){
+            List<XpOperationsUser> data = xpOperationsUserClient.getByPhoneNumber(dto.getPhoneNumber()).getData();
+            ids.addAll(data.stream().map(XpOperationsUser::getId).collect(Collectors.toList()));
+        }
+        if(!list().isEmpty()){
+            List<XpCruiseCheckInRuleOperationsUser> operationsUserId = xpCruiseCheckInRuleOperationsUserMapper.selectList(new QueryWrapper<XpCruiseCheckInRuleOperationsUser>().in("operations_user_id", ids));
+            List<Integer> ruleIds = operationsUserId.stream().map(XpCruiseCheckInRuleOperationsUser::getCruiseCheckInRuleId).collect(Collectors.toList());
+            dto.setIds(ruleIds);
+        }
+        List<XpCruiseCheckInRuleListPage> xpCruiseCheckInRuleListPage = this.baseMapper.getXpCruiseCheckInRuleListPage(pageInfo, dto);
+        return xpCruiseCheckInRuleListPage;
+    }
+
+
+    /**
+     * 新增巡游打卡规则
+     * @param dto
+     */
+    @Override
+    public void addXpCruiseCheckInRule(XpCruiseCheckInRuleDto dto) {
+        XpCruiseCheckInRule one = this.getOne(new QueryWrapper<XpCruiseCheckInRule>().like("name", dto.getName()).eq("is_deleted", 0));
+        if(null != one){
+            throw new ServiceException("巡游打卡规则名称已存在");
+        }
+        XpCruiseCheckInRule xpCruiseCheckInRule = new XpCruiseCheckInRule();
+        BeanUtils.copyProperties(dto, xpCruiseCheckInRule);
+        xpCruiseCheckInRule.setDeleted(false);
+        this.save(xpCruiseCheckInRule);
+        dto.getPoints().forEach(s->{
+            s.setCruiseCheckInRuleId(xpCruiseCheckInRule.getId());
+        });
+        xpCruiseCheckInRuleLocationService.saveBatch(dto.getPoints());
+        Long relationId = dto.getRelationId();
+
+        XpCruiseCheckInRuleOperationsUser xpCruiseCheckInRuleOperationsUser = new XpCruiseCheckInRuleOperationsUser();
+        xpCruiseCheckInRuleOperationsUser.setCruiseCheckInRuleId(xpCruiseCheckInRule.getId());
+        xpCruiseCheckInRuleOperationsUser.setOperationsUserId(relationId);
+        xpCruiseCheckInRuleOperationsUserMapper.insert(xpCruiseCheckInRuleOperationsUser);
+    }
 }

--
Gitblit v1.7.1