【Java 动态数据统计图】动态X轴二级数据统计图思路案例(动态,排序,动态数组(重点推荐:难))八(130)

news2024/11/19 8:53:41

需求

1.有一组数据集合,数据集合中的数据为动态;
举例如下:
[{province=陕西省, city=西安市}, {province=陕西省, city=咸阳市}, {province=陕西省, city=宝鸡市}, {province=陕西省, city=延安市}, {province=陕西省, city=汉中市}, {province=四川省, city=成都市}, {province=四川省, city=成都市}, {province=四川省, city=广元市}, {province=四川省, city=绵阳市}, {province=陕西省, city=西安市}, {province=陕西省, city=西安市}, {province=陕西省, city=宝鸡市}, {province=江苏省, city=南京市}, {province=江苏省, city=南京市}, {province=江苏省, city=扬州市}, {province=河北省, city=石家庄市}, {province=山东省, city=济南市}, {province=山东省, city=青岛市}, {province=山东省, city=烟台市}, {province=山东省, city=潍坊市}]
2.通过计算得出统计的数据;省按照大小排序,动态展示,城市按照大小排序,动态展示;

最终绘制如下:

在这里插入图片描述
在这里插入图片描述

备注::以下看到的函数名称大多是自定义封装的。

当前案例代码中需要用到的知识技能:

1.Set集合去重:Set hashSet = new HashSet<>();
2.Set集合转数组:String[] provinceArr = hashSet.toArray(new String[hashSet.size()]);
3.一维双数组排序:BubblSortUtils.bubbleSortDescMultiple(provinceSort,provinceArr);
4.创建集合数组(数组里面的元素为set集合):Set[] setArr = new Set[provinceArr.length];
5.创建二维数组(set集合数组转二维数组):String[][] stringArr = new String[provinceArr.length][];
6.二维数组,双数组根据第二维度排序:BubblSortUtils.bubbleSortDescMultiple2(countArr,stringArr);
7.String,Int数组间的互相转化;
8.百分比计算函数封装;
9.一维数组和二维数组组合:计算一维数组在二维中的中间位置;
10.返回数据封装:二维数组转一维数组;

Demo案例一:代码逻辑比较复杂,需耐心看!

