xuhy
2026-04-23 b6eacbb6fc7658cabb51533692a9b9f5cb1e316b
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);
    }
}