dark cmd d.bat v isgrey(编写ing)

dark cmd工具介绍及功能更新
本文介绍了dark cmd工具,它借用Windows自身及网上cmd小工具实现便捷功能。d.bat正式改名为dark cmd,开发核心转向XP和2003。明确启用netcat和scanner两个外部程序,更新增加asp木马、多种写shell方法等,还将XP下cmd命令转换到dark cmd。
关于dark cmd

这个工具是借用了windows自身的一些工具以及 网上的一些小工具(cmd下的)
实现一些比较方便的功能

据说灰色要重开了 所以就重写一个d.bat来祝贺一下吧 以后的d.bat 会向着 hack cmdtools的方向发展

d.bat 也正式改名为 dark cmd 为了方便使用 程序仍为d.bat 而不是dc.bat 就此说明

程序也将把开发核心从2K转向XP以及2003 因此可能会有一部分命令受到限制
请尽量使用XP或者2003

这次明确启用的外部程序清单:
1.netcat(NC)
2.scanner(wineggdrop/hotmail)
这两个程序将捆绑在压缩包内 特此感谢wineggdrop(hotmail) 编写的scanner

程序相对于d.bat v ILBF (未曾发布) 的更新

不再使用大小写区分开关命令 而是采用+-符号
增加asp的木马
增加假如我比对方还有bt一文中的 几种写shell方法
增加darkcmd.ini配置文件
增加darkcmd.tmp临时文件
完整的ftp脚本下载
各项原有功能可以进行更灵活的定制


dc v isgrey (dark cmd) 主要功能预览
1.dir列出目录及文件信息
2.通过ip地址以及计算机名查看对方信息
3.winnt消息炸弹
4.cgi asp木马导出
5.删除指定文件以及文件夹
6.隐藏指定文件以及文件夹
7.cmd下写shell
8.生成完整的ftp脚本
9.更改tftp端口
10.mix的不死帐号
11.scanner 超强的扫描
12.NC的全部功能
13.查看端口信息
14.彩蛋

PS:由于开发平台转向XP 所以XP下的所有cmd可以使用的命令将全部被转换到
简洁命令到dark cmd里面

最后不得不说一下windows下cmd的悲哀
众多人 已经不知bat批处理为何物 每每看到linux shell的强大 不由感叹万分
由于国内杂志及论坛的引导 bat仅被等同于几条简单的入侵命令
net use/net user
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; } 详细解释这代码
最新发布
08-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值