Commit 5c875dce by huangjinxin

feat:一家多单,超派,特殊时间段相关

1 parent d3d25664
......@@ -33,6 +33,19 @@ public class DispatchController {
return res;
}
@GetMapping("/dispatch/order/group")
public Result<?> getDispatchOrderGroup(@Valid DispatchOrderListReq reqDTO) {
// 获取派工台待派订单列表
Result<?> res = null;
try {
res = dispatchService.getDispatchOrderGroup(reqDTO);
}catch (BusinessException e) {
return Result.failed(e.getMessage());
}
return res;
}
@GetMapping("/dispatch/engineer/order/list")
public Result<?> getDispatchEngineerOrderList(@Valid DispatchEngineerOrderListReq reqDTO) {
// 获取派工台工程师已派订单列表
......
......@@ -10,18 +10,31 @@ import java.util.List;
public interface OrderInfoDao extends JpaRepository<OrderInfoEntity, Long>, JpaSpecificationExecutor<OrderInfoEntity> {
OrderInfoEntity getByOrderId(String orderId);
OrderInfoEntity getByOrderIdAndDt(String orderId, LocalDate dt);
List<OrderInfoEntity> findByOrderId(String orderId);
List<OrderInfoEntity> findByDtAndEngineerCodeIn(LocalDate date, List<String> engineerCodes);
List<OrderInfoEntity> findByDtAndEngineerCode(LocalDate date, String engineerCode);
@Query("SELECT o.orderId, s.skillCategory as skillCaption FROM OrderInfoEntity o JOIN SkillInfoEntity s on o.brand=s.brand and o.type=s.type and o.skill=s.skill WHERE o.orderId = :orderId and o.dt = :dt")
OrderSkillProjection getOrderSkillCaptionByOrderIdAndDt(String orderId, LocalDate dt);
List<OrderInfoEntity> findAllByOrderIdIn(List<String> orderIds);
List<OrderInfoEntity> findAllByDtAndOrderIdIn(LocalDate dt, List<String> orderIds);
List<OrderInfoEntity> findByEngineerCodeAndDtAndAppointmentStatusIn(String engineerCode, LocalDate dt, List<String> appointmentStatus);
List<OrderInfoEntity> findByDtAndOrgTeamIdAndAppointmentStatusIn(LocalDate dt, String orgTeamId, List<String> appointmentStatus);
OrderInfoEntity findTopBySkillAndAppointmentStatus(String skill, String status);
List<OrderInfoEntity> findByServiceStatusAndEngineerCode(String serviceStatus, String engineerCode);
List<OrderInfoEntity> findByDtAndAddressId(String dt, String addressId);
List<OrderInfoEntity> findByMultipleOrders(String multipleOrders);
}
......@@ -3,6 +3,7 @@ package com.dituhui.pea.order.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import javax.persistence.Column;
import java.util.List;
@Data
......@@ -11,7 +12,7 @@ public class DispatchEngineerOrderListResp {
private List<EngineerInfo> engineers;
@Data
public static class EngineerInfo{
public static class EngineerInfo {
private String engineerCode;
private String engineerName;
private String capacity;
......@@ -22,7 +23,7 @@ public class DispatchEngineerOrderListResp {
@JsonInclude(JsonInclude.Include.ALWAYS)
@Data
public static class OrderInfo{
public static class OrderInfo {
private boolean weight;
private String orderId;
private String description;
......@@ -51,5 +52,46 @@ public class DispatchEngineerOrderListResp {
private String createTime;
private String groupTag;
private Integer groupWeight;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private String multipleOrders;
/**
* 一家多单订单集合
*/
private List<OrderInfo> multipleOrderList;
/**
* 是否重物搬运(双人上门) 0:否 1:是 默认0
*/
private Integer isMultiple = 0;
/**
* 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0
*/
private Integer isAppointEngineer = 0;
/**
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private String appointEngineerCodes;
/**
* 是否超派,0否 1是,默认0
*/
private Integer transcend;
/**
* 工单优先级
*/
private String beanPriority;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private Integer isSpecialTime;
}
}
......@@ -3,6 +3,7 @@ package com.dituhui.pea.order.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import javax.persistence.Column;
import java.util.List;
@Data
......@@ -11,7 +12,7 @@ public class DispatchOrderListResp {
@JsonInclude(JsonInclude.Include.ALWAYS)
@Data
public static class Order{
public static class Order {
private boolean weight;
private String orderId;
private String description;
......@@ -39,5 +40,56 @@ public class DispatchOrderListResp {
private String createTime;
private String groupTag;
private Integer groupWeight;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private String multipleOrders;
/**
* 分站/网点id
*/
private String orgGroupId;
/**
* 分站/网点name
*/
private String orgGroupName;
/**
* 一家多单订单集合
*/
private List<DispatchOrderListResp.Order> multipleOrderList;
/**
* 是否重物搬运(双人上门) 0:否 1:是 默认0
*/
private Integer isMultiple = 0;
/**
* 是否指定某个工程师/是否排除某个工程师 0:否 1:指定 2:排除 默认0
*/
private Integer isAppointEngineer = 0;
/**
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private String appointEngineerCodes;
/**
* 是否超派,0否 1是,默认0
*/
private Integer transcend;
/**
* 工单优先级
*/
private String beanPriority;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private Integer isSpecialTime;
}
}
......@@ -2,6 +2,8 @@ package com.dituhui.pea.order.dto;
import lombok.Data;
import java.util.List;
@Data
public class OrderServiceList {
private String orderId;
......@@ -54,4 +56,24 @@ public class OrderServiceList {
private String appointEngineerCodes;
/**
* 一家多单订单集合
*/
private List<OrderServiceList> multipleOrderList;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private String multipleOrders;
/**
* 是否超派,0否 1是,默认0
*/
private Integer transcend;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private Integer isSpecialTime;
}
......@@ -75,4 +75,27 @@ public class OrderInfo {
* 指定某个工程师/排除某个工程师 codes 多个,分割
*/
private String appointEngineerCodes;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
private String multipleOrders;
/**
* bean同步地址id
*/
private String addressId;
/**
* 是否超派,0否 1是,默认0
*/
private Integer transcend;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
private Integer isSpecialTime;
}
\ No newline at end of file
......@@ -197,4 +197,32 @@ public class OrderInfoEntity {
*/
@Column(name = "appoint_engineer_codes")
private String appointEngineerCodes;
/**
* 一家多单id,有则多条订单关联,没有则不是一家多单
*/
@Column(name = "multiple_orders")
private String multipleOrders;
/**
* bean同步地址id
*/
@Column(name = "address_id")
private String addressId;
/**
* 是否超派,0否 1是,默认0
*/
@Column(name = "transcend")
private Integer transcend;
/**
* 是否是特殊时间段,0否 1是 默认0
*/
@Column(name = "is_special_time")
private Integer isSpecialTime = 0;
}
package com.dituhui.pea.order.enums;
public enum OrderGroupEnum {
zero("0"),
one("1"),
two("2"),
three("3"),
four("4"),
five("5");
private String code;
OrderGroupEnum(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
......@@ -13,4 +13,12 @@ public interface DispatchService {
Result<?> getDispatchEngineerOrderList(DispatchEngineerOrderListReq reqDTO);
Result<?> dispatchOrderConfirm(String engineerCode, String date, List<String> orderIds);
/**
* 待派工工单池分组
*
* @param reqDTO
* @return
*/
Result<?> getDispatchOrderGroup(DispatchOrderListReq reqDTO);
}
package com.dituhui.pea.order.service;
import com.dituhui.pea.common.Result;
/**
* 订单相关
*/
public interface OrderInfoService {
/**
* 新增订单处理一家多单逻辑
*
* @param dt 订单日期 列:2023-07-21
* @param addressId 地址id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
Result<String> addMultipleOrders(String dt, String addressId);
/**
* 取消指定订单一家多台
*
* @param multipleOrders 订单关联id
* @param orderId 订单id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
Result deleteMultipleOrders(String multipleOrders, String orderId);
}
package com.dituhui.pea.order.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dituhui.pea.common.BusinessException;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.common.ListUtils;
......@@ -11,9 +10,11 @@ import com.dituhui.pea.order.dto.DispatchEngineerOrderListResp;
import com.dituhui.pea.order.dto.DispatchOrderListReq;
import com.dituhui.pea.order.dto.DispatchOrderListResp;
import com.dituhui.pea.order.entity.*;
import com.dituhui.pea.order.enums.OrderGroupEnum;
import com.dituhui.pea.order.enums.OrderStatus;
import com.dituhui.pea.order.service.DispatchService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
......@@ -56,6 +57,9 @@ public class DispatchServiceImpl implements DispatchService {
@Autowired
private EntityManager entityManager;
@Autowired
private OrgGroupDao orgGroupDao;
@Transactional
@Override
public Result<?> getDispatchOrderList(DispatchOrderListReq reqDTO) {
......@@ -161,14 +165,44 @@ public class DispatchServiceImpl implements DispatchService {
// 获取技术员已指派单列表
List<DispatchEngineerOrderListResp.EngineerInfo> egs = new ArrayList<>();
for (EngineerInfoEntity e : engineers) {
List<DispatchEngineerOrderListResp.OrderInfo> items = new ArrayList<>();
// 技术员已指派的订单列表
List<OrderInfoEntity> records = engineerOrders.getOrDefault(e.getEngineerCode(), new ArrayList<>());
for (OrderInfoEntity o : records) {
DispatchEngineerOrderListResp.OrderInfo item = new DispatchEngineerOrderListResp.OrderInfo();
addOrderToItems(o, items, skillInfo, true);
}
// 获取容量
int capUsed = 0;
int capTotal = 0;
String capacityStatus = "less";
CapacityEngineerStatEntity cap = engineerCap.get(e.getEngineerCode());
if (cap != null) {
capUsed = cap.getCapUsed();
capTotal = cap.getCapTotal();
if (capTotal > 0 && (float) capUsed / capTotal < 0.8) {
capacityStatus = "normal";
}
}
DispatchEngineerOrderListResp.EngineerInfo eg = new DispatchEngineerOrderListResp.EngineerInfo();
eg.setOrders(items);
eg.setEngineerCode(e.getEngineerCode());
eg.setEngineerName(e.getName());
eg.setGrade(e.getGrade());
eg.setCapacity(String.format("%d/%d", capUsed, capTotal));
eg.setCapacityStatus(capacityStatus);
egs.add(eg);
}
DispatchEngineerOrderListResp res = new DispatchEngineerOrderListResp();
res.setEngineers(egs);
return Result.success(res);
}
private void addOrderToItems(OrderInfoEntity o, List<DispatchEngineerOrderListResp.OrderInfo> items, HashMap<String, SkillInfoEntity> skillInfo, boolean isContinue) {
DispatchEngineerOrderListResp.OrderInfo item = new DispatchEngineerOrderListResp.OrderInfo();
item.setOrderId(o.getOrderId());
item.setDescription(String.format("%s:%s-%s-%s\n%s:%s-%s-%s", o.getOrderId(), o.getBrand(), o.getType(),
o.getSkill(), o.getName(), o.getCity(), o.getCounty(), o.getAddress()));
......@@ -210,35 +244,22 @@ public class DispatchServiceImpl implements DispatchService {
item.setOrderStatusDesc(OrderStatus.valueOf(o.getOrderStatus()).getDescription());
item.setCreateTime(TimeUtils.IsoLocalDateTime2String(o.getCreateTime()));
items.add(item);
}
// 获取容量
int capUsed = 0;
int capTotal = 0;
String capacityStatus = "less";
CapacityEngineerStatEntity cap = engineerCap.get(e.getEngineerCode());
if (cap != null) {
capUsed = cap.getCapUsed();
capTotal = cap.getCapTotal();
if (capTotal > 0 && (float) capUsed / capTotal < 0.8) {
capacityStatus = "normal";
}
}
DispatchEngineerOrderListResp.EngineerInfo eg = new DispatchEngineerOrderListResp.EngineerInfo();
eg.setOrders(items);
eg.setEngineerCode(e.getEngineerCode());
eg.setEngineerName(e.getName());
eg.setGrade(e.getGrade());
eg.setCapacity(String.format("%d/%d", capUsed, capTotal));
eg.setCapacityStatus(capacityStatus);
egs.add(eg);
item.setMultipleOrders(o.getMultipleOrders());
item.setIsMultiple(o.getIsMultiple());
item.setIsAppointEngineer(o.getIsAppointEngineer());
item.setAppointEngineerCodes(o.getAppointEngineerCodes());
item.setTranscend(o.getTranscend());
item.setBeanPriority(o.getBeanPriority());
item.setIsSpecialTime(o.getIsSpecialTime());
if (isContinue && StringUtils.isNotEmpty(o.getMultipleOrders())) {
List<OrderInfoEntity> byMultipleOrders = orderInfoDao.findByMultipleOrders(o.getMultipleOrders());
List<DispatchEngineerOrderListResp.OrderInfo> multipleItems = new ArrayList<>();
for (OrderInfoEntity info : byMultipleOrders) {
addOrderToItems(info, multipleItems, skillInfo, false);
}
item.setMultipleOrderList(multipleItems);
}
DispatchEngineerOrderListResp res = new DispatchEngineerOrderListResp();
res.setEngineers(egs);
return Result.success(res);
items.add(item);
}
@Transactional
......@@ -289,6 +310,128 @@ public class DispatchServiceImpl implements DispatchService {
return Result.success(null);
}
@Override
public Result<?> getDispatchOrderGroup(DispatchOrderListReq reqDTO) {
// 获取技能信息
HashMap<String, SkillInfoEntity> skillInfo = this.querySkillInfo();
// 获取工单列表
List<OrderInfoEntity> orders = this.queryOrders(reqDTO);
if (CollectionUtils.isEmpty(orders)) {
return Result.success();
}
List<String> groupIds = orders.stream().map(OrderInfoEntity::getOrgGroupId).distinct().collect(Collectors.toList());
List<OrgGroupEntity> byGroupIdIn = orgGroupDao.findByGroupIdIn(groupIds);
Map<String, String> groupMap = byGroupIdIn.stream().collect(Collectors.toMap(OrgGroupEntity::getGroupId, OrgGroupEntity::getGroupName));
List<DispatchOrderListResp.Order> items = new ArrayList<>();
Map<Object, List<DispatchOrderListResp.Order>> groupByMap = new HashMap<>();
for (OrderInfoEntity o : orders) {
items.add(orderItemByOrderInfo(o, skillInfo, true, groupMap, groupByMap, reqDTO.getGroupTagId()));
}
return Result.success(groupByMap);
}
/**
* 组装订单数据,并封装进map
*
* @param o
* @param skillInfo
* @param isContinue
* @param groupMap
* @param groupByMap
* @param groupTagId
* @return
*/
private DispatchOrderListResp.Order orderItemByOrderInfo(OrderInfoEntity o, HashMap<String, SkillInfoEntity> skillInfo,
boolean isContinue, Map<String, String> groupMap, Map<Object, List<DispatchOrderListResp.Order>> groupByMap, String groupTagId) {
DispatchOrderListResp.Order item = new DispatchOrderListResp.Order();
item.setOrderId(o.getOrderId());
item.setDescription(String.format("%s:%s-%s-%s\n%s:%s-%s-%s", o.getOrderId(), o.getBrand(), o.getType(),
o.getSkill(), o.getName(), o.getCity(), o.getCounty(), o.getAddress()));
item.setBrand(o.getBrand());
item.setType(o.getType());
item.setSkill(o.getSkill());
item.setFaultDescribe(o.getFaultDescribe());
item.setApplyNote(o.getApplyNote());
String key = String.format("%s%s%s", o.getBrand(), o.getType(), o.getSkill());
SkillInfoEntity skill = skillInfo.get(key);
if (skill != null) {
item.setDuration(skill.getTakeTime());
item.setSkillCategory(skill.getSkillCategory());
item.setTypeCategory(skill.getTypeCategory());
}
item.setName(o.getName());
item.setPhone(o.getPhone());
item.setCity(o.getCity());
item.setAddress(o.getAddress());
item.setProvince(o.getProvince());
item.setCity(o.getCity());
item.setCounty(o.getCounty());
item.setAddress(o.getAddress());
item.setName(o.getName());
item.setPhone(o.getPhone());
item.setExpectTimeDesc(o.getExpectTimeDesc());
item.setSource(o.getSource());
item.setDispatcher(o.getDispatcher());
item.setAppointmentType(o.getAppointmentMethod());
item.setAppointmentStatus(o.getAppointmentStatus());
item.setOrderStatus(o.getOrderStatus());
item.setServiceStatus(o.getServiceStatus());
item.setCreateTime(TimeUtils.IsoLocalDateTime2String(o.getCreateTime()));
item.setMultipleOrders(o.getMultipleOrders());
item.setIsMultiple(o.getIsMultiple());
item.setIsAppointEngineer(o.getIsAppointEngineer());
item.setAppointEngineerCodes(o.getAppointEngineerCodes());
item.setTranscend(o.getTranscend());
item.setBeanPriority(o.getBeanPriority());
item.setOrgGroupId(o.getOrgGroupId());
item.setIsSpecialTime(o.getIsSpecialTime());
item.setOrgGroupName(groupMap.get(o.getOrgGroupId()));
if (isContinue && StringUtils.isNotEmpty(o.getMultipleOrders())) {
List<OrderInfoEntity> byMultipleOrders = orderInfoDao.findByMultipleOrders(o.getMultipleOrders());
List<DispatchOrderListResp.Order> multipleItems = new ArrayList<>();
for (OrderInfoEntity info : byMultipleOrders) {
multipleItems.add(orderItemByOrderInfo(info, skillInfo, false, groupMap, groupByMap, groupTagId));
}
item.setMultipleOrderList(multipleItems);
}
if (groupTagId.equals(OrderGroupEnum.zero.getCode()) && StringUtils.isNotEmpty(item.getBeanPriority())) {
makeOrderMap(groupByMap, item, item.getBeanPriority());
} else if (groupTagId.equals(OrderGroupEnum.one.getCode()) && null != item.getDuration()) {
makeOrderMap(groupByMap, item, item.getDuration());
} else if (groupTagId.equals(OrderGroupEnum.two.getCode()) && StringUtils.isNotEmpty(item.getExpectTimeDesc())) {
makeOrderMap(groupByMap, item, item.getExpectTimeDesc());
} else if (groupTagId.equals(OrderGroupEnum.three.getCode()) && StringUtils.isNotEmpty(item.getOrgGroupName())) {
makeOrderMap(groupByMap, item, item.getOrgGroupName());
} else if (groupTagId.equals(OrderGroupEnum.four.getCode()) && StringUtils.isNotEmpty(item.getSkill())) {
makeOrderMap(groupByMap, item, item.getSkill());
} else if (groupTagId.equals(OrderGroupEnum.five.getCode()) && StringUtils.isNotEmpty(item.getMultipleOrders())) {
makeOrderMap(groupByMap, item, item.getMultipleOrders());
} else {
makeOrderMap(groupByMap, item, "默认分类");
}
return item;
}
/**
* 组装data数据到map
*
* @param groupByMap
* @param item
* @param groupkey
*/
private void makeOrderMap(Map<Object, List<DispatchOrderListResp.Order>> groupByMap, DispatchOrderListResp.Order item, Object groupkey) {
List<DispatchOrderListResp.Order> groupByList;
if (groupByMap.containsKey(groupkey)) {
groupByList = groupByMap.get(groupkey);
} else {
groupByList = new ArrayList<>();
}
groupByList.add(item);
groupByMap.put(groupkey, groupByList);
}
private List<OrderInfoEntity> queryOrders(DispatchOrderListReq reqDTO) {
// 获取服务单列表
......
package com.dituhui.pea.order.service.impl;
import com.dituhui.pea.common.Result;
import com.dituhui.pea.order.dao.OrderInfoDao;
import com.dituhui.pea.order.entity.OrderInfoEntity;
import com.dituhui.pea.order.service.OrderInfoService;
import com.dituhui.pea.util.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class OrderInfoServiceImpl implements OrderInfoService {
@Autowired
private OrderInfoDao orderInfoDao;
/**
* 新增订单处理一家多单逻辑
*
* @param dt 订单日期 列:2023-07-21
* @param addressId 地址id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
@Override
@Transactional
public Result<String> addMultipleOrders(String dt, String addressId) {
List<OrderInfoEntity> infoList = orderInfoDao.findByDtAndAddressId(dt, addressId);
if (CollectionUtils.isEmpty(infoList)) {
return Result.success(null);
}
List<String> multipleOrdersList = infoList.stream().filter(e -> StringUtils.isNotEmpty(e.getMultipleOrders())).map(OrderInfoEntity::getMultipleOrders).distinct().collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(multipleOrdersList)) {
return Result.success(multipleOrdersList.get(0));
}
String uuid = UUIDUtil.getUuid();
for (OrderInfoEntity orderInfoEntity : infoList) {
orderInfoEntity.setMultipleOrders(uuid);
orderInfoDao.save(orderInfoEntity);
}
return Result.success(uuid);
}
/**
* 取消指定订单一家多台
*
* @param multipleOrders 订单关联id
* @param orderId 订单id
* @return 有则返回多条订单关联id,没有则不是一家多单
*/
@Override
@Transactional
public Result deleteMultipleOrders(String multipleOrders, String orderId) {
List<OrderInfoEntity> infoList = orderInfoDao.findByMultipleOrders(multipleOrders);
for (OrderInfoEntity infoEntity : infoList) {
if (infoEntity.getOrderId().equals(orderId)) {
infoEntity.setMultipleOrders(null);
orderInfoDao.save(infoEntity);
}
if (infoList.size() == 2) {
infoEntity.setMultipleOrders(null);
orderInfoDao.save(infoEntity);
}
}
return Result.success();
}
}
......@@ -33,6 +33,9 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
@Autowired
private OrgBranchDao orgBranchDao;
@Autowired
private OrderInfoDao orderInfoDao;
@Transactional
@Override
public Result<OrderServiceListResp> getOrderServiceList(OrderServiceListReq reqDTO) throws BusinessException {
......@@ -126,7 +129,7 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record.setOrgBranchName(branchNames.getOrDefault(o.getOrgBranchId(), ""));
// 获取工程师信息,为派工为空
if(StringUtils.isNotBlank(o.getEngineerCode())) {
if (StringUtils.isNotBlank(o.getEngineerCode())) {
List<String> names = this.getOrderEngineerNames(o.getEngineerCode(), o.getEngineerCodeSub(), engineerNames);
record.setEngineerNum(names.size()); //工程师数量
record.setEngineerNames(String.join("、", names)); //工程师姓名列表
......@@ -146,7 +149,17 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
record.setIsMultiple(o.getIsMultiple());
record.setIsAppointEngineer(o.getIsAppointEngineer());
record.setAppointEngineerCodes(o.getAppointEngineerCodes());
record.setMultipleOrders(o.getMultipleOrders());
record.setTranscend(o.getTranscend());
record.setIsSpecialTime(o.getIsSpecialTime());
if (StringUtils.isNotEmpty(o.getMultipleOrders())) {
List<OrderInfoEntity> byMultipleOrders = orderInfoDao.findByMultipleOrders(o.getMultipleOrders());
List<OrderServiceList> multipleItems = new ArrayList<>();
for (OrderInfoEntity info : byMultipleOrders) {
multipleItems.add(toMultipleOrders(info, branchNames, engineerNames));
}
record.setMultipleOrderList(multipleItems);
}
content.add(record);
}
......@@ -161,6 +174,50 @@ public class OrderServiceListServiceImpl implements OrderServiceListService {
return Result.success(res);
}
private OrderServiceList toMultipleOrders(OrderInfoEntity o, Map<String, String> branchNames, Map<String, String> engineerNames) {
OrderServiceList record = new OrderServiceList();
record.setOrderId(o.getOrderId());
record.setType(o.getType());
record.setBrand(o.getBrand());
record.setSkill(o.getSkill());
record.setTakeTime(o.getTakeTime());
record.setFaultDescribe(o.getFaultDescribe());
record.setName(o.getName());
record.setPhone(o.getPhone());
record.setAddress(String.format("%s-%s-%s", o.getCity(), o.getCounty(), o.getAddress()));
record.setX(o.getX());
record.setY(o.getY());
record.setSource(o.getSource());
record.setDescription(o.getDescription());
record.setPriority(o.getPriority());
record.setOrgBranchName(branchNames.getOrDefault(o.getOrgBranchId(), ""));
// 获取工程师信息,为派工为空
if (StringUtils.isNotBlank(o.getEngineerCode())) {
List<String> names = this.getOrderEngineerNames(o.getEngineerCode(), o.getEngineerCodeSub(), engineerNames);
record.setEngineerNum(names.size()); //工程师数量
record.setEngineerNames(String.join("、", names)); //工程师姓名列表
}
record.setExpectTimeBegin(TimeUtils.IsoLocalDateTime2String(o.getExpectTimeBegin()));
record.setExpectTimeEnd(TimeUtils.IsoLocalDateTime2String(o.getExpectTimeEnd()));
record.setExpectTimeDesc(o.getExpectTimeDesc());
record.setAppointmentType(o.getAppointmentMethod());
record.setAppointmentStatus(o.getAppointmentStatus());
record.setOrderStatus(o.getOrderStatus());
record.setServiceStatus(o.getServiceStatus());
record.setDispatcher(o.getDispatcher());
record.setCreateTime(TimeUtils.IsoLocalDateTime2String(o.getCreateTime()));
record.setBeanPriority(o.getBeanPriority());
record.setIsMultiple(o.getIsMultiple());
record.setIsAppointEngineer(o.getIsAppointEngineer());
record.setAppointEngineerCodes(o.getAppointEngineerCodes());
record.setMultipleOrders(o.getMultipleOrders());
record.setTranscend(o.getTranscend());
return record;
}
private Map<String, String> getEngineerNames(List<OrderInfo> orders) {
// 获取技术员姓名
Set<String> engineerCodes = new HashSet<>();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!