package com.xiaopeng.operation.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.dto.account.XpOperationsUserQueryDTO; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.operation.XpPointSituationReport; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.api.query.operation.XpPointSituationReportQuery; import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO; import com.xiaopeng.api.vo.operation.XpPointSituationReportVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.mapper.XpPointSituationReportMapper; import com.xiaopeng.operation.service.IXpPointSituationReportService; import net.bytebuddy.implementation.bytecode.Throw; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @Service public class XpPointSituationReportServiceImpl extends ServiceImpl implements IXpPointSituationReportService { @Autowired private XpOperationUserClient xpOperationUserClient; @Resource private XpFleetOperationsClient xpFleetOperationsClient; @Override public PageInfo pageList(XpPointSituationReportQuery query) { //根据 上报运维人名称 查询数据 if(StrUtil.isNotBlank(query.getOperationsUserName())){ R> listR = xpOperationUserClient.listByName(query.getOperationsUserName()); if(CollUtil.isNotEmpty(listR.getData())){ List operationsUserIds = listR.getData().stream() .map(XpOperationsUser::getId) .collect(Collectors.toList()); query.setOperationsUserIds(operationsUserIds); }else{ query.setOperationsUserIds(ListUtil.toList(0L)); } } // 创建分页对象 PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); // 调用Mapper查询 List list = this.baseMapper.pageList(pageInfo, query); extracted(list); // 设置结果 pageInfo.setRecords(list); return pageInfo; } private void extracted(List list) { if(!list.isEmpty()){ // 收集所有运维人员ID Set operationsUserIds = list.stream() .map(XpPointSituationReportVo::getOperationsUserId) .filter(Objects::nonNull) .collect(Collectors.toSet()); // 批量查询操作人信息 Map userNameMap = new HashMap<>(); if (!CollectionUtils.isEmpty(operationsUserIds)) { R> userResult = xpOperationUserClient.listByIds(operationsUserIds); List users = userResult.getData(); if (!CollectionUtils.isEmpty(users)) { userNameMap = users.stream() .collect(Collectors.toMap(XpOperationsUser::getId, XpOperationsUser::getNickName)); } } for (XpPointSituationReportVo bean : list) { if (userNameMap.containsKey(bean.getOperationsUserId())){ bean.setOperationsUserName(userNameMap.get(bean.getOperationsUserId())); } if(bean.getOperationStatus() != null){//运营状态 1=待启用 2=启用中 3=已停用 4=已失效 if(bean.getOperationStatus() == 1){ bean.setPointStatusName("待启用"); }else if(bean.getOperationStatus() == 2){ bean.setPointStatusName("启用中"); }else if(bean.getOperationStatus() == 3){ bean.setPointStatusName("已停用"); }else if(bean.getOperationStatus() == 4){ bean.setPointStatusName("已失效"); } } } } } @Override public XpPointSituationReportVo getdetail(Long id) { XpPointSituationReportQuery query = new XpPointSituationReportQuery(); query.setId(id); List list = this.baseMapper.pageList(query); if(list.isEmpty()){ throw new ServiceException("未查询该数据"); } XpPointSituationReportVo bean = list.get(0); // 批量查询操作人信息 XpOperationsUserQueryDTO queryOu = new XpOperationsUserQueryDTO(); queryOu.setIds(new ArrayList(){{ add(bean.getOperationsUserId()); }} ); R> userResult = xpOperationUserClient.findList(queryOu); List users = userResult.getData(); if (CollectionUtils.isEmpty(users)) { throw new ServiceException("未查询该运维人员"); } Map userNameMap = users.stream() .collect(Collectors.toMap(XpOperationsUser::getId, Function.identity())); bean.setOperationsUserName(userNameMap.get(bean.getOperationsUserId()).getNickName()); bean.setOperationsUserRoleName(userNameMap.get(bean.getOperationsUserId()).getRoleName()); R> fleetByUserId = xpFleetOperationsClient.getFleetByUserId(bean.getOperationsUserId()); if(fleetByUserId.getCode() != R.SUCCESS || fleetByUserId.getData().isEmpty()){ throw new ServiceException("未查询该车队"); } bean.setOperationsUserFleetName(fleetByUserId.getData().get(0).getFleetName()); return bean; } @Override public List exportList(XpPointSituationReportQuery query) { List list = this.baseMapper.pageList(query); extracted(list); return list; } @Override public boolean deleteById(Long id) { // 1. 检查记录是否存在 XpPointSituationReport bean = this.getById(id); if (bean == null) { throw new ServiceException("点位现场情况上报信息不存在"); } // 2. 逻辑删除(MyBatis-Plus自动处理) return super.removeById( bean.getId()); } }