package com.day01;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class day24 {
	public static void main(String[] args) {
		
		List<Map<String,Object>> list = new ArrayList<>();
		Map<String,Object> map1 = new HashMap<>();
		map1.put("province","陕西省");
		map1.put("city","西安市");
		Map<String,Object> map2 = new HashMap<>();
		map2.put("province","陕西省");
		map2.put("city","咸阳市");
		Map<String,Object> map3 = new HashMap<>();
		map3.put("province","陕西省");
		map3.put("city","宝鸡市");
		Map<String,Object> map4 = new HashMap<>();
		map4.put("province","陕西省");
		map4.put("city","延安市");
		Map<String,Object> map5 = new HashMap<>();
		map5.put("province","陕西省");
		map5.put("city","汉中市");
		Map<String,Object> map6 = new HashMap<>();
		map6.put("province","四川省");
		map6.put("city","成都市");
		Map<String,Object> map7 = new HashMap<>();
		map7.put("province","四川省");
		map7.put("city","成都市");
		Map<String,Object> map8 = new HashMap<>();
		map8.put("province","四川省");
		map8.put("city","广元市");
		Map<String,Object> map9 = new HashMap<>();
		map9.put("province","四川省");
		map9.put("city","绵阳市");
		Map<String,Object> map10 = new HashMap<>();
		map10.put("province","陕西省");
		map10.put("city","西安市");
		Map<String,Object> map11 = new HashMap<>();
		map11.put("province","陕西省");
		map11.put("city","西安市");
		Map<String,Object> map12 = new HashMap<>();
		map12.put("province","陕西省");
		map12.put("city","宝鸡市");
		Map<String,Object> map13 = new HashMap<>();
		map13.put("province","江苏省");
		map13.put("city","南京市");
		Map<String,Object> map14 = new HashMap<>();
		map14.put("province","江苏省");
		map14.put("city","南京市");
		Map<String,Object> map15 = new HashMap<>();
		map15.put("province","江苏省");
		map15.put("city","扬州市");
		Map<String,Object> map16 = new HashMap<>();
		map16.put("province","河北省");
		map16.put("city","石家庄市");
		Map<String,Object> map17 = new HashMap<>();
		map17.put("province","山东省");
		map17.put("city","济南市");
		Map<String,Object> map18 = new HashMap<>();
		map18.put("province","山东省");
		map18.put("city","青岛市");
		Map<String,Object> map19 = new HashMap<>();
		map19.put("province","山东省");
		map19.put("city","烟台市");
		Map<String,Object> map20 = new HashMap<>();
		map20.put("province","山东省");
		map20.put("city","潍坊市");
		
		list.add(map1);
		list.add(map2);
		list.add(map3);
		list.add(map4);
		list.add(map5);
		list.add(map6);
		list.add(map7);
		list.add(map8);
		list.add(map9);
		list.add(map10);
		list.add(map11);
		list.add(map12);
		list.add(map13);
		list.add(map14);
		list.add(map15);
		list.add(map16);
		list.add(map17);
		list.add(map18);
		list.add(map19);
		list.add(map20);
		
		System.out.println("入参数据:"+list);
		
		// 一:获取一级维度:
		// 创建Set集合:获取一级维度数据的数据集:去重
		Set<String> hashSet = new HashSet<>();
		
        for (int i = 0; i < list.size(); i++) {
            String province = String.valueOf(list.get(i).get("province"));
            hashSet.add(province);
        }
        // 创建一级维度省份数组:
        String[] provinceArr = new String[hashSet.size()];
        // 创建一级维度省份数量数组:
        int[] provinceSort = new int[hashSet.size()];
        
        // Set转数组
        if(list.size() > 0){
        	provinceArr = hashSet.toArray(new String[hashSet.size()]);
        }
        
        // 根据一级维度省份数组:计算一级维度省份数量数组;
        for (int i = 0; i < provinceArr.length; i++) {
            for (int j = 0; j < list.size(); j++) {
                if(provinceArr[i].equals(String.valueOf(list.get(j).get("province")))){
                	provinceSort[i] = provinceSort[i] + 1;
                }
            }
        }
        
        // 排序:一级维度省份数组;
        BubblSortUtils.bubbleSortDescMultiple(provinceSort,provinceArr); 
        
        // 封装集合测试输出:
        System.out.println("--------------------");
        List<Map<String,Object>> listFinal= new ArrayList<>();
        for (int i = 0; i < provinceArr.length; i++) {
            Map<String,Object> map = new HashMap<>();
            map.put("title",provinceArr[i]);
            map.put("value",provinceSort[i]);
            listFinal.add(map);
        }
        System.out.println("一级维度省份类型和数量:"+listFinal);
        
        // 二:获取二级维度:
        // 创建集合数组(数组里面的元素为set集合)
        Set[] setArr = new Set[provinceArr.length];
        // 创建二维数组(set集合数组转二维数组)
        String[][] stringArr = new String[provinceArr.length][];
        
        // 集合数组:获取二级维度城市类型数据的数据集:去重
        for (int i = 0; i < provinceArr.length; i++) {
        	Set<String> hashSet2 = new HashSet<>();
        	// 获取城市数组;
			for (int j = 0; j < list.size(); j++) {
				if(provinceArr[i].equals(String.valueOf(list.get(j).get("province")))){
					hashSet2.add(String.valueOf(list.get(j).get("city")));
                }
			}
			setArr[i] = hashSet2;
		}
        
        // 二维数组:set集合城市数组转二维城市数组;
        for (int i = 0; i < setArr.length; i++) {
        	Set<String> hashSet2 = setArr[i];
        	String[] provinceArr2 = new String[hashSet2.size()];
        	if(list.size() > 0){
        		provinceArr2 = hashSet2.toArray(new String[hashSet2.size()]);
            }
        	stringArr[i] = provinceArr2;
		}
        
        // 创建城市数量二维数组;
        String[][] countArr = new String[provinceArr.length][];
        
        // 二维数组:根据二维城市类型数组计算:二维城市数量数组;
        for (int i = 0; i < stringArr.length; i++) {
			String [] s = stringArr[i];
			String[] temp = new String[s.length];
			for (int j = 0; j < s.length; j++) {
				for (int k = 0; k < list.size(); k++) {
					if(s[j].equals(String.valueOf(list.get(k).get("city")))) {
						if(String.valueOf(temp[j]).equals("null")) {
							temp[j] = "1";
						}
						else {
							temp[j] = String.valueOf(Integer.valueOf(temp[j]) + 1);
						}
						
					}
				}
			}
			countArr[i] = temp;
		}
        // 数组排序:城市数组和数量数组排序;
        BubblSortUtils.bubbleSortDescMultiple2(countArr,stringArr);
        
        // 三:百分比二维数组:计算百分比
        String[][] percentageArr = new String[provinceArr.length][];
        int sum = list.size();
        for (int i = 0; i < countArr.length; i++) {
        	String [] s = countArr[i];
        	String[] temp = new String[s.length];
        	for (int j = 0; j < s.length; j++) {
				if(list.size() > 0) {
					temp[j] = percentageConversion(Integer.valueOf(s[j]),sum);
				}
			}
        	percentageArr[i] = temp;
		}
        
        
        System.out.println("------------------:");
           
        
        // 四:数据封装返回:
        /*
         * 分析:当前得到了四个数组;
         * 一维数组:provinceArr
         * 二维数组:stringArr,countArr,percentageArr
         * 
         * 需要将一维数组:provinceArr也转成二维数组并且将数据放在中间位置;
         * 
         */
        
        // 将省份添加到每个二维城市数组的末位;用临时二维数组stringArrTemp接收;
        String[][] stringArrTemp = new String[provinceArr.length][];
        for (int i = 0; i < stringArr.length; i++) {
        	String[] s = stringArr[i];
        	String[] temp = new String[s.length+1];
        	for (int j = 0; j < s.length; j++) {
        		temp[j] = s[j];
        		temp[s.length] = provinceArr[i];
			}
        	stringArrTemp[i] = temp;
		}
        
        // 计算一维数组在二维中的中间位置;        
        String[][] provinceNewArr = new String[provinceArr.length][];
        for (int i = 0; i < stringArrTemp.length; i++) {
        	String[] s = stringArrTemp[i];
        	String[] temp = new String[s.length-1];
        	int num = s.length-1;
        	for (int j = 0; j < s.length-1; j++) {
				if(j == num/2) {  // 找数组中间位置
    				if(num % 2 ==0) {  // 中间位置为偶数
    					if(j>0) {  // 首位判断>0
    						temp[j-1] = s[s.length-1];  // 数据向左偏
    						temp[j] = "#";  // 数据左偏完后下个数据需修正;
    					}
    				}
    				else {  // 中间位置为奇数
    					temp[j] = s[s.length-1];
    				}
				}
				else {
					temp[j] = "#";
				}
	
			}
        	provinceNewArr[i] = temp;
        }
        
        // 返回方式一:
        // 最终得到四个二维数组:provinceNewArr,stringArr,countArr,percentageArr
        // 二维数组封装Map返回;
        Map<String,Object> mapResult1 = new HashMap<>();
        mapResult1.put("province", provinceNewArr);
        mapResult1.put("cityType", stringArr);
        mapResult1.put("cityCount", countArr);
        mapResult1.put("cityPercentage", percentageArr);
        
        System.out.println("返回方式一:最终MAP"+mapResult1);

        // 最终:测试输出:
        for (int i = 0; i < stringArr.length; i++) {
        	System.out.println(i+":"+stringArr[i]);
        	String[] s1 = stringArr[i];
        	String[] s2 = countArr[i];
        	String[] s3 = percentageArr[i];
        	String[] s4 = provinceNewArr[i];
        	for (int j = 0; j < s1.length; j++) {
        		System.out.println("二级维度城市类型和数量:"+s1[j]+"--"+s2[j]+"--"+s3[j]+"--"+s4[j]);
			}
		}
        
        // 返回方式二:
        // 前端要求:所有的数据把二维数组拼接成一维数组返回;
        List<String> listArr1 = new ArrayList<>();
        List<String> listArr2 = new ArrayList<>();
        List<String> listArr3 = new ArrayList<>();
        List<String> listArr4 = new ArrayList<>();
        
        for (int i = 0; i < provinceNewArr.length; i++) {
        	String[] s1 = provinceNewArr[i];
        	String[] s2 = stringArr[i];
        	String[] s3 = countArr[i];
        	String[] s4 = percentageArr[i];
        	for (int j = 0; j < s1.length; j++) {
        		listArr1.add(s1[j]);
        		listArr2.add(s2[j]);
        		listArr3.add(s3[j]);
        		listArr4.add(s4[j]);
			}
		}

        String[] provinceNewArr2 = new String[listArr1.size()];
        String[] stringArr2 = new String[listArr2.size()];
        String[] countArr2 = new String[listArr3.size()];
        String[] percentageArr2 = new String[listArr4.size()];
        
        for (int i = 0; i < listArr1.size(); i++) {
        	provinceNewArr2[i] = listArr1.get(i);
        	stringArr2[i] = listArr2.get(i);
        	countArr2[i] = listArr3.get(i);
        	percentageArr2[i] = listArr4.get(i);
		}
        
        Map<String,Object> mapResult2 = new HashMap<>();
        mapResult2.put("province", provinceNewArr2);
        mapResult2.put("cityType", stringArr2);
        mapResult2.put("cityCount", countArr2);
        mapResult2.put("cityPercentage", percentageArr2);
        
        System.out.println("返回方式二:最终MAP"+mapResult2);
        
	}
	
	public static String percentageConversion(long divisor, long dividend) {
        String percentage = "";// 接受百分比的值
        double y = divisor * 1.0;
        double z = dividend * 1.0;
        if (y == 0 || z == 0) {
            return "0.00%";
        }
        double result = y / z;

        DecimalFormat decimalFormat = new DecimalFormat("##.00%"); // ##.00%

        percentage = decimalFormat.format(result);
        // ##.00% 使用这种转换方式,整数位如果是0 则会被删除  即0.35% 会出现 .35%的情况
        char c = percentage.charAt(0);
        if (String.valueOf(c).equals(".")) {
            StringBuffer sb = new StringBuffer();
            sb.append("0").append(percentage);
            return String.valueOf(sb);
        }
        return percentage;
    }
}

