puzhibing
2026-04-23 605159b6864baa969f897467a08bd2f1b54f6d87
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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<XpPointSituationReportMapper, XpPointSituationReport> implements IXpPointSituationReportService {
 
 
 
    @Autowired
    private XpOperationUserClient xpOperationUserClient;
    @Resource
    private XpFleetOperationsClient xpFleetOperationsClient;
 
    @Override
    public PageInfo<XpPointSituationReportVo> pageList(XpPointSituationReportQuery query) {
        //根据 上报运维人名称 查询数据
        if(StrUtil.isNotBlank(query.getOperationsUserName())){
            R<List<XpOperationsUser>> listR = xpOperationUserClient.listByName(query.getOperationsUserName());
            if(CollUtil.isNotEmpty(listR.getData())){
                List<Long> operationsUserIds = listR.getData().stream()
                        .map(XpOperationsUser::getId)
                        .collect(Collectors.toList());
                query.setOperationsUserIds(operationsUserIds);
            }else{
                query.setOperationsUserIds(ListUtil.toList(0L));
            }
        }
        // 创建分页对象
        PageInfo<XpPointSituationReportVo> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
        // 调用Mapper查询
        List<XpPointSituationReportVo> list = this.baseMapper.pageList(pageInfo, query);
        extracted(list);
        // 设置结果
        pageInfo.setRecords(list);
        return pageInfo;
    }
 
    private void extracted(List<XpPointSituationReportVo> list) {
        if(!list.isEmpty()){
            // 收集所有运维人员ID
            Set<Long> operationsUserIds = list.stream()
                    .map(XpPointSituationReportVo::getOperationsUserId)
                    .filter(Objects::nonNull)
                    .collect(Collectors.toSet());
            // 批量查询操作人信息
            Map<Long, String> userNameMap = new HashMap<>();
            if (!CollectionUtils.isEmpty(operationsUserIds)) {
                R<List<XpOperationsUser>> userResult = xpOperationUserClient.listByIds(operationsUserIds);
                List<XpOperationsUser> 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<XpPointSituationReportVo> list = this.baseMapper.pageList(query);
        if(list.isEmpty()){
            throw new ServiceException("未查询该数据");
        }
        XpPointSituationReportVo bean = list.get(0);
 
        // 批量查询操作人信息
        XpOperationsUserQueryDTO queryOu = new XpOperationsUserQueryDTO();
        queryOu.setIds(new ArrayList<Long>(){{
            add(bean.getOperationsUserId());
        }} );
        R<List<XpOperationsUserWithRoleVO>> userResult = xpOperationUserClient.findList(queryOu);
        List<XpOperationsUserWithRoleVO> users = userResult.getData();
        if (CollectionUtils.isEmpty(users)) {
            throw new ServiceException("未查询该运维人员");
        }
        Map<Long, XpOperationsUserWithRoleVO> 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<List<XpFleet>> 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<XpPointSituationReportVo> exportList(XpPointSituationReportQuery query) {
        List<XpPointSituationReportVo> 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());
    }
 
}