Commit 99e48267 by 刘鑫

Merge branch 'develop' of https://gitlab.dituhui.com/bsh/project/project into develop

2 parents 41e6e700 bb5efd87
......@@ -14,15 +14,11 @@ spring:
uri: lb://project-gis
predicates:
- Path=/gis/**
- id: district
uri: lb://project-district
predicates:
- Path=/district/**
- id: dispatch
uri: lb://project-dispatch
predicates:
- Path=/dispatch/**
- Path=/pea-dispatch/**
auth:
path: /pea-user/**,/pea-role/**,/pea-order/**,/test/**,/v1/**,/gis/** # 需要认证的路边列表,多个用逗号连接
path: /pea-user/**,/pea-role/**,/pea-order/**,/test/**,/v1/**,/pea-dispatch/** # 需要认证的路边列表,多个用逗号连接
......@@ -26,6 +26,9 @@ public class PathController implements IPath {
@Autowired
OrderInfoRepository orderInfoRepository;
@Autowired
RoadDistanceUtils roadDistanceUtils;
@Override
public Result<DistanceDTO> getRoadDistance(String fromOrderId, String toOrderId, Integer vehicleType) {
try {
......@@ -46,13 +49,17 @@ public class PathController implements IPath {
|| StringUtils.isEmpty(toOrders.get(0).getX()) || StringUtils.isEmpty(toOrders.get(0).getY())) {
return Result.failure("missing coordinates");
}
float fromX = Float.parseFloat(fromOrders.get(0).getX()),
fromY = Float.parseFloat(fromOrders.get(0).getY()), toX = Float.parseFloat(toOrders.get(0).getX()),
toY = Float.parseFloat(toOrders.get(0).getY());
if (fromX < 1 || fromY < 1 || toX < 1 || toY < 1) {
System.out.println(fromX + "," + fromY + ";" + toX + "," + toY);
return Result.failure("invalid coordinates");
}
// 获取距离
Distance distance = RoadDistanceUtils.getDistance(
new Location(0L, Float.parseFloat(fromOrders.get(0).getX()),
Float.parseFloat(fromOrders.get(0).getY())),
new Location(0L, Float.parseFloat(toOrders.get(0).getX()),
Float.parseFloat(toOrders.get(0).getY())),
vehicleType);
Distance distance = roadDistanceUtils.getDistance2(new Location(0L, null, null, fromX, fromY),
new Location(0L, null, null, toX, toY), vehicleType);
DistanceDTO dto = new DistanceDTO();
dto.setDis(distance.getDis());
dto.setTime(distance.getTime());
......
......@@ -10,11 +10,14 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.dituhui.pea.dispatch.pojo.Location;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
/**
* 路网组件<br>
......@@ -24,6 +27,8 @@ import lombok.Data;
* @author gpzhang
*
*/
@Component
@Slf4j
public class RoadDistanceUtils {
public static String URL = "https://api.map.baidu.com/routematrix/v2/";
......@@ -37,6 +42,40 @@ public class RoadDistanceUtils {
/**
* 获取路网距离和时间<br>
*
* @param from
* @param to
* @param vehicleType 不能为空
* @return
*/
public Distance getDistance2(Location from, Location to, int vehicleType) {
try {
String key = from.getLongitude() + "," + from.getLatitude() + ";" + to.getLongitude() + ","
+ to.getLatitude() + "|" + vehicleType;
Distance distance = distanceCache.get(key);
if (null == distance) {
distance = getDistance(from.getLatitude() + "," + from.getLongitude(),
to.getLatitude() + "," + to.getLongitude(), vehicleType);
log.info(key + " " + distance);
if (null == distance) {
Distance dis = new Distance();
return dis;
} else {
distanceCache.put(key, distance);
}
return distance;
} else {
log.info(key + " from cache " + distance);
return distance;
}
} catch (Exception e) {
Distance dis = new Distance();
return dis;
}
}
/**
* 获取路网距离和时间<br>
* TODO 需要做成分布式缓存模式,这里会造成内存问题<br>
* TODO 调用方式需要改成批量调用方式
*
......@@ -97,6 +136,7 @@ public class RoadDistanceUtils {
}
String text = requestGetAK(url, params);
System.out.println(url + " : " + gson.toJson(params) + " : " + text);
BDResult webResult = gson.fromJson(text, BDResult.class);
float dis = webResult.getResult().get(0).getDistance().getValue() / 1000F;
int time = webResult.getResult().get(0).getDuration().getValue();
......
......@@ -26,7 +26,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
*/
@SpringBootApplication
@EnableScheduling
@EnableFeignClients(basePackages = {"com.dituhui.pea.user", "com.dituhui.pea.order"})
@EnableFeignClients(basePackages = {"com.dituhui.pea.user", "com.dituhui.pea.order", "com.dituhui.pea.dispatch"})
public class OrderServiceApplication {
public static void main(String[] args) {
......
......@@ -236,6 +236,27 @@ public class PeaApiController {
if (StringUtils.isBlank(request.getOrderId())) {
return Result.failed(StatusCodeEnum.COMMON_PARAM_EMPTY);
}
if (StringUtils.isNotBlank(request.getBrand())) {
TypeCodeCheckTableEntity brand = tableCodeCheckDao.findByTypeAndCode("BRAND", request.getBrand());
if (Objects.isNull(brand)) {
throw new BusinessException("查询不到:" + request.getBrand() + "对应的品牌");
}
request.setBrand(brand.getName());
}
if (StringUtils.isNotBlank(request.getProductType())) {
TypeCodeCheckTableEntity type = tableCodeCheckDao.findByTypeAndCode("TYPE", request.getProductType());
if (Objects.isNull(type)) {
throw new BusinessException("查询不到:" + request.getProductType() + "对应的产品类型");
}
request.setProductType(type.getName());
}
if (StringUtils.isNotBlank(request.getServiceType())) {
TypeCodeCheckTableEntity skill = tableCodeCheckDao.findByTypeAndCode("SKILL", request.getServiceType());
if (Objects.isNull(skill)) {
throw new BusinessException("查询不到:" + request.getServiceType() + "对应的技能");
}
request.setServiceType(skill.getName());
}
return orderInfoService.orderStageChanged(request);
}
......
......@@ -100,5 +100,9 @@ public class DispatchOrderListResp {
* bean标签
*/
private String beanTags;
private String x;
private String y;
}
}
package com.dituhui.pea.order.dto;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class OrderSegment {
private String orderId;
private LocalDateTime start;
private LocalDateTime end;
private double x;
private double y;
private int takeTime;
private int elapsed;
private int distance;
public OrderSegment() {
}
public OrderSegment(LocalDateTime start, LocalDateTime end, double x, double y, int takeTime, int elapsed, int distance) {
this.start = start;
this.end = end;
this.x = x;
this.y = y;
this.takeTime = takeTime;
this.elapsed = elapsed;
this.distance = distance;
}
}
......@@ -96,6 +96,11 @@ public class OrderServiceDetailResp {
private String address;
private String date;
/**
* 是否超派,0否 1是,默认0
*/
private Integer transcend;
//
// @Data
// @JsonInclude(JsonInclude.Include.NON_NULL)
......
......@@ -86,4 +86,22 @@ public class OrderServiceList {
*/
private String actualEndTime;
/**
* bean同步地址id
*/
private String addressId;
/**
* 是否是cutoff,0否 1是 默认0
*/
private Integer isCutoff;
/**
* 改约原因
*/
private String reschedulingReason;
private String planStartTime;
private String planEndTime;
}
......@@ -98,4 +98,14 @@ public class OrderInfo {
* 是否是特殊时间段,0否 1是 默认0
*/
private Integer isSpecialTime;
/**
* 是否是cutoff,0否 1是 默认0
*/
private Integer isCutoff;
/**
* 改约原因
*/
private String reschedulingReason;
}
\ No newline at end of file
......@@ -3,8 +3,13 @@ package com.dituhui.pea.order.service;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dto.OrderReschedule;
import com.dituhui.pea.order.dto.param.OrderDTO;
import com.dituhui.pea.order.entity.EngineerInfoEntity;
import com.dituhui.pea.order.entity.OrderInfoEntity;
import com.dituhui.pea.order.entity.OrgTeamEntity;
import com.dituhui.pea.order.entity.SkillInfoEntity;
import java.time.LocalDate;
import java.util.List;
/**
* 订单相关
......@@ -51,4 +56,17 @@ public interface OrderInfoService {
* @return
*/
Result<?> orderReschedulingReason();
/**
* 根据工程师当日订单插入订单
*
* @param skillInfo 待指派订单技能
* @param engineerOrders 待指派工程师当日工单
* @param insertOrder 待指派订单
* @param orgTeam 待指派工程师团队
* @param engineer 指派工程师
* @return
*/
public Result<OrderInfoEntity> insterEngineerOrders(List<OrderInfoEntity> engineerOrders, OrderInfoEntity insertOrder, SkillInfoEntity skillInfo, OrgTeamEntity orgTeam, EngineerInfoEntity engineer);
}
......@@ -3,6 +3,7 @@ package com.dituhui.pea.order.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.dituhui.pea.common.BusinessException;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.common.ResultEnum;
import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.ListUtils;
import com.dituhui.pea.order.common.TimeUtils;
......@@ -15,6 +16,7 @@ import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.*;
import com.dituhui.pea.order.service.CommonService;
import com.dituhui.pea.order.service.DispatchService;
import com.dituhui.pea.order.service.OrderInfoService;
import com.dituhui.pea.order.utils.CommonUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
......@@ -69,6 +71,9 @@ public class DispatchServiceImpl implements DispatchService {
@Autowired
private CommonService commonService;
@Autowired
private OrderInfoService orderInfoService;
@Transactional
@Override
public Result<?> getDispatchOrderList(DispatchOrderListReq reqDTO) {
......@@ -275,7 +280,6 @@ public class DispatchServiceImpl implements DispatchService {
@Override
public Result<?> dispatchOrderConfirm(String engineerCode, String date, List<String> orderIds) throws BusinessException {
// 派工台确认派单
LocalDate localDate = TimeUtils.IsoDate2LocalDate(date);
EngineerInfoEntity engineer = engineerInfoDao.getByEngineerCode(engineerCode);
......@@ -286,11 +290,11 @@ public class DispatchServiceImpl implements DispatchService {
if (ListUtils.isEmpty(orders)) {
return Result.failed("订单不存在");
}
List<OrgTeamEngineerEntity> orgTeamEngineers = orgTeamEngineerDao.findByEngineerCode(engineer.getEngineerCode());
if (CollectionUtils.isEmpty(orgTeamEngineers)) {
return Result.failed(StatusCodeEnum.TEAM_UNMATCHED);
}
//判断工程师订单当日工单时间安排
OrgTeamEntity byTeamId = orgTeamDao.getByTeamId(orgTeamEngineers.get(0).getTeamId());
for (OrderInfoEntity entity : orders) {
......@@ -298,6 +302,14 @@ public class DispatchServiceImpl implements DispatchService {
return Result.failed(String.format("订单已指派个技术员[%s], 不必重复指派给同一个技术员", engineer.getName()));
}
SkillInfoEntity skill = skillInfoDao.getByBrandAndTypeAndSkill(CommonUtil.fixBrand(entity.getBrand()), entity.getType(), entity.getSkill());
List<OrderInfoEntity> engineerOrders = orderInfoDao.findByDtAndEngineerCode(localDate, engineer.getEngineerCode());
if (CollectionUtils.isNotEmpty(engineerOrders)) {
Result<OrderInfoEntity> entityResult = orderInfoService.insterEngineerOrders(engineerOrders, entity, skill, byTeamId, engineer);
if (!entityResult.getCode().equals(ResultEnum.SUCCESS.getCode())) {
return Result.failed("当前工程师工单已满");
}
entity = entityResult.getResult();
}
entity.setTakeTime(skill.getTakeTime());
entity.setPlanStartTime(entity.getExpectTimeBegin());
entity.setPlanEndTime(entity.getExpectTimeBegin().plusMinutes(skill.getTakeTime()));
......@@ -397,6 +409,8 @@ public class DispatchServiceImpl implements DispatchService {
item.setIsSpecialTime(o.getIsSpecialTime());
item.setBeanTags(o.getBeanTags());
item.setIsCutoff(o.getIsCutoff());
item.setX(o.getX());
item.setY(o.getY());
item.setOrgGroupName(groupMap.get(o.getOrgGroupId()));
if (isContinue && StringUtils.isNotEmpty(o.getMultipleOrders()) && !groupTagId.equals(OrderGroupEnum.five.getCode())) {
List<OrderInfoEntity> byMultipleOrders = orderInfoDao.findByMultipleOrdersAndOrderIdNot(o.getMultipleOrders(), o.getOrderId());
......
......@@ -146,7 +146,6 @@ public class OrderAssignImpl implements OrderAssign {
@Override
public Result<?> orderAssign(OrderAssignReq req) throws BusinessException {
// 服务单指派-指派提交
OrderInfoEntity entity = orderInfoDao.getByOrderId(req.getOrderId());
if (entity == null) {
return Result.failed("订单不存在");
......@@ -158,16 +157,21 @@ public class OrderAssignImpl implements OrderAssign {
if (CollectionUtils.isEmpty(orgTeamEngineers)) {
return Result.failed(StatusCodeEnum.TEAM_UNMATCHED);
}
OrgTeamEntity byTeamId = orgTeamDao.getByTeamId(orgTeamEngineers.get(0).getTeamId());
if (entity != null && !entity.getAppointmentStatus().equals("NOT_ASSIGNED") && StringUtils.isNotBlank(entity.getEngineerCode()) && entity.getEngineerCode().equals(req.getEngineerCode())) {
throw new BusinessException(String.format("订单已指派个技术员[%s], 不必重复指派给同一个技术员", engineer.getName()));
}
OrgTeamEntity byTeamId = orgTeamDao.getByTeamId(orgTeamEngineers.get(0).getTeamId());
SkillInfoEntity skill = skillInfoDao.getByBrandAndTypeAndSkill(CommonUtil.fixBrand(entity.getBrand()), entity.getType(), entity.getSkill());
entity.setTakeTime(skill.getTakeTime());
entity.setPlanStartTime(entity.getExpectTimeBegin());
entity.setPlanEndTime(entity.getExpectTimeBegin().plusMinutes(skill.getTakeTime()));
//判断工程师订单当日工单时间安排
List<OrderInfoEntity> engineerOrders = orderInfoDao.findByDtAndEngineerCode(entity.getDt(), engineer.getEngineerCode());
if (CollectionUtils.isNotEmpty(engineerOrders)) {
Result<OrderInfoEntity> entityResult = orderInfoService.insterEngineerOrders(engineerOrders, entity, skill, byTeamId, engineer);
if (!entityResult.getCode().equals(ResultEnum.SUCCESS.getCode())) {
return Result.failed("当前工程师工单已满");
}
entity = entityResult.getResult();
}
entity.setEngineerCode(engineer.getEngineerCode());
entity.setEngineerName(engineer.getName());
entity.setEngineerPhone(engineer.getPhone());
......@@ -177,8 +181,6 @@ public class OrderAssignImpl implements OrderAssign {
entity.setOrgBranchId(byTeamId.getBranchId());
entity.setOrgClusterId(byTeamId.getClusterId());
orderInfoDao.save(entity);
// entity.setEngineerCode(engineer.getEngineerCode());
// orderInfoDao.save(order);
// 工单变更登记
commonService.addOrderEvent(entity.getOrderId(), "", "BEAN", "BEAN", OrderEventEnum.reassignment.getEvent(),
String.format(OrderEventEnum.reassignment.getMsg(), engineer.getName() + "-" + (ObjectUtil.isNotNull(byTeamId) ? byTeamId.getTeamName() : "")),
......
......@@ -5,18 +5,21 @@ import cn.hutool.core.util.ObjectUtil;
import com.dituhui.pea.common.BusinessException;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.common.ResultEnum;
import com.dituhui.pea.dispatch.IPath;
import com.dituhui.pea.enums.StatusCodeEnum;
import com.dituhui.pea.order.common.TimeUtils;
import com.dituhui.pea.order.constant.OrderReschedulingReason;
import com.dituhui.pea.order.dao.*;
import com.dituhui.pea.order.dto.MsgDTO;
import com.dituhui.pea.order.dto.OrderReschedule;
import com.dituhui.pea.order.dto.OrderSegment;
import com.dituhui.pea.order.dto.param.*;
import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.*;
import com.dituhui.pea.order.service.*;
import com.dituhui.pea.order.utils.CommonUtil;
import com.dituhui.pea.order.utils.OrderUtil;
import com.dituhui.pea.pojo.DistanceDTO;
import com.dituhui.pea.pojo.saas.req.AdministrativeDistrictReq;
import com.dituhui.pea.pojo.saas.resp.AdministrativeDistrictResp;
import com.dituhui.pea.util.DateUtil;
......@@ -28,8 +31,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
......@@ -64,6 +70,9 @@ public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrgTeamDao orgTeamDao;
@Autowired
private IPath pathService;
/**
* 新增订单处理一家多单逻辑
......@@ -229,7 +238,9 @@ public class OrderInfoServiceImpl implements OrderInfoService {
order.setExpectTimeBegin(expectBegin);
order.setExpectTimeEnd(expectEnd);
order.setExpectTimeDesc(req.getExpectDesc());
order.setTranscend(0);
order.setOrderStatus(OrderStatusEnum.RESCHEDULED.getCode());
order.setReschedulingReason(StringUtils.isNotBlank(req.getReschedulingReason()) ? req.getReschedulingReason() : order.getReschedulingReason());
boolean skillUpdate = false;
OrgGroupEntity orgGroupEntity = null;
if (StringUtils.isNotBlank(order.getOrgGroupId())) {
......@@ -295,7 +306,6 @@ public class OrderInfoServiceImpl implements OrderInfoService {
}
}
}
order.setReschedulingReason(StringUtils.isNotBlank(req.getReschedulingReason()) ? req.getReschedulingReason() : order.getReschedulingReason());
OrgGroupEntity groupEntity = orgGroupDao.getByGroupId(order.getOrgGroupId());
//是否今天
......@@ -354,6 +364,8 @@ public class OrderInfoServiceImpl implements OrderInfoService {
order.setAppointmentMethod(AppointmentMethodEnum.MANUAL.name());
order.setAppointmentStatus(OrderFlowEnum.INIT.name());
sendMsg(order.getOrgBranchId(), order.getOrderId(), req.getExpectBegin());
} else {
order.setTranscend(1);
}
}
} else if (!isToday && !isBelong) {
......@@ -399,7 +411,8 @@ public class OrderInfoServiceImpl implements OrderInfoService {
// 登记事件
commonService.addOrderEvent(req.getOrderId(), "", req.getOperator(), req.getOperator(), OrderEventEnum.recontracting.getEvent(),
String.format(OrderEventEnum.recontracting.getMsg(), engineerName + "-" + (ObjectUtil.isNotNull(orgTeamEntity) ? orgTeamEntity.getTeamName() : ""),
ObjectUtil.isNotNull(orgGroupEntity) ? orgGroupEntity.getGroupName() : "", req.getExpectBegin(), req.getReschedulingReason()), "");
ObjectUtil.isNotNull(orgGroupEntity) ? orgGroupEntity.getGroupName() : "", req.getExpectBegin(), req.getReschedulingReason()),
StringUtils.isNotBlank(req.getReschedulingReason()) ? "改约原因:" + req.getReschedulingReason() : "");
return Result.success(null);
}
......@@ -414,6 +427,111 @@ public class OrderInfoServiceImpl implements OrderInfoService {
return Result.success(OrderReschedulingReason.ReschedulingReasonMap);
}
/**
* 根据工程师当日订单插入订单
*
* @param skillInfo 待指派订单技能
* @param engineerOrders 待指派工程师当日工单
* @param insertOrder 待指派订单
* @param orgTeam 待指派工程师团队
* @param engineer 指派工程师
* @return
*/
@Transactional
@Override
public Result<OrderInfoEntity> insterEngineerOrders(List<OrderInfoEntity> engineerOrders, OrderInfoEntity insertOrder, SkillInfoEntity skillInfo, OrgTeamEntity orgTeam, EngineerInfoEntity engineer) {
int takeTime = skillInfo.getTakeTime();
// 获取客户期望时间段
LocalDateTime start = insertOrder.getExpectTimeBegin();
LocalDateTime end = insertOrder.getExpectTimeEnd();
// 获取团队工作起止时间
String[] teamWorkStartTime = orgTeam.getWorkOn().split(":");
String[] teamWorkEndTime = orgTeam.getWorkOff().split(":");
LocalDateTime startTeam = LocalDate.now().atTime(Integer.parseInt(teamWorkStartTime[0]), Integer.parseInt(teamWorkStartTime[1]), 0);
LocalDateTime endTeam = LocalDate.now().atTime(Integer.parseInt(teamWorkEndTime[0]), Integer.parseInt(teamWorkEndTime[1]), 0);
// 计算最早派工和最晚派工时间
LocalDateTime workStartTime = start.isAfter(startTeam) ? start : startTeam;
LocalDateTime workEndTime = end.isBefore(endTeam) ? end : endTeam;
// 订单工作时间顺序排序
List<OrderSegment> orderSegments = new ArrayList<>();
for (OrderInfoEntity orderInfo : engineerOrders) {
if (orderInfo.getOrderStatus().equals(OrderStatusEnum.CANCELED.getCode())) {
continue;
}
OrderSegment seg = new OrderSegment();
seg.setX(Double.parseDouble(orderInfo.getX()));
seg.setY(Double.parseDouble(orderInfo.getY()));
seg.setOrderId(orderInfo.getOrderId());
seg.setElapsed(orderInfo.getArriveElapsed());
seg.setDistance(orderInfo.getArriveDistance());
seg.setStart(orderInfo.getPlanStartTime());
seg.setEnd(orderInfo.getPlanEndTime());
orderSegments.add(seg);
}
// 没有单直接返回
if (CollectionUtils.isEmpty(orderSegments)) {
insertOrder.setTakeTime(skillInfo.getTakeTime());
insertOrder.setPlanStartTime(insertOrder.getExpectTimeBegin());
insertOrder.setPlanEndTime(insertOrder.getExpectTimeBegin().plusMinutes(skillInfo.getTakeTime()));
return Result.success(insertOrder);
}
orderSegments = orderSegments.stream().sorted(Comparator.comparing(OrderSegment::getStart)).collect(Collectors.toList());
for (int i = 0; i < orderSegments.size(); i++) {
OrderSegment orderSegment = orderSegments.get(i);
Result<DistanceDTO> roadResult = pathService.getRoadDistance(insertOrder.getOrderId(), orderSegment.getOrderId(), engineer.getVehicle());
if (!roadResult.getCode().equals(ResultEnum.SUCCESS.getCode())) {
continue;
}
DistanceDTO distanceDTO = roadResult.getResult();
int roadTime = distanceDTO.getTime() / 1000;
// 先判断第一单开始时间
if (i == 0 && orderSegment.getStart().minusHours(orderSegment.getElapsed()).compareTo(workStartTime.plusMinutes(takeTime + roadTime)) >= 0) {
insertOrder.setTakeTime(skillInfo.getTakeTime());
// insertOrder.setArriveDistance(roadTime);
// insertOrder.setArriveDistance(Integer.valueOf(String.valueOf(distanceDTO.getDis() * 1000)));
insertOrder.setPlanStartTime(insertOrder.getExpectTimeBegin());
insertOrder.setPlanEndTime(insertOrder.getExpectTimeBegin().plusMinutes(skillInfo.getTakeTime()));
OrderInfoEntity nestOrder = orderInfoDao.getByOrderId(orderSegment.getOrderId());
nestOrder.setArriveDistance(roadTime);
insertOrder.setArriveDistance(BigDecimal.valueOf(distanceDTO.getDis() * 1000).intValue());
orderInfoDao.save(nestOrder);
return Result.success(insertOrder);
}
// 判断当前是不是最后一单
if (i == orderSegments.size() - 1 && workEndTime.compareTo(orderSegment.getEnd().plusMinutes(takeTime + roadTime)) >= 0) {
insertOrder.setTakeTime(skillInfo.getTakeTime());
insertOrder.setArriveDistance(roadTime);
insertOrder.setArriveDistance(BigDecimal.valueOf(distanceDTO.getDis() * 1000).intValue());
insertOrder.setPlanStartTime(orderSegment.getEnd().plusMinutes(roadTime));
insertOrder.setPlanEndTime(orderSegment.getEnd().plusMinutes(takeTime + roadTime));
return Result.success(insertOrder);
}
// 当前单在中间
OrderSegment nestOrderSegment = orderSegments.get(i + 1);
Result<DistanceDTO> roadResult2 = pathService.getRoadDistance(nestOrderSegment.getOrderId(), insertOrder.getOrderId(), engineer.getVehicle());
if (!roadResult.getCode().equals(ResultEnum.SUCCESS.getCode())) {
continue;
}
if (nestOrderSegment.getStart().minusHours(roadResult2.getResult().getTime() / 1000).compareTo(orderSegment.getEnd().plusMinutes(takeTime + roadTime)) >= 0) {
insertOrder.setTakeTime(skillInfo.getTakeTime());
insertOrder.setArriveDistance(roadTime);
insertOrder.setArriveElapsed(BigDecimal.valueOf(distanceDTO.getDis() * 1000).intValue());
insertOrder.setPlanStartTime(orderSegment.getEnd().plusMinutes(roadTime));
insertOrder.setPlanEndTime(orderSegment.getEnd().plusMinutes(takeTime + roadTime));
OrderInfoEntity nestOrder = orderInfoDao.getByOrderId(nestOrderSegment.getOrderId());
nestOrder.setArriveDistance(roadResult2.getResult().getTime() / 1000);
nestOrder.setArriveElapsed(BigDecimal.valueOf(roadResult2.getResult().getDis() * 1000).intValue());
orderInfoDao.save(nestOrder);
return Result.success(insertOrder);
}
}
return Result.failed(insertOrder);
}
/**
* 订单重新分单
*
......@@ -424,7 +542,7 @@ public class OrderInfoServiceImpl implements OrderInfoService {
*/
private OrderInfoEntity orderFendan(OrderInfoEntity order, OrderReschedule req, Location location) {
order.setServiceStatus(ServiceStatusEnum.INIT.getCode());
if (StringUtils.isBlank(req.getDescription())) {
if (StringUtils.isNotBlank(req.getDescription())) {
order.setDescription(order.getDescription());
}
//获取省市区
......@@ -456,8 +574,11 @@ public class OrderInfoServiceImpl implements OrderInfoService {
} else {
// 根据分单工作队,填写clusterId/branchId/groupId/teamId等
OrgTeamInfo teamInfo = fendanResult.getResult();
order.setOrgClusterId(teamInfo.getClusterId());
order.setOrgGroupId(teamInfo.getGroupId());
order.setOrgTeamId(teamInfo.getTeamId());
order.setAppointmentMethod(AppointmentMethodEnum.AUTO_BATCH.name());
order.setAppointmentStatus(OrderFlowEnum.INIT.name());
//处理超派,特殊时间段
// order.setIsSpecialTime(CommonUtil.isSpecial(order.getExpectTimeBegin().toLocalTime(),
// order.getExpectTimeEnd().toLocalTime(), teamInfo.getWorkOn(), teamInfo.getWorkOff()));
......
......@@ -88,6 +88,7 @@ public class OrderServiceDetailImpl implements OrderServiceDetail {
res.setIsSpecialTime(order.getIsSpecialTime());
res.setMultipleOrders(order.getMultipleOrders());
res.setBeanTags(order.getBeanTags());
res.setTranscend(order.getTranscend());
return Result.success(res);
}
......
......@@ -157,9 +157,15 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record.setMultipleOrders(o.getMultipleOrders());
record.setTranscend(o.getTranscend());
record.setIsSpecialTime(o.getIsSpecialTime());
record.setAddressId(o.getAddressId());
record.setIsCutoff(o.getIsCutoff());
record.setReschedulingReason(o.getReschedulingReason());
record.setActualStartTime(ObjectUtil.isNull(o.getActualStartTime()) ? "" : TimeUtils.IsoTimestamp2DateTime(o.getActualStartTime()));
record.setActualEndTime(ObjectUtil.isNull(o.getActualEndTime()) ? "" : TimeUtils.IsoTimestamp2DateTime(o.getActualEndTime()));
record.setPlanStartTime(ObjectUtil.isNull(o.getPlanStartTime()) ? "" : TimeUtils.IsoTimestamp2DateTime(o.getPlanStartTime()));
record.setPlanEndTime(ObjectUtil.isNull(o.getPlanEndTime()) ? "" : TimeUtils.IsoTimestamp2DateTime(o.getPlanEndTime()));
if (StringUtils.isNotEmpty(o.getMultipleOrders())) {
List<OrderInfoEntity> byMultipleOrders = orderInfoDao.findByMultipleOrdersAndOrderIdNot(o.getMultipleOrders(), o.getOrderId());
List<OrderServiceList> multipleItems = new ArrayList<>();
......@@ -223,6 +229,7 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record.setAppointEngineerCodes(o.getAppointEngineerCodes());
record.setMultipleOrders(o.getMultipleOrders());
record.setTranscend(o.getTranscend());
record.setAddressId(o.getAddressId());
return record;
}
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!