代码中数组排序方法查看:【Java 排序】冒泡排序(升降序,Int类型,Double类型,多数组,多维数组)(111)

测试输出:

入参数据:[{province=陕西省, city=西安市}, {province=陕西省, city=咸阳市}, {province=陕西省, city=宝鸡市}, {province=陕西省, city=延安市}, {province=陕西省, city=汉中市}, {province=四川省, city=成都市}, {province=四川省, city=成都市}, {province=四川省, city=广元市}, {province=四川省, city=绵阳市}, {province=陕西省, city=西安市}, {province=陕西省, city=西安市}, {province=陕西省, city=宝鸡市}, {province=江苏省, city=南京市}, {province=江苏省, city=南京市}, {province=江苏省, city=扬州市}, {province=河北省, city=石家庄市}, {province=山东省, city=济南市}, {province=山东省, city=青岛市}, {province=山东省, city=烟台市}, {province=山东省, city=潍坊市}]
--------------------
一级维度省份类型和数量:[{title=陕西省, value=8}, {title=四川省, value=4}, {title=山东省, value=4}, {title=江苏省, value=3}, {title=河北省, value=1}]
------------------:
返回方式一:最终MAP{cityType=[[Ljava.lang.String;@506e6d5e, province=[[Ljava.lang.String;@96532d6, cityCount=[[Ljava.lang.String;@3796751b, cityPercentage=[[Ljava.lang.String;@67b64c45}
0:[Ljava.lang.String;@4411d970
二级维度城市类型和数量:西安市--3--15.00%--#
二级维度城市类型和数量:宝鸡市--2--10.00%--#
二级维度城市类型和数量:延安市--1--5.00%--陕西省
二级维度城市类型和数量:咸阳市--1--5.00%--#
二级维度城市类型和数量:汉中市--1--5.00%--#
1:[Ljava.lang.String;@6442b0a6
二级维度城市类型和数量:成都市--2--10.00%--#
二级维度城市类型和数量:绵阳市--1--5.00%--四川省
二级维度城市类型和数量:广元市--1--5.00%--#
2:[Ljava.lang.String;@60f82f98
二级维度城市类型和数量:青岛市--1--5.00%--#
二级维度城市类型和数量:济南市--1--5.00%--山东省
二级维度城市类型和数量:烟台市--1--5.00%--#
二级维度城市类型和数量:潍坊市--1--5.00%--#
3:[Ljava.lang.String;@35f983a6
二级维度城市类型和数量:南京市--2--10.00%--江苏省
二级维度城市类型和数量:扬州市--1--5.00%--#
4:[Ljava.lang.String;@7f690630
二级维度城市类型和数量:石家庄市--1--5.00%--河北省
返回方式二:最终MAP{cityType=[Ljava.lang.String;@edf4efb, province=[Ljava.lang.String;@2f7a2457, cityCount=[Ljava.lang.String;@566776ad, cityPercentage=[Ljava.lang.String;@6108b2d7}

案例二:使用场景

	public Map<String, Object> getViolateSceneData(HttpServletRequest request, Map<String, Object> paramMap) {
        List<Map<String,Object>> list = getCountData(request,paramMap);
        if(list.size() == 0){
            return null;
        }
        // 一:获取一级维度:
        // 创建Set集合:获取一级维度数据的数据集:去重
        Set<String> hashSet = new HashSet<>();

        for (int i = 0; i < list.size(); i++) {
            String province = String.valueOf(list.get(i).get("businessSegment"));
            hashSet.add(province);
        }
        // 创建一级维度省份数组:
        String[] provinceArr = new String[hashSet.size()];
        // 创建一级维度省份数量数组:
        int[] provinceSort = new int[hashSet.size()];

        // Set转数组
        if(list.size() > 0){
            provinceArr = hashSet.toArray(new String[hashSet.size()]);
        }

        // 根据一级维度省份数组:计算一级维度省份数量数组;
        for (int i = 0; i < provinceArr.length; i++) {
            for (int j = 0; j < list.size(); j++) {
                if(provinceArr[i].equals(String.valueOf(list.get(j).get("businessSegment")))){
                    provinceSort[i] = provinceSort[i] + 1;
                }
            }
        }

        // 排序:一级维度省份数组;
        GetJsonDataUtil.BubbleSort(provinceSort,provinceArr);

        // 二:获取二级维度:
        // 创建集合数组(数组里面的元素为set集合)
        Set[] setArr = new Set[provinceArr.length];
        // 创建二维数组(set集合数组转二维数组)
        String[][] stringArr = new String[provinceArr.length][];

        // 集合数组:获取二级维度城市类型数据的数据集:去重
        for (int i = 0; i < provinceArr.length; i++) {
            Set<String> hashSet2 = new HashSet<>();
            // 获取城市数组;
            for (int j = 0; j < list.size(); j++) {
                if(provinceArr[i].equals(String.valueOf(list.get(j).get("businessSegment")))){
                    hashSet2.add(String.valueOf(list.get(j).get("violateScene")));
                }
            }
            setArr[i] = hashSet2;
        }

        // 二维数组:set集合城市数组转二维城市数组;
        for (int i = 0; i < setArr.length; i++) {
            Set<String> hashSet2 = setArr[i];
            String[] provinceArr2 = new String[hashSet2.size()];
            if(list.size() > 0){
                provinceArr2 = hashSet2.toArray(new String[hashSet2.size()]);
            }
            stringArr[i] = provinceArr2;
        }

        // 创建城市数量二维数组;
        String[][] countArr = new String[provinceArr.length][];

        // 二维数组:根据二维城市类型数组计算:二维城市数量数组;
        for (int i = 0; i < stringArr.length; i++) {
            String [] s = stringArr[i];
            String[] temp = new String[s.length];
            for (int j = 0; j < s.length; j++) {
                for (int k = 0; k < list.size(); k++) {
                    if(s[j].equals(String.valueOf(list.get(k).get("violateScene")))) {
                        if(String.valueOf(temp[j]).equals("null")) {
                            temp[j] = "1";
                        }
                        else {
                            temp[j] = String.valueOf(Integer.valueOf(temp[j]) + 1);
                        }

                    }
                }
            }
            countArr[i] = temp;
        }
        // 数组排序:城市数组和数量数组排序;
        GetJsonDataUtil.bubbleSortDescMultiple2(countArr,stringArr);

        // 三:百分比二维数组:计算百分比
        String[][] percentageArr = new String[provinceArr.length][];
        int sum = list.size();
        for (int i = 0; i < countArr.length; i++) {
            String [] s = countArr[i];
            String[] temp = new String[s.length];
            for (int j = 0; j < s.length; j++) {
                if(list.size() > 0) {
                   temp[j] = DateUtil.percentageConversion(Integer.valueOf(s[j]),sum);
                }
            }
            percentageArr[i] = temp;
        }

        // 四:数据封装返回:
        /*
         * 分析:当前得到了四个数组;
         * 一维数组:provinceArr
         * 二维数组:stringArr,countArr,percentageArr
         *
         * 需要将一维数组:provinceArr也转成二维数组并且放在中间位置;
         *
         */

        // 将省份添加到每个二维城市数组的末位;用临时二维数组stringArrTemp接收;
        String[][] stringArrTemp = new String[provinceArr.length][];
        for (int i = 0; i < stringArr.length; i++) {
            String[] s = stringArr[i];
            String[] temp = new String[s.length+1];
            for (int j = 0; j < s.length; j++) {
                temp[j] = s[j];
                temp[s.length] = provinceArr[i];
            }
            stringArrTemp[i] = temp;
        }
        // 计算一维数组在二维中的中间位置;
        String[][] provinceNewArr = new String[provinceArr.length][];
        for (int i = 0; i < stringArrTemp.length; i++) {
            String[] s = stringArrTemp[i];
            String[] temp = new String[s.length-1];
            int num = s.length-1;
            for (int j = 0; j < s.length-1; j++) {
                if(j == num/2) {  // 找数组中间位置
                    if(num % 2 ==0) {  // 中间位置为偶数
                        if(j>0) {  // 首位判断>0
                            temp[j-1] = s[s.length-1];  // 数据向左偏
                            temp[j] = "#";
                        }
                    }
                    else {  // 中间位置为奇数
                        temp[j] = s[s.length-1];
                    }
                }
                else {
                    temp[j] = "#";
                }
            }
            provinceNewArr[i] = temp;
        }

        // 最终得到四个二维数组:provinceNewArr,stringArr,countArr,percentageArr
        // 封装数据返回前端方式一:
//        Map<String,Object> map = new HashMap<>();
//        map.put("businessSegment", provinceNewArr);
//        map.put("violateSceneType", stringArr);
//        map.put("violateSceneCount", countArr);
//        map.put("violateScenePercentage", percentageArr);
//        return map;

        // 封装数据返回前端方式二:
        List<String> listArr1 = new ArrayList<>();
        List<String> listArr2 = new ArrayList<>();
        List<String> listArr3 = new ArrayList<>();
        List<String> listArr4 = new ArrayList<>();

        for (int i = 0; i < provinceNewArr.length; i++) {
            String[] s1 = provinceNewArr[i];
            String[] s2 = stringArr[i];
            String[] s3 = countArr[i];
            String[] s4 = percentageArr[i];
            for (int j = 0; j < s1.length; j++) {
                listArr1.add(s1[j]);
                listArr2.add(s2[j]);
                listArr3.add(s3[j]);
                listArr4.add(s4[j]);
            }
        }

        String[] provinceNewArr2 = new String[listArr1.size()];
        String[] stringArr2 = new String[listArr2.size()];
        String[] countArr2 = new String[listArr3.size()];
        String[] percentageArr2 = new String[listArr4.size()];

        for (int i = 0; i < listArr1.size(); i++) {
            provinceNewArr2[i] = listArr1.get(i);
            stringArr2[i] = listArr2.get(i);
            countArr2[i] = listArr3.get(i);
            percentageArr2[i] = listArr4.get(i);
        }

        Map<String,Object> mapResult2 = new HashMap<>();
        mapResult2.put("businessSegment", provinceNewArr2);
        mapResult2.put("violateSceneType", stringArr2);
        mapResult2.put("violateSceneCount", countArr2);
        mapResult2.put("violateScenePercentage", percentageArr2);
        return mapResult2;
    }

备注:代码中已包含两种返回值的方式:

Postman接口测试:按照二维数组返回:封装数据返回前端方式一

{
    "data": {
        "businessSegment": [
            [
                "#",
                "#",
                "BCG预防",
                "#",
                "#"
            ],
            [
                "#",
                "安全岗",
                "#"
            ],
            [
                "招标/议标",
                "#"
            ],
            [
                "实验室管理"
            ]
        ],
        "violateScenePercentage": [
            [
                "21.05%",
                "15.79%",
                "10.53%",
                "5.26%",
                "5.26%"
            ],
            [
                "15.79%",
                "10.53%",
                "5.26%"
            ],
            [
                "10.53%",
                "5.26%"
            ],
            [
                "5.26%"
            ]
        ],
        "violateSceneType": [
            [
                "关联关系",
                "第二职业",
                "代采购",
                "项目成员公示",
                "吃空饷"
            ],
            [
                "工作纪律违规",
                "其它",
                "门禁管理"
            ],
            [
                "其它",
                "竞标违规"
            ],
            [
                "闲置资产"
            ]
        ],
        "violateSceneCount": [
            [
                "4",
                "3",
                "2",
                "1",
                "1"
            ],
            [
                "3",
                "2",
                "1"
            ],
            [
                "2",
                "1"
            ],
            [
                "1"
            ]
        ]
    },
    "code": 200,
    "message": "OK"
}

Postman接口测试:按照一维数组返回:封装数据返回前端方式二(前端推荐这种方式

{
    "data": {
        "businessSegment": [
            "#",
            "#",
            "BCG预防",
            "#",
            "#",
            "#",
            "安全岗",
            "#",
            "招标/议标",
            "#",
            "实验室管理"
        ],
        "violateScenePercentage": [
            "21.05%",
            "15.79%",
            "10.53%",
            "5.26%",
            "5.26%",
            "15.79%",
            "10.53%",
            "5.26%",
            "10.53%",
            "5.26%",
            "5.26%"
        ],
        "violateSceneType": [
            "关联关系",
            "第二职业",
            "代采购",
            "项目成员公示",
            "吃空饷",
            "工作纪律违规",
            "其它",
            "门禁管理",
            "其它",
            "竞标违规",
            "闲置资产"
        ],
        "violateSceneCount": [
            "4",
            "3",
            "2",
            "1",
            "1",
            "3",
            "2",
            "1",
            "2",
            "1",
            "1"
        ]
    },
    "code": 200,
    "message": "OK"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955865.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞腾PSPA可信启动--2 数字签名证书

今天继续第二章&#xff0c;数字签名证书的介绍。 此章节录制了讲解视频&#xff0c;可以在B站进行观看&#xff1a;

PMP - 敏捷 3355

三个核心 产品负责人 负责最大化投资回报&#xff08;ROI&#xff09;&#xff0c;通过确定产品特性&#xff0c;把他们翻译成一个有优先级的列表 为下一个 sprint 决定在这个列表中哪些应该优先级最高&#xff0c;并且不断调整优先级以及调整这个列表 职责是定义需求、定义…

探索软件架构与网络通信协议:构建现代网络应用

文章目录 1. 软件架构&#xff1a;构建应用的基石1.1 C/S架构&#xff1a;客户端/服务器1.2 B/S架构&#xff1a;浏览器/服务器 2. 网络通信协议&#xff1a;构建连接的桥梁2.1 4层模型&#xff1a;数据的分层传输2.2 IP地址与端口号&#xff1a;标识和定位 3. TCP通信&#xf…

Java的数组是啥?

1.数组是啥&#xff1f; 数组是一块连续的内存&#xff0c;用来存储相同类型的数据 &#xff08;1&#xff09;如何定义数组&#xff1f; 1.int[] array {1,2,3,4} new int[]{1,2,3,4};//这里的new是一个关键字&#xff0c;用来创建对象 2.数组就是一个对象 动态初始化 …

[论文笔记]DSSM

引言 这是DSSM论文的阅读笔记,后续会有一篇文章来复现它并在中文数据集上验证效果。 本文的标题翻译过来就是利用点击数据学习网页搜索中深层结构化语义模型,这篇论文被归类为信息检索,但也可以用来做文本匹配。 这是一篇经典的工作,在DSSM之前,通常使用传统机器学习的…

【附安装包】Eplan2022安装教程

软件下载 软件&#xff1a;Eplan版本&#xff1a;2022语言&#xff1a;简体中文大小&#xff1a;1.52G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.5GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.co…

市场中做到低买高卖,其实很简单,FPmarkets澳福10秒教会

所有人都在告诉你&#xff0c;低买高卖就可以在市场大杀四方&#xff0c;但是没有人告诉你&#xff0c;如何在风云莫测的市场中做到低买高卖。其实很简单&#xff0c;FPmarkets澳福10秒钟教会&#xff0c;如果不好使&#xff0c;帮你账户充值1000块钱。 投资者都知道外汇报价在…

Metinfo6.0.0任意文件读取【漏洞复现】

文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称&#xff1a;MetInfo任意文件读取 漏洞简介&#xff1a;MetInfo是一套使用PHP和MySQL开发的内容管理系统&#xff0c;其…

C++11 智能指针详解

C 程序设计中使用堆内存是非常频繁的操作&#xff0c;堆内存的申请和释放都由程序员自己管理。程序员自己 管理堆内存可以提高了程序的效率&#xff0c;但是整体来说堆内存的管理是麻烦的&#xff0c;C11 中引入了智能指针的 概念&#xff0c;方便管理堆内存。使用普通指针&…

耕地单目标语义分割实践——Deeplab3+语义分割

耕地单目标语义分割实践系列文章&#xff1a; [1*] 语义分割实践数据集制作—以Sentinel-2 MSI数据为例_doll &#xff5e;CJ的博客-CSDN博客 [2*] 耕地单目标语义分割实践——Pytorch网络过程实现理解_doll &#xff5e;CJ的博客-CSDN博客 [3*] 基于Pytorch的神经网络部分…

RocketMQ-(8-1)-EventBridge-EventBridge 核心概念

RocketMQ EventBridge 核心概念 理解EventBridge中的核心概念&#xff0c;能帮助我们更好的分析和使用EventBridge。本文重点介绍下EventBridge中包含的术语&#xff1a; EventSource&#xff1a;事件源。用于管理发送到EventBridge的事件&#xff0c;所有发送到EventBridge中…

【ES】elasticsearch8.3.3

这里仅实践操作并根据实际问题进行记录笔记。 运行 ES8 我们需要在自己的电脑上安装好 Docker Desktop。接着我们运行如下的命令&#xff1a;出现两个异常&#xff0c;一个是需要使用winpty因为我使用win的docker desktop&#xff0c;另外一个问题是docker启动elasticsearchE…

408考研-数据结构算法-顺序表

数组 如何创建数组 我们以 Java 中创建数组为例&#xff0c;创建语法如下 dataType[] arrName new dataType[size];dataType: 也就是我们数组中元素的数据类型arrName:即数组名size:即数组所能容纳的元素数量new: Java 语言中的关键词 假设我们要创建一个由 10 个元素的数…

基于SSM的在线挂号系统java医院预约管理 jsp源代码Mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目介绍 基于SSM的在线挂号系统 系统有2权限&#xff1a;前台…

基于SSM的服装商城系统【附源码】

【项目特色】 抽奖功能优惠劵功能物流信息功能 简介 基于SSM的服装商城系统 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;Spring、Mybaits、SpringMVC工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 前台功能:   注册、登录、退出、商品查询、商品列…

Oracle查询语句中做日期加减运算

在Oracle中&#xff0c;可以使用日期函数来实现日期的加减。 若想在日期上加上一定的天数&#xff0c;可以使用"INTERVAL"关键字。例如&#xff0c;如果要将一个日期加上3天&#xff0c;可以使用以下代码&#xff1a; SELECT SYSDATE INTERVAL 3 DAY FROM DUAL; …

【征稿信息】第四届先进材料和智能制造国际学术会议(ICAMIM2023)

第四届先进材料和智能制造国际学术会议&#xff08;ICAMIM2023) 2023 4th International Conference on Advanced Materials and Intelligent Manufacturing 2023年广州市“国际学术会议之都”建设项目— 第四届先进材料和智能制造国际学术会议&#xff08;ICAMIM2023)将于202…

徐涛政治导论:著作串连表格(重点掌握)

考试第一个选择题常考下面的表格&#xff08;很重要&#xff09;

使用vue-pdf出现的卡顿,空白,报错,浏览器崩溃解决办法

如果想直接知道解决办法&#xff0c;请翻到最下面 今天&#xff0c;接到了一个新的需求&#xff0c;我们公司的PDF展示卡住了&#xff0c;导致浏览器直接奔溃。我也刚来公司不久&#xff0c;就去看看是怎么发生的&#xff0c;公司前同事用的vue-pdf&#xff0c;刚开始以为是文…

基于鹈鹕算法优化的BP神经网络(预测应用) - 附代码

基于鹈鹕算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于鹈鹕算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.鹈鹕优化BP神经网络2.1 BP神经网络参数设置2.2 鹈鹕算法应用 4.测试结果&#xff1a;5.Matlab代码 摘要…