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 implements IXpCruiseCheckInRecordService { @Resource private XpCruiseCheckInRecordMapper xpCruiseCheckInRecordMapper; @Resource private XpOperationsUserClient xpOperationsUserClient; @Override public PageInfo pageList(XpCruiseCheckInRecordQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(pageInfo, query); List ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList()); List xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map 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; } @Resource IXpCruiseCheckInRuleLocationService xpCruiseCheckInRuleLocationService; @Override public XpCruiseCheckInRecordVO detail(Long id) { XpCruiseCheckInRecordVO vo = xpCruiseCheckInRecordMapper.detail(id); List list = xpCruiseCheckInRuleLocationService.list(new LambdaQueryWrapper() .eq(XpCruiseCheckInRuleLocation::getCruiseCheckInRuleId,vo.getRuleId()).orderByAsc(XpCruiseCheckInRuleLocation::getSort)); vo.setPointCount(list.size()); List 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()); vo.setFleetName(profile.getFleet().getFleetName()); vo.setRole(profile.getRoles().stream().map(XpOperationsUserProfileVO.RoleInfoVO::getRoleName).collect(Collectors.joining(","))); } return vo; } @Override public List statistics(XpCruiseCheckInStatisticsQuery query) { List 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 all(XpCruiseCheckInRecordQuery query) { List list = xpCruiseCheckInRecordMapper.selectCruiseCheckInRecordList(query); List ids = list.stream().map(XpCruiseCheckInRecordVO::getOperationsUserId).collect(Collectors.toList()); List xpOperationsUsers = xpOperationsUserClient.listByIds(ids).getData(); Map 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; } }