|
| 1 | +我优化的后的代码。 |
| 2 | +protected void setScanRangeV2(CrsDivisionDTO scanDivision, T detail,TagInfo tagInfo) { |
| 3 | +List<DealerDivisionRelationDTO> dealerDivisionRelations = getCrsDealerSaleAreaUsesDto(detail,tagInfo); |
| 4 | +[log.info](http://log.info/)("扫码人关联的经销的行政区划信息:{} \n 扫码人的行政区划信息:{}",JsonUtil.toJson(dealerDivisionRelations),JsonUtil.toJson(scanDivision)); |
| 5 | +detail.setScanRange(checkManagementFence(scanDivision,dealerDivisionRelations) ? IN_RANGE : OUT_OF_RANGE); |
| 6 | +} |
| 7 | +private boolean checkManagementFence(CrsDivisionDTO scanDivision, List<DealerDivisionRelationDTO> dealerDivisionRelationDTOList) { |
| 8 | +return dealerDivisionRelationDTOList.stream() |
| 9 | +.anyMatch(dealerDivisionRelationDTO -> isEqualConditional(dealerDivisionRelationDTO, scanDivision)); |
| 10 | +} |
| 11 | +private boolean isEqualConditional(DealerDivisionRelationDTO dealerDivisionRelationDTO, CrsDivisionDTO scanDivision) { |
| 12 | +return isEqualConditionalHelper(dealerDivisionRelationDTO.getProvinceCode(), scanDivision.getProvinceCode(), dealerDivisionRelationDTO.getCityCode()) || |
| 13 | +isEqualConditionalHelper(dealerDivisionRelationDTO.getCityCode(), scanDivision.getCityCode(), dealerDivisionRelationDTO.getCountyCode()) || |
| 14 | +isEqualConditionalHelper(dealerDivisionRelationDTO.getCountyCode(), scanDivision.getCountyCode(), dealerDivisionRelationDTO.getStreetCode()) || |
| 15 | +isEqualConditionalHelper(dealerDivisionRelationDTO.getStreetCode(), scanDivision.getStreetCode(), ""); |
| 16 | +} |
| 17 | +private boolean isEqualConditionalHelper(String field1, String field2, String field3) { |
| 18 | +return StringUtils.isNotBlank(field1) && field1.equals(field2) && StringUtils.isBlank(field3); |
| 19 | +} |
| 20 | + |
| 21 | +优化之前的代码 |
| 22 | +public static void judgeSalesAreaIfMatch(List<SaleAreaDTO> scanSalesAreaDTOList, CrsDealerSaleAreaUsesDto crsDealerSaleAreaUsesDto) { |
| 23 | +[log.info](http://log.info/)("流向分类(销售五段)判定saleAreaDTOList:{},crsDealerSaleAreaUsesDto:{}", scanSalesAreaDTOList, crsDealerSaleAreaUsesDto); |
| 24 | +List<SaleAreaUsesDto> saleAreaDTOList = crsDealerSaleAreaUsesDto.getSaleAreaUsesDtoList(); |
| 25 | +if (CollectionUtils.isEmpty(scanSalesAreaDTOList)) { |
| 26 | +return; |
| 27 | +} |
| 28 | +Set<String> l2DealerSalesAreaSet = saleAreaDTOList.stream().map(SaleAreaUsesDto::getL2SaleAreaCode).collect(Collectors.toSet()); |
| 29 | +Set<String> l2ScanSalesAreaSet = scanSalesAreaDTOList.stream().map(SaleAreaDTO::getL2SaleAreaCode).collect(Collectors.toSet()); |
| 30 | +boolean res1 = matchByLevel(l2DealerSalesAreaSet, l2ScanSalesAreaSet); |
| 31 | +//跨大区 |
| 32 | +if (!res1) { |
| 33 | +FlowDirectionJudgmentTool.getContext().setSaleAreaClassify(FlowDirectionSalesAreaEnum.CROSS_BIG_REGION); |
| 34 | +return; |
| 35 | +} |
| 36 | +Set<String> l3DealerSalesAreaSet = saleAreaDTOList.stream().map(SaleAreaUsesDto::getL3SaleAreaCode).collect(Collectors.toSet()); |
| 37 | +Set<String> l3ScanSalesAreaSet = scanSalesAreaDTOList.stream().map(SaleAreaDTO::getL3SaleAreaCode).collect(Collectors.toSet()); |
| 38 | +boolean res2 = matchByLevel(l3DealerSalesAreaSet, l3ScanSalesAreaSet); |
| 39 | +//跨区域 |
| 40 | +if (!res2) { |
| 41 | +FlowDirectionJudgmentTool.getContext().setSaleAreaClassify(FlowDirectionSalesAreaEnum.CROSS_AREA); |
| 42 | +return; |
| 43 | +} |
| 44 | +Set<String> l4DealerSalesAreaSet = saleAreaDTOList.stream().map(SaleAreaUsesDto::getL4SaleAreaCode).collect(Collectors.toSet()); |
| 45 | +Set<String> l4ScanSalesAreaSet = scanSalesAreaDTOList.stream().map(SaleAreaDTO::getL4SaleAreaCode).collect(Collectors.toSet()); |
| 46 | +boolean res3 = matchByLevel(l4DealerSalesAreaSet, l4ScanSalesAreaSet); |
| 47 | +//跨区域 |
| 48 | +if (!res3) { |
| 49 | +FlowDirectionJudgmentTool.getContext().setSaleAreaClassify(FlowDirectionSalesAreaEnum.CROSS_CITY_GROUP); |
| 50 | +return; |
| 51 | +} |
| 52 | +Set<String> l5DealerSalesAreaSet = saleAreaDTOList.stream().map(SaleAreaUsesDto::getL5SaleAreaCode).collect(Collectors.toSet()); |
| 53 | +Set<String> l5ScanSalesAreaSet = scanSalesAreaDTOList.stream().map(SaleAreaDTO::getL5SaleAreaCode).collect(Collectors.toSet()); |
| 54 | +boolean res4 = matchByLevel(l5DealerSalesAreaSet, l5ScanSalesAreaSet); |
| 55 | +//跨区域 |
| 56 | +if (!res4) { |
| 57 | +FlowDirectionJudgmentTool.getContext().setSaleAreaClassify(FlowDirectionSalesAreaEnum.CROSS_CITY); |
| 58 | +return; |
| 59 | +} |
| 60 | +FlowDirectionJudgmentTool.getContext().setSaleAreaClassify(FlowDirectionSalesAreaEnum.NORMAL); |
| 61 | + |
| 62 | +private static boolean matchByLevel(Set<String> dealerSalesAreaSet, Set<String> scanSalesAreaSet) { |
| 63 | + Set<String> resSet = scanSalesAreaSet.stream().filter(dealerSalesAreaSet::contains).collect(Collectors.toSet()); |
| 64 | + //这一段没有匹配的数据 |
| 65 | + return !CollectionUtils.isEmpty(resSet); |
| 66 | +} |
| 67 | +} |
0 commit comments