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())); 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 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()); 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 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(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 all(XpCruiseCheckInRecordQuery query) { List list = xpCruiseCheckInRecordMapper.exportList(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())); 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; } }