Commit 111e7ddd by wangli

修改

1 parent 8369dfe3
...@@ -3,9 +3,11 @@ package com.dituhui.pea.order.service.impl; ...@@ -3,9 +3,11 @@ package com.dituhui.pea.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dituhui.pea.common.BusinessException; import com.dituhui.pea.common.BusinessException;
import com.dituhui.pea.common.Result; import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.common.ListUtils;
import com.dituhui.pea.order.common.TimeUtils; import com.dituhui.pea.order.common.TimeUtils;
import com.dituhui.pea.order.dao.*; import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.*; import com.dituhui.pea.order.dto.*;
...@@ -68,14 +70,17 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -68,14 +70,17 @@ public class ScheduleServiceImpl implements ScheduleService {
} }
@Override @Override
public Result<?> getScheduleOverview(long page, long size, String date, String levelType, List<String> levelIds) { public Result<?> getScheduleOverview(long page, long size, LocalDate date, String levelType, List<String> levelIds) {
// 获取team列表 // 获取team列表, 以team排序分页
IPage<OrgTeam> pg = this.queryOrgTeams(page, size, levelType, levelIds); IPage<OrgTeam> pg = this.queryOrgTeams(page, size, levelType, levelIds);
List<OrgTeam> orgTeams = pg.getRecords(); List<OrgTeam> orgTeams = pg.getRecords();
List<ScheduleOverviewResp.Team> teams = new ArrayList<>(); List<ScheduleOverviewResp.Team> teams = new ArrayList<>();
// 获取skill与skill_category的映射
HashMap<String, String> skillMapping = this.getSkillMapping();
// 获取工单列表 // 获取工单列表
for (OrgTeam t : orgTeams) { for (OrgTeam t : orgTeams) {
ScheduleOverviewResp.Team team = new ScheduleOverviewResp.Team(); ScheduleOverviewResp.Team team = new ScheduleOverviewResp.Team();
...@@ -85,11 +90,11 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -85,11 +90,11 @@ public class ScheduleServiceImpl implements ScheduleService {
// 获取改team订单列表 // 获取改team订单列表
List<OrderRequest> orders = this.queryOrderRequests(t.getTeamId(), date); List<OrderRequest> orders = this.queryOrderRequests(t.getTeamId(), date);
team.setOrder(this.getTeamOrderSum(orders)); team.setOrder(this.getTeamOrderSum(orders, skillMapping));
// 技术员指派单列表 // 技术员指派单列表
Map<String, List<OrderAppointment>> engineerOrders = new HashMap<>(); Map<String, List<OrderAppointment>> engineerOrders = new HashMap<>();
if (orders != null && !orders.isEmpty()) { if (ListUtils.isNotEmpty(orders)) {
List<String> orderRequestIds = orders.stream().map(OrderRequest::getOrderId).collect(Collectors.toList()); List<String> orderRequestIds = orders.stream().map(OrderRequest::getOrderId).collect(Collectors.toList());
List<OrderAppointment> orderAppointments = this.queryOrderAppointments(orderRequestIds, date); List<OrderAppointment> orderAppointments = this.queryOrderAppointments(orderRequestIds, date);
engineerOrders = orderAppointments.stream().collect(Collectors.groupingBy(OrderAppointment::getEngineerCode)); engineerOrders = orderAppointments.stream().collect(Collectors.groupingBy(OrderAppointment::getEngineerCode));
...@@ -97,9 +102,8 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -97,9 +102,8 @@ public class ScheduleServiceImpl implements ScheduleService {
// 获取team技术员列表 // 获取team技术员列表
List<OrgTeamEngineer> teamEngineers = this.queryOrgTeamEngineers(t.getTeamId()); List<OrgTeamEngineer> teamEngineers = this.queryOrgTeamEngineers(t.getTeamId());
List<String> engineerCodes = teamEngineers.stream().map(OrgTeamEngineer::getEngineerCode).collect(Collectors.toList());
// 获取技术员列表 List<EngineerInfo> engineerInfoList = engineerInfoMPDao.selectByEngineerCodes(engineerCodes);
List<EngineerInfo> engineerInfoList = engineerInfoMPDao.selectByGroupId(t.getGroupId());
Map<String, List<EngineerInfo>> engineers = engineerInfoList.stream().collect(Collectors.groupingBy(EngineerInfo::getEngineerCode)); Map<String, List<EngineerInfo>> engineers = engineerInfoList.stream().collect(Collectors.groupingBy(EngineerInfo::getEngineerCode));
List<ScheduleOverviewResp.Item> children = new ArrayList<>(); List<ScheduleOverviewResp.Item> children = new ArrayList<>();
...@@ -107,6 +111,7 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -107,6 +111,7 @@ public class ScheduleServiceImpl implements ScheduleService {
ScheduleOverviewResp.Item child = new ScheduleOverviewResp.Item(); ScheduleOverviewResp.Item child = new ScheduleOverviewResp.Item();
//技术员信息
String engineerCode = entry.getKey(); String engineerCode = entry.getKey();
EngineerInfo engineerInfo = entry.getValue().get(0); EngineerInfo engineerInfo = entry.getValue().get(0);
...@@ -122,7 +127,7 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -122,7 +127,7 @@ public class ScheduleServiceImpl implements ScheduleService {
child.setName(engineerInfo.getName()); child.setName(engineerInfo.getName());
child.setValue(engineerCode); child.setValue(engineerCode);
child.setLevel("engineer"); child.setLevel("engineer");
child.setOrder(this.getTeamOrderSum(orders2)); child.setOrder(this.getTeamOrderSum(orders2, skillMapping));
child.setOrderDesc(Integer.toString(orders2.size())); child.setOrderDesc(Integer.toString(orders2.size()));
child.setDistanceDesc(""); child.setDistanceDesc("");
...@@ -147,14 +152,14 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -147,14 +152,14 @@ public class ScheduleServiceImpl implements ScheduleService {
} }
@Override @Override
public Result<?> getScheduleEngineerOverview(String date, String engineerCode) throws BusinessException { public Result<?> getScheduleEngineerOverview(LocalDate date, String engineerCode) throws BusinessException {
EngineerInfo engineer = engineerInfoMPDao.getByEngineerCode(engineerCode); EngineerInfo engineer = engineerInfoMPDao.getByEngineerCode(engineerCode);
if (engineer == null) { if (engineer == null) {
throw new BusinessException("分销员不存在"); throw new BusinessException("分销员不存在");
} }
List<LabelValueDTO> emptyTips = new ArrayList<>(); List<LabelValueDTO> emptyTips = new ArrayList<>();
List<OrderAppointment> orderAppointments = this.queryOrderAppointmentsByEngineerCode(engineerCode, date); List<OrderAppointment> orderAppointments = orderAppointmentMPDao.selectByEngineerCodeAndDt(engineerCode, date);
List<TimeLineDTO> timelines = new ArrayList<>(); List<TimeLineDTO> timelines = new ArrayList<>();
for (OrderAppointment o : orderAppointments) { for (OrderAppointment o : orderAppointments) {
TimeLineDTO item = new TimeLineDTO(); TimeLineDTO item = new TimeLineDTO();
...@@ -173,7 +178,7 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -173,7 +178,7 @@ public class ScheduleServiceImpl implements ScheduleService {
List<LabelValueDTO> dynamics = new ArrayList<>(); List<LabelValueDTO> dynamics = new ArrayList<>();
dynamics.add(new LabelValueDTO("姓名", engineer.getName())); dynamics.add(new LabelValueDTO("姓名", engineer.getName()));
dynamics.add(new LabelValueDTO("日期", date)); dynamics.add(new LabelValueDTO("日期", TimeUtils.IsoLocalDate2String(date)));
dynamics.add(new LabelValueDTO("状态", "上班")); dynamics.add(new LabelValueDTO("状态", "上班"));
dynamics.add(new LabelValueDTO("待服务", Integer.toString(countPending))); dynamics.add(new LabelValueDTO("待服务", Integer.toString(countPending)));
dynamics.add(new LabelValueDTO("服务中", Integer.toString(statusGroup.getOrDefault("STARTED", empty).size()))); dynamics.add(new LabelValueDTO("服务中", Integer.toString(statusGroup.getOrDefault("STARTED", empty).size())));
...@@ -250,46 +255,57 @@ public class ScheduleServiceImpl implements ScheduleService { ...@@ -250,46 +255,57 @@ public class ScheduleServiceImpl implements ScheduleService {
return orgTeamEngineerMPDao.selectList(lqw); return orgTeamEngineerMPDao.selectList(lqw);
} }
private List<OrderRequest> queryOrderRequests(String teamId, String date) { private List<OrderRequest> queryOrderRequests(String teamId, LocalDate date) {
LambdaQueryWrapper<OrderRequest> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrderRequest> lqw = new LambdaQueryWrapper<>();
lqw.eq(OrderRequest::getDt, date);
lqw.in(OrderRequest::getOrgTeamId, teamId); lqw.in(OrderRequest::getOrgTeamId, teamId);
lqw.eq(OrderRequest::getAppointmentStatus, "ASSIGNED"); lqw.eq(OrderRequest::getAppointmentStatus, "ASSIGNED");
lqw.ge(OrderRequest::getExpectTimeBegin, TimeUtils.IsoDateTime2Timestamp(String.format("%s 00:00:00", date)));
lqw.le(OrderRequest::getExpectTimeBegin, TimeUtils.IsoDateTime2Timestamp(String.format("%s 23:59:59", date)));
return orderRequestMPDao.selectList(lqw); return orderRequestMPDao.selectList(lqw);
} }
private List<OrderAppointment> queryOrderAppointments(List<String> orderIds, String date) { private List<OrderAppointment> queryOrderAppointments(List<String> orderIds, LocalDate date) {
LambdaQueryWrapper<OrderAppointment> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrderAppointment> lqw = new LambdaQueryWrapper<>();
lqw.in(OrderAppointment::getOrderId, orderIds); lqw.in(OrderAppointment::getOrderId, orderIds);
lqw.ge(OrderAppointment::getExpectStartTime, TimeUtils.IsoDateTime2Timestamp(String.format("%s 00:00:00", date))); lqw.eq(OrderAppointment::getDt, date);
lqw.le(OrderAppointment::getExpectEndTime, TimeUtils.IsoDateTime2Timestamp(String.format("%s 23:59:59", date))); lqw.orderByAsc(OrderAppointment::getEngineerCode);
return orderAppointmentMPDao.selectList(lqw);
}
private List<OrderAppointment> queryOrderAppointmentsByEngineerCode(String engineerCode, String date) {
LambdaQueryWrapper<OrderAppointment> lqw = new LambdaQueryWrapper<>();
lqw.in(OrderAppointment::getEngineerCode, engineerCode);
lqw.ge(OrderAppointment::getExpectStartTime, TimeUtils.IsoDateTime2Timestamp(String.format("%s 00:00:00", date)));
lqw.le(OrderAppointment::getExpectEndTime, TimeUtils.IsoDateTime2Timestamp(String.format("%s 23:59:59", date)));
return orderAppointmentMPDao.selectList(lqw); return orderAppointmentMPDao.selectList(lqw);
} }
private ScheduleOverviewResp.OrderSum getTeamOrderSum(List<OrderRequest> orders) { private ScheduleOverviewResp.OrderSum getTeamOrderSum(List<OrderRequest> orders, HashMap<String, String> skillMapping) {
ScheduleOverviewResp.OrderSum s = new ScheduleOverviewResp.OrderSum(); ScheduleOverviewResp.OrderSum s = new ScheduleOverviewResp.OrderSum();
Map<String, List<OrderRequest>> cc = orders.stream().collect(Collectors.groupingBy(OrderRequest::getSkill));
List<OrderRequest> emtpy = new ArrayList<>(); List<OrderRequest> emtpy = new ArrayList<>();
HashMap<String, Integer> skillCount = new HashMap<>();
Map<String, List<OrderRequest>> cc = orders.stream().collect(Collectors.groupingBy(OrderRequest::getSkill));
for(Map.Entry<String, List<OrderRequest>> entry: cc.entrySet()){
String skill = entry.getKey();
Integer count = entry.getValue().size();
String skillCategory = skillMapping.get(skill);
Integer v = skillCount.getOrDefault(skillCategory, 0);
v += count;
skillCount.put(skillCategory, v);
}
s.setTotal(orders.size()); s.setTotal(orders.size());
s.setInstallNum(cc.getOrDefault("安装", emtpy).size()); s.setInstallNum(cc.getOrDefault("安装", emtpy).size());
s.setFixNum(cc.getOrDefault("维修", emtpy).size()); s.setFixNum(cc.getOrDefault("维修", emtpy).size());
s.setDesignNum(cc.getOrDefault("设计", emtpy).size()); s.setDesignNum(cc.getOrDefault("整改", emtpy).size());
s.setCleanNum(cc.getOrDefault("清", emtpy).size()); s.setCleanNum(cc.getOrDefault("清洁保养", emtpy).size());
return s; return s;
} }
private HashMap<String, String> getSkillMapping() {
LambdaQueryWrapper<SkillInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(SkillInfo::getSkill, SkillInfo::getSkillCategory)
.groupBy(SkillInfo::getSkill, SkillInfo::getSkillCategory);
List<SkillInfo> skillList = skillInfoMPDao.selectList(queryWrapper);
return skillList.stream().collect(Collectors.toMap(
SkillInfo::getSkill, SkillInfo::getSkillCategory, (oldValue, newValue) -> newValue, HashMap::new));
}
private HashMap<String, Integer> queryCountBySkill(LocalDate date, String levelType, List<String> levelValue) { private HashMap<String, Integer> queryCountBySkill(LocalDate date, String levelType, List<String> levelValue) {
HashMap<String, Integer> map = new HashMap<>(); HashMap<String, Integer> map = new HashMap<>();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!