Commit 5ed5f699 by 王力

Merge branch 'feature_mvp616_wangl' into 'develop'

Feature mvp616 wangl

See merge request !88
2 parents 836ed73c 6b753b65
...@@ -9,18 +9,18 @@ public class OrderAppointment { ...@@ -9,18 +9,18 @@ public class OrderAppointment {
private Integer id; private Integer id;
private String orderId; private String orderId;
private String suborderId; private String suborderId;
private String mainSub; private Integer mainSub;
private String engineerCode; private String engineerCode;
private String engineerName; private String engineerName;
private String engineerPhone; private String engineerPhone;
private String engineerAge; private String engineerAge;
private String isWorkshop; private Integer isWorkshop;
private Timestamp expectStartTime; private Timestamp expectStartTime;
private Timestamp expectEndTime; private Timestamp expectEndTime;
private Timestamp actualTime; private Timestamp actualTime;
private Timestamp actualStartTime; private Timestamp actualStartTime;
private Timestamp actualEndTime; private Timestamp actualEndTime;
private String pre_status; private String preStatus;
private String status; private String status;
private String memo; private String memo;
private Timestamp createTime; private Timestamp createTime;
......
package com.alibaba.cloud.integration.order.service.impl; package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.BusinessException;
import com.alibaba.cloud.integration.common.Result; import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.*; import com.alibaba.cloud.integration.order.dao.*;
import com.alibaba.cloud.integration.order.dto.DispatchEngineerOrderListResp; import com.alibaba.cloud.integration.order.dto.DispatchEngineerOrderListResp;
...@@ -12,6 +13,7 @@ import org.springframework.stereotype.Service; ...@@ -12,6 +13,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -190,8 +192,56 @@ public class DispatchServiceImpl implements DispatchService { ...@@ -190,8 +192,56 @@ public class DispatchServiceImpl implements DispatchService {
} }
@Override @Override
public Result<?> dispatchOrderConfirm(String engineerCode, List<String> orderIds) { public Result<?> dispatchOrderConfirm(String engineerCode, List<String> orderIds) throws BusinessException {
// 派工台确认派单 // 派工台确认派单
EngineerInfo engineer = this.queryEngineer(engineerCode);
if (engineer == null) {
throw new BusinessException("技术员不存在");
}
List<OrderRequest> orders = this.queryOrderRequestByOrderIds(orderIds);
if (orders.isEmpty()) {
throw new BusinessException("订单号错误");
}
// 通过订单获取日期
Timestamp t = orders.get(0).getExpectTimeBegin();
String date = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(t.toLocalDateTime());
LambdaQueryWrapper<OrderAppointment> lqw = new LambdaQueryWrapper<>();
lqw.eq(OrderAppointment::getEngineerCode, engineerCode);
lqw.ge(OrderAppointment::getExpectStartTime, this.getTimestampFromDate(date, "00:00:00"));
lqw.lt(OrderAppointment::getExpectStartTime, this.getTimestampFromDate(date, "23:59:59"));
lqw.orderByAsc(OrderAppointment::getExpectStartTime);
List<OrderAppointment> orderAppointments = orderAppointmentMPDao.selectList(lqw);
// TODO,临时处理方案,后续调用派单引擎处理
OrderRequestScheduler scheduler = new OrderRequestScheduler();
List<LineSegment> results = scheduler.scheduler(orders, orderAppointments);
for (LineSegment r : results) {
String orderId = r.id;
Timestamp expectStartTime = scheduler.linePoint2Timestamp(r.start, date);
Timestamp expectEndTime = scheduler.linePoint2Timestamp(r.end, date);
OrderAppointment op = new OrderAppointment();
op.setOrderId(orderId);
op.setSuborderId(Long.toString(System.currentTimeMillis()));
op.setMainSub(1);
op.setEngineerCode(engineerCode);
op.setEngineerName(engineer.getName());
op.setEngineerAge("");
op.setEngineerPhone(engineer.getPhone());
op.setIsWorkshop(0);
op.setExpectStartTime(expectStartTime);
op.setExpectStartTime(expectEndTime);
op.setPreStatus("PRE");
op.setStatus("PRE");
orderAppointmentMPDao.insert(op);
}
return null; return null;
} }
...@@ -245,6 +295,12 @@ public class DispatchServiceImpl implements DispatchService { ...@@ -245,6 +295,12 @@ public class DispatchServiceImpl implements DispatchService {
return engineerInfoMPDao.selectList(lqw); return engineerInfoMPDao.selectList(lqw);
} }
private EngineerInfo queryEngineer(String engineerCode) {
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(EngineerInfo::getEngineerCode, engineerCode);
return engineerInfoMPDao.selectOne(lqw);
}
private List<String> queryOrgGroupIds(String levelType, List<String> levelIds) { private List<String> queryOrgGroupIds(String levelType, List<String> levelIds) {
LambdaQueryWrapper<OrgGroup> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<OrgGroup> lqw = new LambdaQueryWrapper<>();
lqw.in(levelType.equals("cluster"), OrgGroup::getClusterId, levelIds); lqw.in(levelType.equals("cluster"), OrgGroup::getClusterId, levelIds);
...@@ -334,3 +390,109 @@ class GroupTagOmit implements GroupTag { ...@@ -334,3 +390,109 @@ class GroupTagOmit implements GroupTag {
return "默认分类#5"; return "默认分类#5";
} }
} }
class LineSegment {
public String id;
public int start;
public int end;
public LineSegment(String id, int start, int end) {
this.id = id;
this.start = start;
this.end = end;
}
}
class Line {
public String id;
public int length;
public Line(String id, int length) {
this.id = id;
this.length = length;
}
}
class LineSegmentScheduler {
public List<LineSegment> scheduleLineSegments(List<LineSegment> used, List<Line> newTasks) {
used.sort(Comparator.comparingInt(a -> a.start));
List<LineSegment> result = new ArrayList<>();
for (Line task : newTasks) {
String taskId = task.id;
int taskLength = task.length;
boolean scheduled = false;
int startRange = 480;
int endRange = 1440;
if (!scheduled) {
for (int i = 0; i <= used.size(); i++) {
int start;
if (i == 0) {
start = startRange;
} else {
start = used.get(i - 1).end;
}
int end;
if (i == used.size() || used.get(i).start > endRange) {
end = endRange;
} else {
end = used.get(i).start;
}
if (end - start >= taskLength) {
int taskStart = start;
int taskEnd = start + taskLength;
LineSegment s = new LineSegment(taskId, taskStart, taskEnd);
result.add(s);
used.add(i, s);
break;
}
}
}
}
return result;
}
}
class OrderRequestScheduler {
public List<LineSegment> scheduler(List<OrderRequest> orderRequests, List<OrderAppointment> orderAppointments) {
List<LineSegment> used = new ArrayList<>();
for (OrderAppointment o : orderAppointments) {
LineSegment s = new LineSegment(o.getOrderId(),
this.Timestamp2LinePoint(o.getExpectStartTime()),
this.Timestamp2LinePoint(o.getExpectEndTime()));
used.add(s);
}
List<Line> newTasks = new ArrayList<>();
for (OrderRequest o : orderRequests) {
Line l = new Line(o.getOrderId(), 30);
}
return new LineSegmentScheduler().scheduleLineSegments(used, newTasks);
}
public int Timestamp2LinePoint(Timestamp t) {
LocalDateTime datetime = t.toLocalDateTime();
return datetime.getHour() * 60 + datetime.getMinute();
}
public Timestamp linePoint2Timestamp(int x, String date) {
int base = 60;
int hour = x / base;
int minute = x % base;
String datetime = String.format("%s %d:%d:00", date, hour, minute);
return Timestamp.valueOf(datetime);
}
}
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!