package com.xiaopeng.maintenance.service.impl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.xiaopeng.api.feignClient.account.XpOperationsUserClient;
|
import com.xiaopeng.api.model.account.XpOperationsUser;
|
import com.xiaopeng.api.model.maintenance.XpCheckLocation;
|
import com.xiaopeng.api.model.maintenance.XpCruiseCheckInRecord;
|
import com.xiaopeng.api.vo.account.XpOperationsUserProfileVO;
|
import com.xiaopeng.common.core.web.page.PageInfo;
|
import com.xiaopeng.maintenance.mapper.XpCruiseCheckInRecordMapper;
|
import com.xiaopeng.maintenance.service.IXpCheckLocationService;
|
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
|
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordQuery;
|
import com.xiaopeng.maintenance.vo.XpCruiseCheckInRecordVO;
|
import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsQuery;
|
import com.xiaopeng.maintenance.vo.XpCruiseCheckInStatisticsVO;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDate;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class XpCruiseCheckInRecordServiceImpl extends ServiceImpl<XpCruiseCheckInRecordMapper, XpCruiseCheckInRecord> implements IXpCruiseCheckInRecordService {
|
|
@Resource
|
private XpCruiseCheckInRecordMapper xpCruiseCheckInRecordMapper;
|
|
@Resource
|
private XpOperationsUserClient xpOperationsUserClient;
|
@Override
|
public PageInfo<XpCruiseCheckInRecordVO> pageList(XpCruiseCheckInRecordQuery query) {
|
|
PageInfo<XpCruiseCheckInRecordVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
|
List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(pageInfo, query);
|
|
List<Long> ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList());
|
List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData();
|
Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity()));
|
list = list.stream().map(record -> {
|
XpOperationsUser user = userMap.get(record.getOperationsUserId());
|
if (user == null) return null;
|
record.setOperationsUserId(user.getId());
|
record.setOperationsUserName(user.getNickName());
|
record.setPhoneNumber(user.getPhoneNumber());
|
if (StringUtils.isNotBlank(query.getOperationsUserName()) && !record.getOperationsUserName().contains(query.getOperationsUserName())) {
|
return null;
|
}
|
if (StringUtils.isNotBlank(query.getPhoneNumber()) && !record.getPhoneNumber().contains(query.getPhoneNumber())) {
|
return null;
|
}
|
return record;
|
})
|
.filter(Objects::nonNull)
|
.collect(Collectors.toList());
|
pageInfo.setRecords(list);
|
|
return pageInfo;
|
}
|
|
IXpCheckLocationService checkLocationService;
|
|
@Override
|
public XpCruiseCheckInRecordVO detail(Long id) {
|
XpCruiseCheckInRecordVO vo = xpCruiseCheckInRecordMapper.detail(id);
|
|
// Xp
|
|
XpCheckLocation location = checkLocationService.getById(vo.getCheckLocationId());
|
vo.setLocationRange(location.getLocationRange());
|
vo.setDetailAddr(location.getLocationAddress());
|
List<Long> ids = Collections.singletonList(vo.getOperationsUserId());
|
List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData();
|
Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity()));
|
XpOperationsUser user = userMap.get(vo.getOperationsUserId());
|
if (user != null) {
|
XpOperationsUserProfileVO profile = xpOperationsUserClient.getProfile(user.getId()).getData();
|
vo.setOperationsUserId(user.getId());
|
vo.setOperationsUserName(user.getNickName());
|
vo.setPhoneNumber(user.getPhoneNumber());
|
vo.setFleetName(profile.getFleet().getFleetName());
|
vo.setRole(profile.getRoles().stream().map(XpOperationsUserProfileVO.RoleInfoVO::getRoleName).collect(Collectors.joining(",")));
|
}
|
|
return vo;
|
}
|
|
@Override
|
public List<XpCruiseCheckInStatisticsVO> statistics(XpCruiseCheckInStatisticsQuery query) {
|
List<XpCruiseCheckInStatisticsVO> vos = xpCruiseCheckInRecordMapper.selectCruiseCheckInStatistics(query);
|
if (CollectionUtils.isEmpty(vos) || vos.size() < 7) {
|
String date = vos.get(vos.size() - 1).getDate();
|
LocalDate endDate = LocalDate.parse(date);
|
LocalDate startDate = endDate.minusDays(6);
|
for (int i = 7 - vos.size(); i > 0; i--) {
|
XpCruiseCheckInStatisticsVO v = new XpCruiseCheckInStatisticsVO();
|
v.setDate(startDate.toString());
|
startDate = startDate.plusDays(1);
|
vos.add(0, v);
|
}
|
}
|
return vos;
|
|
}
|
|
@Override
|
public List<XpCruiseCheckInRecordVO> all(XpCruiseCheckInRecordQuery query) {
|
|
List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(query);
|
|
List<Long> ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList());
|
List<XpOperationsUser> xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData();
|
Map<Long, XpOperationsUser> userMap = xpOperationsUsers.stream().collect(Collectors.toMap(XpOperationsUser::getId, Function.identity()));
|
list = list.stream().map(record -> {
|
XpOperationsUser user = userMap.get(record.getOperationsUserId());
|
if (user == null) return null;
|
record.setOperationsUserId(user.getId());
|
record.setOperationsUserName(user.getNickName());
|
record.setPhoneNumber(user.getPhoneNumber());
|
if (StringUtils.isNotBlank(query.getOperationsUserName()) && !record.getOperationsUserName().contains(query.getOperationsUserName())) {
|
return null;
|
}
|
if (StringUtils.isNotBlank(query.getPhoneNumber()) && !record.getPhoneNumber().contains(query.getPhoneNumber())) {
|
return null;
|
}
|
return record;
|
})
|
.filter(Objects::nonNull)
|
.collect(Collectors.toList());
|
|
return list;
|
}
|
|
|
}
|