package com.xiaopeng.maintenance.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.model.maintenance.XpCruiseCheckInRuleLocation;
|
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.model.vo.AppXpCruiseCheckInLocationVo;
|
import com.xiaopeng.maintenance.service.IXpCheckLocationService;
|
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRecordService;
|
import com.xiaopeng.maintenance.service.IXpCruiseCheckInRuleLocationService;
|
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.*;
|
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()));
|
|
for (XpCruiseCheckInRecordVO xpCruiseCheckInRecordVO : list) {
|
|
XpOperationsUser user = userMap.get(xpCruiseCheckInRecordVO.getOperationsUserId());
|
if (user == null) continue;
|
xpCruiseCheckInRecordVO.setOperationsUserId(user.getId());
|
xpCruiseCheckInRecordVO.setOperationsUserName(user.getNickName());
|
xpCruiseCheckInRecordVO.setPhoneNumber(user.getPhoneNumber());
|
|
}
|
|
list.removeIf(vo -> {
|
if (StringUtils.isNotBlank(query.getOperationsUserName()) && !vo.getOperationsUserName().contains(query.getOperationsUserName())) {
|
return true;
|
}
|
return StringUtils.isNotBlank(query.getPhoneNumber()) && !vo.getPhoneNumber().contains(query.getPhoneNumber());
|
});
|
|
pageInfo.setRecords(list);
|
|
return pageInfo;
|
}
|
|
@Resource
|
IXpCruiseCheckInRuleLocationService xpCruiseCheckInRuleLocationService;
|
|
@Override
|
public XpCruiseCheckInRecordVO detail(Long id) {
|
|
XpCruiseCheckInRecordVO vo = xpCruiseCheckInRecordMapper.detail(id);
|
List<XpCruiseCheckInRuleLocation> list = xpCruiseCheckInRuleLocationService.list(new LambdaQueryWrapper<XpCruiseCheckInRuleLocation>()
|
.eq(XpCruiseCheckInRuleLocation::getCruiseCheckInRuleId,vo.getRuleId()).orderByAsc(XpCruiseCheckInRuleLocation::getSort));
|
vo.setPointCount(list.size());
|
List<Long> ids = Collections.singletonList(vo.getOperationsUserId());
|
XpOperationsUser user = xpOperationsUserClient.listByIds(ids).getData().get(0);
|
if (user != null) {
|
XpOperationsUserProfileVO profile = xpOperationsUserClient.getProfile(user.getId()).getData();
|
vo.setOperationsUserId(user.getId());
|
vo.setOperationsUserName(user.getNickName());
|
vo.setPhoneNumber(user.getPhoneNumber());
|
if (profile.getFleet() != null) {
|
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(vos.size() + 1);
|
for (int i = 7 - vos.size(); i > 0; i--) {
|
XpCruiseCheckInStatisticsVO v = new XpCruiseCheckInStatisticsVO();
|
v.setDate(startDate.toString());
|
startDate = startDate.minusDays(1);
|
vos.add(0, v);
|
}
|
}
|
return vos;
|
|
}
|
|
@Override
|
public List<XpCruiseCheckInRecordVO> all(XpCruiseCheckInRecordQuery query) {
|
|
List<XpCruiseCheckInRecordVO> list = xpCruiseCheckInRecordMapper.exportList(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()));
|
|
for (XpCruiseCheckInRecordVO xpCruiseCheckInRecordVO : list) {
|
|
XpOperationsUser user = userMap.get(xpCruiseCheckInRecordVO.getOperationsUserId());
|
if (user == null) continue;
|
xpCruiseCheckInRecordVO.setOperationsUserId(user.getId());
|
xpCruiseCheckInRecordVO.setOperationsUserName(user.getNickName());
|
xpCruiseCheckInRecordVO.setPhoneNumber(user.getPhoneNumber());
|
|
}
|
|
list.removeIf(vo -> {
|
if (StringUtils.isNotBlank(query.getOperationsUserName()) && !vo.getOperationsUserName().contains(query.getOperationsUserName())) {
|
return true;
|
}
|
return StringUtils.isNotBlank(query.getPhoneNumber()) && !vo.getPhoneNumber().contains(query.getPhoneNumber());
|
});
|
|
return list;
|
}
|
|
|
}
|