Commit 8179fcf1 by wangli

新增工程师轨迹接口

1 parent 7d8f5cea
package com.alibaba.cloud.integration.order.controller;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dto.EnginnerTimelineReq;
import com.alibaba.cloud.integration.order.service.EnginnerTimelineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EnginnerTimelineController {
@Autowired
private EnginnerTimelineService enginnerTimelineService;
@GetMapping("/enginner/work/trace")
public Result<?> GetEnginnerTimeline(@RequestParam EnginnerTimelineReq req) {
return enginnerTimelineService.GetEnginnerTimelines(req.getEnginnerCode(), req.getDate());
}
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.EngineerTimeline;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface EngineerTimelineDao extends BaseMapper<EngineerTimeline> {
}
package com.alibaba.cloud.integration.order.dao;
import com.alibaba.cloud.integration.order.entity.WarehouseInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface WarehouseInfoDao extends BaseMapper<WarehouseInfo> {
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
@Data
public class EnginnerTimelineReq {
private String enginnerCode;
private String date;
}
package com.alibaba.cloud.integration.order.dto;
import lombok.Data;
import java.util.List;
@Data
public class EnginnerTimelineResp {
private String engineerCode;
private String engineerName;
private List<DynamicItem> dynamics;
@Data
public static class DynamicItem{
private String title;
private String time;
private Integer status;
private String text;
private String location;
private String type;
}
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
import java.sql.Timestamp;
@Data
public class EngineerTimeline {
private String engineerCode;
private String event;
private Timestamp happen;
private String orderId;
private String suborderId;
private Integer status;
private String memo;
private Timestamp createTime;
private Timestamp updateTime;
}
package com.alibaba.cloud.integration.order.entity;
import lombok.Data;
@Data
public class WarehouseInfo {
private Integer warehouseId;
private String warehouseNname;
private String branchId;
private String cityCode;
private String address;
private String x;
private String y;
}
package com.alibaba.cloud.integration.order.service;
import com.alibaba.cloud.integration.common.Result;
public interface EnginnerTimelineService {
Result<?> GetEnginnerTimelines(String engineerCode, String date);
}
package com.alibaba.cloud.integration.order.service.impl;
import com.alibaba.cloud.integration.common.Result;
import com.alibaba.cloud.integration.order.dao.*;
import com.alibaba.cloud.integration.order.dto.EnginnerTimelineResp;
import com.alibaba.cloud.integration.order.entity.EngineerInfo;
import com.alibaba.cloud.integration.order.entity.EngineerTimeline;
import com.alibaba.cloud.integration.order.entity.OrderRequest;
import com.alibaba.cloud.integration.order.entity.WarehouseInfo;
import com.alibaba.cloud.integration.order.entity.OrderAppointment;
import com.alibaba.cloud.integration.order.service.EnginnerTimelineService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
public class EnginnerTimelineServiceImpl implements EnginnerTimelineService {
@Autowired
private EngineerTimelineDao engineerTimelineDao;
@Autowired
private OrderAppointmentDao orderAppointmentDao;
@Autowired
private EngineerInfoDao engineerInfoDao;
@Autowired
private OrderRequestDao orderRequestDao;
@Autowired
private WarehouseInfoDao warehouseInfoDao;
public Result<?> GetEnginnerTimelines(String engineerCode, String date){
// 工程师姓名
String name = this.GetEnginnerName(engineerCode);
// 获取工程师已完成的timeline数据
List<EngineerTimeline> timelines = this.EnginnerTimelines(engineerCode, date);
// 获取工程师date日的订单数据
List<OrderAppointment> orders = this.OrderAppointments(engineerCode, date);
// 获取客户地址
List<String> orderIds = new ArrayList<>();
for(OrderAppointment o: orders) {
orderIds.add(o.getOrderId());
}
HashMap<String, String> orderLocations = this.OrderRequestsLocation(orderIds);
// 获取配送站地址
String branchId = this.EngineerBranchId(engineerCode);
String warehouseLocation = this.WarehouseLocation(branchId);
List<EnginnerTimelineResp.DynamicItem> dynamics = this.PackItems(timelines, orders, orderLocations, warehouseLocation);
EnginnerTimelineResp res = new EnginnerTimelineResp();
res.setEngineerCode(engineerCode);
res.setEngineerName(name);
res.setDynamics(dynamics);
return Result.success(res);
}
private String GetEnginnerName(String enginerrCode){
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(EngineerInfo::getEngineerCode, enginerrCode);
EngineerInfo e = engineerInfoDao.selectOne(lqw);
return e.getName();
}
private List<OrderAppointment> OrderAppointments(String engineerCode, String date){
// 获取指派单列表
LambdaQueryWrapper<OrderAppointment> lqw = new LambdaQueryWrapper<>();
lqw.eq(OrderAppointment::getEngineerCode, engineerCode);
lqw.ge(OrderAppointment::getExpectTime, date + " 00:00:00");
lqw.le(OrderAppointment::getExpectTime, date + " 23:59:59");
return orderAppointmentDao.selectList(lqw);
}
private List<EngineerTimeline> EnginnerTimelines(String engineerCode, String date){
// 获取工程师timeline
List<String> events = Stream.of("分站取还配件", "已出发", "加单").collect(Collectors.toList());
LambdaQueryWrapper<EngineerTimeline> lqw = new LambdaQueryWrapper<>();
lqw.eq(EngineerTimeline::getEngineerCode, engineerCode);
lqw.ge(EngineerTimeline::getHappen, date+" 00:00:00");
lqw.le(EngineerTimeline::getHappen, date + " 23:59:59");
lqw.in(EngineerTimeline::getEvent, events);
return engineerTimelineDao.selectList(lqw);
}
private HashMap<String, String> OrderRequestsLocation(List<String> orderIds) {
// 获取客户地址location
HashMap<String, String> map = new HashMap<>();
LambdaQueryWrapper<OrderRequest> lqw = new LambdaQueryWrapper<>();
lqw.in(OrderRequest::getOrderId, orderIds);
List<OrderRequest> orders = orderRequestDao.selectList(lqw);
for(OrderRequest o: orders){
map.put(o.getOrderId(), String.format("%s,%s", o.getX(), o.getY()));
}
return map;
}
private String WarehouseLocation(String branchId) {
// 获取配送站location
LambdaQueryWrapper<WarehouseInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(WarehouseInfo::getBranchId, branchId);
WarehouseInfo w = warehouseInfoDao.selectOne(lqw);
return String.format("%s,%s", w.getX(), w.getY());
}
private String EngineerBranchId(String engineerCode) {
LambdaQueryWrapper<EngineerInfo> lqw = new LambdaQueryWrapper<>();
lqw.eq(EngineerInfo::getEngineerCode, engineerCode);
return engineerInfoDao.selectOne(lqw).getBranchId();
}
private List<EnginnerTimelineResp.DynamicItem> PackItems(List<EngineerTimeline> timelines, List<OrderAppointment> orders, HashMap<String, String> locations, String warehouseLocation) {
Integer index = 1;
String order_id, title, type, text, location;
List<EnginnerTimelineResp.DynamicItem> items = new ArrayList<>();
Set<String> s = new HashSet<>();
for (EngineerTimeline t: timelines){
EnginnerTimelineResp.DynamicItem item = new EnginnerTimelineResp.DynamicItem();
if (t.getEvent() == "分站取还配件") {
title = t.getEvent();
text = "取";
type = "other";
location = warehouseLocation;
} else if (t.getEvent() == "加单") {
title = t.getEvent();
text = "加";
type = "other";
location = locations.get(t.getOrderId());
} else {
index += 1;
title = String.format("第%d单出发", index);
text = String.format("%d", index);
type = "order";
location = locations.get(t.getOrderId());
}
item.setTitle(title);
item.setTime(this.Timestamp2Datetime(t.getHappen()));
item.setStatus(1);
item.setText(text);
item.setLocation(location);
item.setType(type);
items.add(item);
s.add(t.getOrderId() + t.getSuborderId());
}
for(OrderAppointment o: orders){
order_id = o.getOrderId() + o.getSuborderId();
if (s.equals(order_id)) {
continue;
}
index += 1;
EnginnerTimelineResp.DynamicItem item = new EnginnerTimelineResp.DynamicItem();
item.setTitle(String.format("第%d单出发", index));
item.setTime(this.Timestamp2Datetime(o.getExpectTime()));
item.setStatus(0);
item.setText(String.format("%d", index));
item.setLocation(locations.get(o.getOrderId()));
item.setType("order");
items.add(item);
}
// 根据items的time升序排序
items.stream().sorted(Comparator.comparing(EnginnerTimelineResp.DynamicItem::getTime)).collect(Collectors.toList());
return items;
}
private String Timestamp2Datetime(Timestamp t) {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-mm-dd HH:MM:SS");
return df.format(t.toLocalDateTime());
}
}
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!