public Map<String, Object> getOrderTrack(long custOrderId) {
List<Node> Nodes = new ArrayList<>();
List<Edge> Edges = new ArrayList<>();
List<DwdOdmOrderLinkInstLevel> list = new ArrayList<>();
//获取订单状态
int orderCount = orderTrackNewMapper.getOrderStatus(custOrderId);
//获取订单受理流程
if(orderCount > 0){ //如果订单状态是终结并且超过一天
list = orderTrackNewMapper.getHisCustInfoByCustOrderId(custOrderId);
}else{
list = orderTrackNewMapper.getCustInfoByCustOrderId(custOrderId);
}
//按照linkSecondName进行分组
Map<String, List<DwdOdmOrderLinkInstLevel>> linkSecondNameGroup = list.stream().collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getLinkSecondName));
//按照linkSecondName进行去重
list = distinctByLinkSecondStartTime(list);
//去重后,重新进行排序
list.sort(Comparator.comparing(DwdOdmOrderLinkInstLevel::getLinkThreeCode).thenComparing(DwdOdmOrderLinkInstLevel::getStartTime));
//获取订单上传前一个节点的code
Long upLoadLinkSecondCodeBefore = 0L;
if (list.stream().anyMatch(o -> o.getLinkSecondCode() == 102000)) {
//去除订单拆分节点
list = list.stream()
.filter(o -> o.getLinkSecondCode() != 102000)
.collect(Collectors.toList());
Optional<Long> min = list.stream()
.map(DwdOdmOrderLinkInstLevel::getLinkSecondCode)
.filter(o -> o < 108000)
.min(Long::compareTo);
if (min.isPresent()) {
upLoadLinkSecondCodeBefore = min.get();
}
}
//受理流程节点添加,画线
for (int i = 0; i < list.size(); i++) {
DwdOdmOrderLinkInstLevel temp = list.get(i);
Node node = new Node();
node.setId(temp.getLinkSecondCode().toString());
node.setLabel(temp.getLinkSecondName());
node.setStatus(temp.getLinkState());
if (temp.getLinkSecondCode() == upLoadLinkSecondCodeBefore) {
node.setUpload(true);
} else {
node.setUpload(false);
}
node.setComboId("A");
// node.setCustWorkSheetId(temp.getCustWorksheetId());
// node.setLinkSecondeCode(temp.getLinkSecondCode());
node.setOriginInfo(OrderTrackNewServiceImpl.getOrgInfo(linkSecondNameGroup.get(temp.getLinkSecondName())));
Nodes.add(node);
//画线
if (i != list.size() - 1) {
Edges.add(new Edge(temp.getLinkSecondCode().toString(), list.get(i + 1).getLinkSecondCode().toString()));
}
}
//获取全部crm产品环节,按照linkSecondCode去重,并按照orderItemId进行分组
List<DwdOdmOrderLinkInstLevel> crmList = new ArrayList<>();
if(orderCount > 0){ //如果订单状态是终结并且超过一天
crmList = Optional.ofNullable(orderTrackNewMapper.getHisAllProPAndNum(custOrderId, null)).orElse(new ArrayList<>());
}else{
crmList = Optional.ofNullable(orderTrackNewMapper.getAllProPAndNum(custOrderId, null)).orElse(new ArrayList<>());
}
int sendToOpenCount = 0;
int unSendToOpenCount = 0;
if (CollectionUtils.isNotEmpty(crmList)) {
List<String> sendToOpen;
List<String> unSendToOpen;
// 获取开通和未送开通的订单项目
sendToOpen = crmList.stream()
.filter(temp -> ("1".equals(temp.getWorksheetType()) && temp.getAccNum() != null))
.map(temp -> temp.getAccNum())
.distinct()
.collect(Collectors.toList());
unSendToOpen = crmList.stream()
.filter(temp -> ("2".equals(temp.getWorksheetType()) && temp.getAccNum() != null))
.map(temp -> temp.getAccNum())
.distinct()
.collect(Collectors.toList());
//获取全部未开通环节
Map<Long, List<DwdOdmOrderLinkInstLevel>> map = crmList.stream()
.filter(temp -> ("2".equals(temp.getWorksheetType())))
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getOrderItemId));
//全部的crm环节(开通环节未去重) -- 用于计算开始和结束时间
Map<Long, List<DwdOdmOrderLinkInstLevel>> crmListTemplate = crmList.stream()
.filter(temp -> temp.getLinkThreeCode() != null && "1".equals(temp.getWorksheetType()))
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getOrderItemId));
//按先二级环节code,后开始时间进行排序
for (List<DwdOdmOrderLinkInstLevel> temp : crmListTemplate.values()) {
Collections.sort(temp, Comparator.comparing(DwdOdmOrderLinkInstLevel::getLinkSecondCode).thenComparing(DwdOdmOrderLinkInstLevel::getStartTime));
}
// 按照linkSecondName进行去重
// crmList = distinctByLinkSecondName(crmList);
// 按照accNum进行分组
Map<String, List<DwdOdmOrderLinkInstLevel>> crmMap = crmList.stream()
.filter(temp -> temp.getLinkThreeCode() != null && "1".equals(temp.getWorksheetType()) && temp.getAccNum() != null)
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getAccNum));
// 按照accNum进行分组,未送开通
Map<String, List<DwdOdmOrderLinkInstLevel>> crmMapUn = crmList.stream()
.filter(temp -> temp.getLinkThreeCode() != null && "2".equals(temp.getWorksheetType()) && temp.getAccNum() != null)
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getAccNum));
if (CollectionUtils.isNotEmpty(sendToOpen)) {
Node nodeBeginOpen = new Node("999", "CRM订单送开通", "1", false, "B", false);
Edges.add(new Edge(list.get(list.size() - 1).getLinkSecondCode().toString(), "999"));
Nodes.add(nodeBeginOpen);
}
if (CollectionUtils.isNotEmpty(unSendToOpen)) {
Node nodeBeginUnOpen = new Node("1000", "CRM订单未送开通", "1", false, "B", false);
Edges.add(new Edge(list.get(list.size() - 1).getLinkSecondCode().toString(), "1000"));
Nodes.add(nodeBeginUnOpen);
}
//crm订单送开通构建
//遍历所有1300()
for (String accNum : sendToOpen) {
//查不到产品项目时直接跳过
if (CollectionUtils.isEmpty(crmMap.get(accNum))) {
continue;
}
//获得该产品的所有节点
List<DwdOdmOrderLinkInstLevel> tempList = crmMap.get(accNum);
//再根据 orderItemId分组,
Map<Long, List<DwdOdmOrderLinkInstLevel>> crmMapOrderItemId = tempList.stream()
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getOrderItemId));
//分组后对linkSecondName进行去重
for (Map.Entry<Long, List<DwdOdmOrderLinkInstLevel>> entry : crmMapOrderItemId.entrySet()) {
List<DwdOdmOrderLinkInstLevel> unOrderList = distinctByLinkSecondStartTime(entry.getValue());
// 先将绿色已完成的节点排到最前面,再按照二级环节code,后开始时间进行排序
unOrderList.sort(Comparator
.comparingInt((DwdOdmOrderLinkInstLevel each) ->
StringUtils.equals(each.getLinkState(), "1")
&& !StringUtils.equals(each.getLinkSecondCode().toString(), "202000")
&& !StringUtils.equals(each.getCodeVal(), "401400")
&& !StringUtils.containsAny(each.getCodeName(), "作废", "撤单")
? 0 : 1)
.thenComparing(DwdOdmOrderLinkInstLevel::getLinkSecondCode)
.thenComparing(DwdOdmOrderLinkInstLevel::getStartTime));
// unOrderList.sort(Comparator
// .comparing(DwdOdmOrderLinkInstLevel::getLinkSecondCode)
// .thenComparing(DwdOdmOrderLinkInstLevel::getStartTime));
entry.setValue(unOrderList);
}
//根据crmMapOrderItemId这个Map的大小来判断是不是含有多个手机号
sendToOpenCount = sendToOpenCount + crmMapOrderItemId.size();
if (crmMapOrderItemId.size() > 1) {
//说明有多个节点,需要进行拆分,首先添加分界点,注意这里使用的是accNum作为节点链接依据
Node nodeBranch = new Node(accNum, accNum, "1", false, "B", true);
Edges.add(new Edge("999", accNum));
//添加产品信息
Product productBranch = new Product();
productBranch.setProductName(tempList.get(0).getOfferName());
productBranch.setState("1");
nodeBranch.setProduct(productBranch);
Nodes.add(nodeBranch);
for (Map.Entry<Long, List<DwdOdmOrderLinkInstLevel>> entry : crmMapOrderItemId.entrySet()) {
Long key = entry.getKey(); // 获取键
List<DwdOdmOrderLinkInstLevel> value = entry.getValue(); // 获取值
// 遍历值(List<DwdOdmOrderLinkInstLevel>)
Edges.add(new Edge(accNum, value.get(0).getLinkSecondCode().toString() + "[" + key + "]"));
for (int i = 0; i < value.size(); i++) {
DwdOdmOrderLinkInstLevel temp = value.get(i);
Node node = new Node();
node.setId(temp.getLinkSecondCode().toString() + "[" + key + "]");
node.setCustOrderId(temp.getCustOrderId());
node.setLabel(temp.getLinkSecondName());
node.setStatus(temp.getLinkState());
node.setUpload(false);
node.setComboId("B");
node.setCustWorkSheetId(temp.getCustWorksheetId());
node.setLinkSecondeCode(temp.getLinkSecondCode());
//撤单,作废判断
if (temp.getCodeName().contains("作废") || temp.getCodeName().contains("撤单")) {
node.setIsGrey(true);
}
//待装
if ("202000".equals(temp.getLinkSecondCode().toString())) {
node.setErrorType("待装");
}
//退单
if ("401400".equals(temp.getCodeVal())) {
node.setErrorType("退单");
}
//第一个节点附加产品的基本信息
if (i == 0) {
Product product = new Product();
product.setProductName(temp.getServiceOfferName());
product.setState(value.get(value.size() - 1).getLinkState());
node.setProduct(product);
}
// 产品开通流程每一个节点都增加基本信息
Product titleInfo = new Product();
titleInfo.setProductName(temp.getOfferName() + "[" + temp.getServiceOfferName() + "]" + "[" + temp.getAccNum() + "]");
titleInfo.setState(value.get(value.size() - 1).getLinkState());
node.setTitleInfo(titleInfo);
Map<String, List<DwdOdmOrderLinkInstLevel>> collect = crmMapOrderItemId.get(key).
stream().collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getLinkSecondName));
node.setOriginInfo(OrderTrackNewServiceImpl.getOrgInfo(collect.get(temp.getLinkSecondName())));
Nodes.add(node);
//画线
if (i != value.size() - 1) {
Edges.add(new Edge(temp.getLinkSecondCode().toString() + "[" + key + "]",
value.get(i + 1).getLinkSecondCode().toString() + "[" + key + "]"));
}
}
}
} else {
//这里map中只有一个key
for (Map.Entry<Long, List<DwdOdmOrderLinkInstLevel>> entry : crmMapOrderItemId.entrySet()) {
Long orderItemId = entry.getKey(); // 获取键
List<DwdOdmOrderLinkInstLevel> tempListOne = entry.getValue();
//说明没有根据手机号的分支,这时逻辑与原来保持一致,这里连线使用的是orderItemId
Edges.add(new Edge("999", tempListOne.get(0).getLinkSecondCode().toString() + "[" + orderItemId + "]"));
for (int i = 0; i < tempListOne.size(); i++) {
DwdOdmOrderLinkInstLevel temp = tempListOne.get(i);
Node node = new Node();
node.setId(temp.getLinkSecondCode().toString() + "[" + orderItemId + "]");
node.setCustOrderId(temp.getCustOrderId());
node.setLabel(temp.getLinkSecondName());
node.setStatus(temp.getLinkState());
node.setUpload(false);
node.setComboId("B");
node.setCustWorkSheetId(temp.getCustWorksheetId());
node.setLinkSecondeCode(temp.getLinkSecondCode());
//撤单,作废判断
if (temp.getCodeName().contains("作废") || temp.getCodeName().contains("撤单")) {
node.setIsGrey(true);
}
//待装
if ("202000".equals(temp.getLinkSecondCode().toString())) {
node.setErrorType("待装");
}
//退单
if ("401400".equals(temp.getCodeVal())) {
node.setErrorType("退单");
}
//第一个节点附加产品的基本信息
if (i == 0) {
Product product = new Product();
product.setProductName(temp.getOfferName() + "[" + temp.getServiceOfferName() + "]" + "[" + temp.getAccNum() + "]");
product.setState(tempListOne.get(tempListOne.size() - 1).getLinkState());
node.setProduct(product);
}
// 产品开通流程每一个节点都增加基本信息
Product titleInfo = new Product();
titleInfo.setProductName(temp.getOfferName() + "[" + temp.getServiceOfferName() + "]" + "[" + temp.getAccNum() + "]");
titleInfo.setState(tempListOne.get(tempListOne.size() - 1).getLinkState());
node.setTitleInfo(titleInfo);
Map<String, List<DwdOdmOrderLinkInstLevel>> collect = crmListTemplate.get(orderItemId).
stream().collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getLinkSecondName));
node.setOriginInfo(OrderTrackNewServiceImpl.getOrgInfo(collect.get(temp.getLinkSecondName())));
Nodes.add(node);
//画线
if (i != tempListOne.size() - 1) {
Edges.add(new Edge(temp.getLinkSecondCode().toString() + "[" + orderItemId + "]",
tempListOne.get(i + 1).getLinkSecondCode().toString() + "[" + orderItemId + "]"));
}
}
}
}
}
//crm订单未送开通
for (String accNum : unSendToOpen) {
//查不到产品项目时直接跳过
if (CollectionUtils.isEmpty(crmMapUn.get(accNum))) {
continue;
}
//获得该产品的所有节点
List<DwdOdmOrderLinkInstLevel> tempList = crmMapUn.get(accNum);
//再根据 orderItemId分组,
Map<Long, List<DwdOdmOrderLinkInstLevel>> crmMapUnOrderItemId = tempList.stream()
.collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getOrderItemId));
unSendToOpenCount = unSendToOpenCount + crmMapUnOrderItemId.size();
if (crmMapUnOrderItemId.size() > 1) {
//说明有多个节点,需要进行拆分,首先添加分界点,注意这里使用的是accNum作为节点链接依据
Node nodeBranch = new Node(accNum + "B", accNum, "1", false, "B", true);
//添加产品信息
Product productBranch = new Product();
productBranch.setProductName(tempList.get(0).getOfferName());
productBranch.setState("1");
nodeBranch.setProduct(productBranch);
Edges.add(new Edge("1000", accNum + "B"));
Nodes.add(nodeBranch);
for (Map.Entry<Long, List<DwdOdmOrderLinkInstLevel>> entry : crmMapUnOrderItemId.entrySet()) {
Long key = entry.getKey(); // 获取键
List<DwdOdmOrderLinkInstLevel> value = entry.getValue(); // 获取值
// 遍历值(List<DwdOdmOrderLinkInstLevel>)
Edges.add(new Edge(accNum + "B", value.get(0).getOrderItemId().toString() + "[" + key + "]"));
Node node = new Node();
node.setId(value.get(0).getOrderItemId().toString() + "[" + key + "]");
node.setLabel(value.get(0).getLinkSecondName());
node.setStatus(value.get(0).getLinkState());
node.setCustOrderId(value.get(0).getCustOrderId());
node.setCustWorkSheetId(value.get(0).getCustWorksheetId());
node.setLinkSecondeCode(value.get(0).getLinkSecondCode());
//撤单,作废判断
if (value.get(0).getCodeName().contains("作废") || value.get(0).getCodeName().contains("撤单")) {
node.setIsGrey(true);
}
//待装
if ("202000".equals(value.get(0).getLinkSecondCode().toString())) {
node.setErrorType("待装");
}
//退单
if ("401400".equals(value.get(0).getCodeVal())) {
node.setErrorType("退单");
}
node.setUpload(false);
OriginInfoDto originInfoDto = new OriginInfoDto();
originInfoDto.setHs("-");
node.setOriginInfo(originInfoDto);
node.setComboId("B");
//添加产品信息
Product product = new Product();
product.setProductName(value.get(0).getServiceOfferName());
product.setState("1");
node.setProduct(product);
Nodes.add(node);
}
} else {
Edges.add(new Edge("1000", tempList.get(0).getOrderItemId().toString()));
Node node = new Node();
node.setId(tempList.get(0).getOrderItemId().toString());
node.setLabel(tempList.get(0).getLinkSecondName());
node.setStatus(tempList.get(0).getLinkState());
node.setCustOrderId(tempList.get(0).getCustOrderId());
node.setCustWorkSheetId(tempList.get(0).getCustWorksheetId());
node.setLinkSecondeCode(tempList.get(0).getLinkSecondCode());
//撤单,作废判断
if (tempList.get(0).getCodeName().contains("作废") || tempList.get(0).getCodeName().contains("撤单")) {
node.setIsGrey(true);
}
//待装
if ("202000".equals(tempList.get(0).getLinkSecondCode().toString())) {
node.setErrorType("待装");
}
//退单
if ("401400".equals(tempList.get(0).getCodeVal())) {
node.setErrorType("退单");
}
node.setUpload(false);
OriginInfoDto originInfoDto = new OriginInfoDto();
originInfoDto.setHs("-");
node.setOriginInfo(originInfoDto);
node.setComboId("B");
//添加产品信息
Product product = new Product();
product.setProductName(tempList.get(0).getOfferName() + "[" + tempList.get(0).getAccNum() + "]");
product.setState("1");
node.setProduct(product);
Nodes.add(node);
}
//连接未送开通节点和后续的产品的第一个节点
//Edges.add(new Edge("1000", tempList.get(0).getLinkSecondCode().toString()+"["+orderItemId+"]"));
}
} else {
DwdOdmOrderLinkInstLevel withoutEnabledWorkflow = new DwdOdmOrderLinkInstLevel();
if(orderCount > 0){//如果订单状态是终结并且超过一天
withoutEnabledWorkflow = orderTrackNewMapper.findHisWithoutEnabledWorkflow(custOrderId);
}else{
withoutEnabledWorkflow = orderTrackNewMapper.findWithoutEnabledWorkflow(custOrderId);
}
if (withoutEnabledWorkflow != null) {
Node node = new Node();
String id = withoutEnabledWorkflow.getOrderItemId() == null ? IdUtil.fastSimpleUUID() : withoutEnabledWorkflow.getOrderItemId().toString();
node.setId("Special[" + id + "]");
node.setLabel(withoutEnabledWorkflow.getLinkSecondName());
node.setStatus(withoutEnabledWorkflow.getLinkState());
node.setCustOrderId(withoutEnabledWorkflow.getCustOrderId());
node.setCustWorkSheetId(withoutEnabledWorkflow.getCustWorksheetId());
node.setLinkSecondeCode(withoutEnabledWorkflow.getLinkSecondCode());
node.setIsGrey(false);
//撤单,作废判断
// if (withoutEnabledWorkflow.getCodeName().contains("作废") || withoutEnabledWorkflow.getCodeName().contains("撤单")) {
// }
//待装
if ("202000".equals(withoutEnabledWorkflow.getLinkSecondCode().toString())) {
node.setErrorType("待装");
}
//退单
if ("401400".equals(withoutEnabledWorkflow.getCodeVal())) {
node.setErrorType("退单");
}
node.setUpload(false);
// OriginInfoDto originInfoDto = new OriginInfoDto();
// originInfoDto.setHs("-");
node.setOriginInfo(getOrgInfo(Lists.newArrayList(withoutEnabledWorkflow)));
node.setComboId("B");
//添加产品信息
// Product product = new Product();
// product.setProductName(withoutEnabledWorkflow.getOfferName() + "[" + withoutEnabledWorkflow.getAccNum() + "]");
// product.setState("1");
// node.setProduct(product);
Nodes.add(node);
String newSource = Edges.get(Edges.size() - 1).getTarget();
Edges.add(new Edge(newSource, node.getId()));
}
}
//添加开始节点的信息
Node startNode = new Node();
startNode.setId("0");
startNode.setLabel("开始");
startNode.setStatus("1");
if (sendToOpenCount < 1 && unSendToOpenCount < 1) {
startNode.setFlowCount(1);
} else {
startNode.setFlowCount(sendToOpenCount + unSendToOpenCount);
}
//只有订单上传节点
if (Nodes.size() == 0) {
startNode.setUpload(true);
}
ViewCustomerOrderInfo msg = Optional.ofNullable(orderTrackNewMapper.nodeBeginOriginMsg(custOrderId)).orElse(new ViewCustomerOrderInfo());
OriginInfoDto originInfo = new OriginInfoDto();
originInfo.setOrigin(StringUtils.isNotEmpty(msg.getSysSourceName()) ? msg.getSysSourceName() : "-");
originInfo.setAcceptTime(msg.getAcceptDate());
originInfo.setAcceptAccount("xxxxxxx");
originInfo.setAcceptPerson(StringUtils.isNotEmpty(msg.getCreateStaffName()) ? msg.getCreateStaffName() : "-");
originInfo.setAcceptDept(StringUtils.isNotEmpty(msg.getCreateOrgName()) ? msg.getCreateOrgName() : "-");
originInfo.setDevelopPerson(StringUtils.isNotEmpty(msg.getDeveloperInfo()) ? msg.getDeveloperInfo() : "-");
originInfo.setEnviroment("YA");
// 设置label
startNode.setChannelName(StringUtils.isNotEmpty(msg.getChannelName()) ? msg.getChannelName() : "");
startNode.setOriginInfo(originInfo);
// 节点查不出信息时不添加开始节点
if (Nodes.size() > 0) {
Nodes.add(0, startNode);
}
//画线信息
if (Nodes.size() > 1) {
Edges.add(0, new Edge("0", Nodes.get(1).getId()));
}
//组装返回结果
Map<String, Object> res = new HashMap<>();
res.put("nodes", Nodes);
res.put("edges", Edges);
return res;
}
public List<DwdOdmOrderLinkInstLevel> distinctByLinkSecondStartTime(List<DwdOdmOrderLinkInstLevel> list) {
List<DwdOdmOrderLinkInstLevel> tempList = new ArrayList<>();
//排序
list.sort(Comparator.comparing(DwdOdmOrderLinkInstLevel::getStartTime, Comparator.reverseOrder()));
//二级名称分组
Map<String, List<DwdOdmOrderLinkInstLevel>> collect = list.stream().collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getLinkSecondName));
//按照linkSecondName进行去重
Set<String> set = new HashSet<>();
for (DwdOdmOrderLinkInstLevel link : list) {
//没有名字,直接加入
if (!set.contains(link.getLinkSecondName())) {
//获取最早开始和最晚结束
OriginInfoDto orgInfo = getOrgInfo(collect.get(link.getLinkSecondName()));
//分组后的二级环节name只有一个三级环节,取最新时间的实例属性
if (collect.get(link.getLinkSecondName()).size() < 2) {
link.setStartTime(orgInfo.getStartTime());
link.setEndTime(orgInfo.getEndTime());
set.add(link.getLinkSecondName());
tempList.add(link);
} else {
//分组后的二级环节name有多个三级环节,取先时间后状态排序级别最高的实例属性
DwdOdmOrderLinkInstLevel highLink = getHighLevelLink(collect.get(link.getLinkSecondName()));
highLink.setStartTime(orgInfo.getStartTime());
highLink.setEndTime(orgInfo.getEndTime());
set.add(highLink.getLinkSecondName());
tempList.add(highLink);
}
}
}
list = tempList;
return list;
}
public static OriginInfoDto getOrgInfo(List<DwdOdmOrderLinkInstLevel> list) {
OriginInfoDto originInfo = new OriginInfoDto();
originInfo.setMsg("");
Date start = null;
Date end = null;
boolean hasNullEndTime = false;
for (DwdOdmOrderLinkInstLevel level : list) {
// 获取开始时间
Date currentStart = level.getStartTime();
if (currentStart != null) {
if (start == null || currentStart.before(start)) {
start = currentStart;
}
}
// 获取结束时间
Date currentEnd = level.getEndTime();
if (currentEnd == null) {
hasNullEndTime = true;
} else if (!hasNullEndTime) {
if (end == null || currentEnd.after(end)) {
end = currentEnd;
}
}
//满意度回访设置
if (NullUtil.isNotNull(level.getServiceAttitude())) {
originInfo.setServiceAttitude(level.getServiceAttitude());
}
String processor = StringUtils.isNotBlank(level.getReadyFiled3()) ? level.getReadyFiled3() : level.getPartySys();
if (StringUtils.isNotBlank(processor)) {
originInfo.setProcessor(processor.trim());
}
}
if (hasNullEndTime) {
end = null;
}
originInfo.setLabel(list.get(0).getLinkSecondName());
// 特判,CRM竣工、订单拆分处理人
if (StringUtils.equals(originInfo.getLabel(), "CRM竣工")) {
originInfo.setProcessor("CRM竣工");
}
if (StringUtils.equals(originInfo.getLabel(), "订单拆分")) {
originInfo.setProcessor("订单拆分");
}
originInfo.setStartTime(start);
originInfo.setEndTime(end);
originInfo.setMsg(list.get(list.size() - 1).getStatement());
if (end == null) {
end = start;
}
originInfo.setHs(OrderTrackNewServiceImpl.formatDuration(start, end));
return originInfo;
}
public static DwdOdmOrderLinkInstLevel getHighLevelLink(List<DwdOdmOrderLinkInstLevel> list) {
DwdOdmOrderLinkInstLevel highLevelLink = new DwdOdmOrderLinkInstLevel();
List<DwdOdmOrderLinkInstLevel> tempList = new ArrayList<>();
//三级名称分组
Map<String, List<DwdOdmOrderLinkInstLevel>> collect = list.stream().collect(Collectors.groupingBy(DwdOdmOrderLinkInstLevel::getLinkThreeName));
//分组后对每组按最新时间排序
for (Map.Entry<String, List<DwdOdmOrderLinkInstLevel>> entry : collect.entrySet()) {
List<DwdOdmOrderLinkInstLevel> newList = entry.getValue();
String ORDER_SPLIT="订单拆分";
// 特殊处理二级标题为订单拆分的,如果二级标题为订单拆分那么三级标题全部都是订单拆分
boolean orderSplitFlag = collect.size() == 1 && Objects.equals(ORDER_SPLIT, entry.getKey());
if (orderSplitFlag) {
Map<String, Integer> priorityMap = new HashMap<>();
priorityMap.put("9", 1); // 异常 最高优先级
priorityMap.put("7", 2); // 超时
priorityMap.put("0", 3); // 进行中
priorityMap.put("1", 4); // 已完成 最低优先级
newList.sort(Comparator.comparingInt(o -> priorityMap.get(o.getLinkState())));
} else {
//三级名称分组再按时间排序
newList.sort(Comparator.comparing(DwdOdmOrderLinkInstLevel::getStartTime, Comparator.reverseOrder()).
thenComparing(o -> getPriority(o.getLinkState())));
}
//取按时间排序后的第一位
tempList.add(newList.get(0));
}
if (collect.size() > 1 && CollectionUtils.isNotEmpty(tempList)) {
//再按状态进行二次排序
Collections.sort(tempList, new Comparator<DwdOdmOrderLinkInstLevel>() {
@Override
public int compare(DwdOdmOrderLinkInstLevel o1, DwdOdmOrderLinkInstLevel o2) {
Map<String, Integer> priorityMap = new HashMap<>();
//1 已完成 , 0 进行中 , 7 超时, 9 异常
priorityMap.put("9", 1); // 最高优先级
priorityMap.put("7", 2);
priorityMap.put("0", 3);
priorityMap.put("1", 4); // 最低优先级
// 获取对象的状态并获取其优先级
int priority1 = priorityMap.getOrDefault(o1.getLinkState(), 0);
int priority2 = priorityMap.getOrDefault(o2.getLinkState(), 0);
// 按照优先级比较
return Integer.compare(priority1, priority2);
}
});
}
highLevelLink = tempList.get(0);
return highLevelLink;
}
详细解释这代码
最新发布