柱状图展示异步统计数据

SQL Server查询计划(Query Plan)(6)——查询计划和统计对象 本文对SQL Server查询计划(Query Plan)——查询计划和统计对象的概念与机制,进行了较为深入详细的说明和讲解,并对注意事项、关键知识点和选项等进行了重点标注和详尽解析,以便于读者进行深入学习和理解。 阅读详情

PC端

 APP端

 Controller层

package com.cnpc.dj.party.controller;

import com.alibaba.fastjson.JSONObject;
import com.cnpc.dj.common.JsonResult;
import com.cnpc.dj.common.context.BaseContextHandler;
import com.cnpc.dj.common.utils.DateUtils;
import com.cnpc.dj.party.common.ReturnExamEnum;
import com.cnpc.dj.party.service.GridDataStatisticService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;

@Slf4j
@CrossOrigin
@RestController
@RequestMapping("/dataStatistic")
public class GridDataStatisticController {

    @Autowired
    private GridDataStatisticService gridDataStatisticService ;

    @PostMapping("/doStatisticForGrid")
    public JsonResult<?> doStatisticForGrid(@RequestBody JSONObject requestBody) {
        // 检查入参合法性.
        BigDecimal orgId = requestBody.getBigDecimal("orgId");
        if (Objects.isNull(orgId)) {
            return JsonResult.error(ReturnExamEnum.GRID_ILLEGAL_ARGUMENT, "必要参数<orgId>未填写");
        }
        BigDecimal tenantId = BaseContextHandler.getDecimalTenantId();
        long beginTime = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格员 - 数据统计任务 ]: 开始所有任务(当前租户ID: {} ).", DateUtils.format(new Date(beginTime), "yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒"), tenantId);

        // 创建统计结果容器.
        JSONObject result = new JSONObject();

        // 创建异步统计任务: 调用各统计方法.
        CompletableFuture<?> task1 = gridDataStatisticService.gridNumberAsyncStatistic(tenantId, orgId, result);
        CompletableFuture<?> task2 = gridDataStatisticService.gridPersonNumberAsyncStatistic(tenantId, orgId, result);


        // 等待, 直到所有任务执行完毕.
        CompletableFuture.allOf(task1,task2).join();
        long endTime = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格员 - 数据统计任务 ]: 所有任务完成, 总计耗时 {} 毫秒.", DateUtils.format(new Date(endTime), "yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒"), endTime - beginTime);
        // 返回统计结果.
        return JsonResult.success(result);
    }
}

Service层 

package com.cnpc.dj.party.service;


import com.alibaba.fastjson.JSONObject;
import com.cnpc.dj.common.utils.DateUtils;
import com.cnpc.dj.party.common.EChartsResult;
import com.cnpc.dj.party.common.KeyValuePair;
import com.cnpc.dj.party.repository.GridDataStatisticMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;

@Service
@Slf4j
public class GridDataStatisticService {

    @Autowired
    private GridDataStatisticMapper gridDataStatisticMapper;

    private static String convert(long timeMillis) {
        return DateUtils.format(new Date(timeMillis), "yyyy年MM月dd日 HH时mm分ss秒 SSS毫秒");
    }

    /**
     * 获取网格信息
     * @param orgId 入参: 组织ID.
     * @return 统计结果.
     */
    @Async
    public CompletableFuture<?> gridNumberAsyncStatistic(BigDecimal tenantId, BigDecimal orgId, JSONObject parent) {
        long t0 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格情况 ][ 网格数量统计 ]: 任务开始.", convert(t0));
        // 查询数据库, 获取原始数据
        List<KeyValuePair<BigDecimal>> list = gridDataStatisticMapper.statisticGrid(tenantId, orgId);
        long t1 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格情况 ][ 网格数量统计 ]: 原始数据查询成功: 本步耗时 {} 毫秒, 总计耗时 {} 毫秒.", convert(t1),t1 - t0,t1 - t0);

        // 初始化查询结果容器.
        // 初始化查询结果容器.管理类,科研类,生产经营类,项目建设类,生产作业类,网格总数
        String[] mapEntry = {"Manage", "Scientific", "ProductionOperation", "ProjectBuild","FlowHomework", "GridTotal"};
        EChartsResult result = new EChartsResult();
        result.init(null, mapEntry, null);
        BigDecimal gridTotal = BigDecimal.ZERO;
        // 处理原始数据, 填充查询结果容器.
        for (KeyValuePair<BigDecimal> item : list) {
            if (Objects.nonNull(item.getKey())) {
                switch (item.getKey()) {
                    case "1":
                        result.addToMap(mapEntry[0], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "2":
                        result.addToMap(mapEntry[1], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "3":
                        result.addToMap(mapEntry[2], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "4":
                        result.addToMap(mapEntry[3], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    default:
                        result.addToMap(mapEntry[4], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                }
            }
        }
        result.addToMap(mapEntry[5], gridTotal);
        // 返回查询结果.
        parent.put("GridStatistic", result.getMap());
        long t2 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格情况 ][ 网格数量统计 ]: 数据处理完成, 任务结束: 本步耗时 {} 毫秒, 总计耗时 {} 毫秒.", convert(t2), t2 - t1,
                t2 - t0);
        return CompletableFuture.completedFuture(parent);
    }

    /**
     * 获取网格人员信息
     * @param orgId 入参: 组织ID.
     * @return 统计结果.
     */
    @Async
    public CompletableFuture<?> gridPersonNumberAsyncStatistic(BigDecimal tenantId, BigDecimal orgId, JSONObject parent) {
        long t0 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格人员情况 ][ 网格人数统计 ]: 任务开始.", convert(t0));
        // 查询数据库, 获取原始数据
        List<KeyValuePair<BigDecimal>> list = gridDataStatisticMapper.statisticGridPerson(tenantId, orgId);
        long t1 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格人员情况 ][ 网格人数统计 ]: 原始数据查询成功: 本步耗时 {} 毫秒, 总计耗时 {} 毫秒.", convert(t1),t1 - t0,t1 - t0);

        // 初始化查询结果容器.
        // 初始化查询结果容器.管理类,科研类,生产经营类,项目建设类,生产作业类,网格人员总数
        String[] mapEntry = {"Manage", "Scientific", "ProductionOperation", "ProjectBuild","FlowHomework", "GridPersonTotal"};
        EChartsResult result = new EChartsResult();
        result.init(null, mapEntry, null);
        BigDecimal gridTotal = BigDecimal.ZERO;
        // 处理原始数据, 填充查询结果容器.
        for (KeyValuePair<BigDecimal> item : list) {
            if (Objects.nonNull(item.getKey())) {
                switch (item.getKey()) {
                    case "1":
                        result.addToMap(mapEntry[0], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "2":
                        result.addToMap(mapEntry[1], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "3":
                        result.addToMap(mapEntry[2], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    case "4":
                        result.addToMap(mapEntry[3], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                        break;
                    default:
                        result.addToMap(mapEntry[4], item.getValue());
                        gridTotal = gridTotal.add(item.getValue());
                }
            }
        }
        result.addToMap(mapEntry[5], gridTotal);
        // 返回查询结果.
        parent.put("GridPersonStatistic", result.getMap());
        long t2 = System.currentTimeMillis();
        log.info("\n[ {} ][ 网格人员情况 ][ 网格人数统计 ]: 数据处理完成, 任务结束: 本步耗时 {} 毫秒, 总计耗时 {} 毫秒.", convert(t2), t2 - t1,
                t2 - t0);
        return CompletableFuture.completedFuture(parent);
    }
}

Mapper层

package com.cnpc.dj.party.repository;


import com.cnpc.dj.party.common.KeyValuePair;
import org.apache.ibatis.annotations.Mapper;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface GridDataStatisticMapper {

    /**
     * 统计网格数量
     * @param tenantId
     * @param orgId
     * @return K V
     */
    List<KeyValuePair<BigDecimal>> statisticGrid(BigDecimal tenantId, BigDecimal orgId);

    /**
     * 统计网格人数
     * @param tenantId
     * @param orgId
     * @return K V
     */
    List<KeyValuePair<BigDecimal>> statisticGridPerson(BigDecimal tenantId, BigDecimal orgId);
}

 Mapper.xml层

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.cnpc.dj.party.repository.GridDataStatisticMapper">

    <resultMap id="KeyValuePair" type="com.cnpc.dj.party.common.KeyValuePair">
        <result column="K" property="key" jdbcType="VARCHAR" javaType="java.lang.String"/>
        <result column="V" property="value" jdbcType="INTEGER" javaType="java.math.BigDecimal"/>
    </resultMap>

    <select id="statisticGrid" parameterType="java.math.BigDecimal" resultMap="KeyValuePair">
        SELECT G.GRID_CLASS k,
               COUNT(*)     v
        FROM ZHONGHY_ONLINE_ANSWERS.DJ_GRID G
        WHERE G.IS_DELETE = '0'
         AND  G.ORG_CODE IN (SELECT o.ORG_CODE
                             FROM ZHONGHY_BASIC_INFO.DJ_ORG O
                             WHERE o.is_delete = '0'
                             AND o.is_del_org = '0'
                             AND o.tenant_id = #{tenantId, jdbcType=DECIMAL}
                             AND !REGEXP_LIKE(o.org_code, '^(000.001|000.002)')
        CONNECT BY PRIOR o.id = o.parent_id
        START WITH o.id = #{orgId, jdbcType=DECIMAL})
        GROUP BY G.GRID_CLASS
        ORDER BY G.GRID_CLASS
    </select>
    <select id="statisticGridPerson" parameterType="java.math.BigDecimal" resultMap="KeyValuePair">
        SELECT G.GRID_CLASS k,
               COUNT(*)     v
        FROM ZHONGHY_ONLINE_ANSWERS.DJ_GRID_RANGE R
        LEFT JOIN ZHONGHY_ONLINE_ANSWERS.DJ_GRID G
        ON R.GRID_ID = G.ID AND R.IS_DELETE = '0'
        WHERE G.IS_DELETE = '0'
          AND G.ORG_CODE IN (SELECT o.ORG_CODE
                             FROM ZHONGHY_BASIC_INFO.DJ_ORG O
                             WHERE o.is_delete = '0'
                               AND o.is_del_org = '0'
                               AND o.tenant_id = #{tenantId, jdbcType=DECIMAL}
                               AND !REGEXP_LIKE(o.org_code, '^(000.001|000.002)')
        CONNECT BY PRIOR o.id = o.parent_id
        START WITH o.id = #{orgId, jdbcType=DECIMAL})
        GROUP BY G.GRID_CLASS
        ORDER BY G.GRID_CLASS
    </select>
</mapper>

  公共类EChartsResult

package com.cnpc.dj.party.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.Comparator;
import java.util.LinkedHashMap;
import java.util.LinkedList;

/**
 * 陕西信合 - 数据统计.
 */
public class EChartsResult {
    public static final Comparator<? super Entry> VALUE_ASC = Comparator.comparing(Entry::getValue);
    public static final Comparator<? super Entry> VALUE_DESC = (Entry o1, Entry o2) -> o2.getValue()
                                                                                                       .compareTo(
                                                                                                               o1.getValue());
    private Comparator<? super Entry> comparator;
    private LinkedHashMap<String, Entry> entryMap;
    private LinkedHashMap<String, BigDecimal> valueMap;
    private BigDecimal total;

    public void init(String[] names, String[] keys, Comparator<? super Entry> comparator) {
        // 初始化EntryMap
        if (names != null && names.length > 0) {
            this.entryMap = new LinkedHashMap<>(names.length);
            for (String name : names) {
                this.entryMap.put(name, new Entry(name, BigDecimal.ZERO, null));
            }
        }
        // 初始化ValueMap
        if (keys != null && keys.length > 0) {
            this.valueMap = new LinkedHashMap<>(keys.length);
            for (String key : keys) {
                this.valueMap.put(key, BigDecimal.ZERO);
            }
        }
        // 设置Comparator
        this.comparator = comparator;
    }

    public void setComparator(Comparator<? super Entry> comparator) {
        this.comparator = comparator;
    }

    public void addToList(String name, BigDecimal value) {
        if (this.entryMap == null) {
            this.entryMap = new LinkedHashMap<>();
        }
        if (this.entryMap.containsKey(name)) {
            this.entryMap.get(name).addValue(value);
        } else {
            this.entryMap.put(name, new Entry(name, value, null));
        }
    }

    public void addToMap(String key, BigDecimal value) {
        if (this.valueMap == null) {
            this.valueMap = new LinkedHashMap<>();
        }
        this.valueMap.put(key, this.valueMap.containsKey(key)
                               ? this.valueMap.get(key).add(value)
                               : value);
    }

    public void calculate() {
        this.calculateTotal();
        this.calculatePercent();
    }

    public void calculate(BigDecimal total) {
        this.calculateTotal();
        this.calculatePercent(total);
    }

    private void calculateTotal() {
        if (this.entryMap != null) {
            // 初始化Total.
            this.total = BigDecimal.ZERO;
            // 累加求和.
            for (Entry entry : this.entryMap.values()) {
                this.total = this.total.add(entry.getValue());
            }
        }
    }

    private void calculatePercent() {
        if (this.entryMap != null) {
            // 若Total未初始化, 则先计算Total.
            if (this.total == null) {
                this.calculateTotal();
            }
            // 遍历EntryMap的所有项目, 计算百分比.
            this.entryMap.values().forEach(entry -> entry.calculatePercent(this.total));
        }
    }

    private void calculatePercent(BigDecimal total) {
        if (this.entryMap != null) {
            // 遍历EntryMap的所有项目, 计算百分比.
            this.entryMap.values().forEach(entry -> entry.calculatePercent(total));
        }
    }

    public void buildMap() {
        this.calculate();
        LinkedList<Entry> list = this.getList();
        if (list != null) {
            for (Entry entry : list) {
                this.addToMap(entry.getName(), entry.getValue());
                this.addToMap(entry.getName() + "Percent", entry.getPercent());
            }
            this.addToMap("Total", this.total);
        }
    }

    public LinkedList<Entry> getList() {
        if (this.entryMap != null) {
            LinkedList<Entry> list = new LinkedList<>(this.entryMap.values());
            if (this.comparator != null) {
                list.sort(this.comparator);
            }
            return list;
        }
        return null;
    }

    public LinkedHashMap<String, BigDecimal> getMap() {
        return this.valueMap;
    }

    public BigDecimal getTotal() {
        return this.total;
    }

    /**
     * ECharts 统计列表项.
     *
     * @author wangzijie05@cnpc.com.cn
     * @since 2019-03-15
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Entry {
        private String name;
        private BigDecimal value;
        private BigDecimal percent;

        void addValue(BigDecimal augend) {
            this.value = this.value.add(augend);
        }

        void calculatePercent(BigDecimal total) {
            if (BigDecimal.ZERO.equals(total)) {
                this.percent = BigDecimal.ZERO;
            } else {
                this.percent = this.value.abs().divide(total, 10, BigDecimal.ROUND_HALF_UP);
            }
        }
    }
}

 公共类KeyValuePair

package com.cnpc.dj.party.common;

import lombok.Data;

@Data
public class KeyValuePair<T> {

    private String key;

    private T value;

}

 postman测试

大屏监控系统实战(1)-项目介绍 这个项目的起源非常的偶然,源于今年我有幸入选2019年优快云博客之星年度总评选,并且排名一直还不错,在前20的行列中,而排名第一的天元浪子大大,用python分析了一波投票情况,我本人对自己也非常感兴趣,但因为我不会用python,而且python画出来的统计图不是动态图,于是我就想用Java做后端,前端用图表组件做个靓靓的大屏监控出来。大概花了两天时间,初见成效。现在简单介绍如下: 一、整体... 阅读详情

相关推荐

将运算放大器(运放)用作比较器

我们研究了一些经典的运算放大器电路。这些电路中运用了负反馈,因此通常就可以使运算放大器工作在线性区域内。 但是,也可以将运算放大器用作比较器,从而使其以非线性方式工作。由于其输入受到硬驱动,因此其输出电压会对电源轨产生猛烈的冲击。如下文所示,这可能并不总是一种好的设计方法。 变为非线性 在线性应用中,可以对运算放大器做如下理想假设:无限增益和带宽、零输出阻抗、无限输入阻抗,以及输入之间为零伏。也可以将运算放大器以非线性方式使用,但有一些地方要特别注意和处理。 一种常见的配置是仅使用开环运算放大器(无反馈),

ltqdxl的博客 3万+

简单使用springboot vue 实现echarts的柱状图和饼图

springboot+vue实现echarts

2301_77752359的博客 1298

新手必看!Cisco Packet Tracer 8.2从安装到完成第一个局域网实验(附常见问题解决)

本文为网络新手提供了Cisco Packet Tracer 8.2的完整入门指南。从官方下载安装、界面熟悉,到核心的拖拽设备、连线、配置IP地址三步操作,手把手教你完成第一个局域网组网实验。文章重点讲解了如何通过Ping命令验证连通性,并附带了连线错误、IP配置不当等常见问题的解决思路,帮助初学者快速上手这款强大的思科模拟器。

android的专栏 866

Ajax Java异步请求返回实体类

Ajax 异步请求实例: /** * @Description: 行业项目统计 自贸区各行业数据统计\近半年各行业总投资走势 */ @RequestMapping(value = "/m1", method = { RequestMethod.POST, RequestMethod.GET }) @ResponseBody public AjaxResult m1() { AjaxResul...

erfeiffff的博客 1079

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2854

电商智能客服Agent开发实战:从零到一构建企业级AI助手

电商智能客服Agent是下一代AI应用的核心形态,它不仅能够回答用户问题,还能自主规划任务、调用工具并执行完整工作流程。本文将深入探讨AI Agent的基本概念、技术实现方式及电商场景中的应用,提供完整的开发流程和代码示例,帮助开发者从零开始构建一个功能强大的电商智能客服系统。通过模块化设计、多轮对话记忆管理和工具集成,这个Agent能够处理订单查询、商品推荐、退换货流程等复杂任务,同时具备企业级的安全性和稳定性保障。通过本文的介绍,读者已经掌握了构建电商智能客服Agent的核心技术与实现方法。

m0_64363449的博客 1359

异步数据加载时的动画加载

ECharts 默认提供了一个简单的勺加载动画,只需要在数据加载前,调用showLoading(方法显示该加载动画,在数据加载完成后,再调用hideLoading()方法隐藏该加载动画即可。(1)右击“Google Chrome”快捷方式图标,在弹出的快捷菜单中选择最下面的“属性”菜单项。异步加载数据时,需要配置Google Chrome 浏览器以支持AJAX 请求。(4)将网页文件拖放到打开的“Google Chrome”浏览器中。(3)打开“Google Chrome”浏览器。在延迟两秒后,效果如下。

2403_83177329的博客 546

IFIX往Mysql数据库同步数据方法

通过IFix数据库向Mysql数据库同步数据

仙人掌 1594

在 Vue 3 项目中使用 ECharts 绘制柱状图,并通过异步请求获取数据来动态更新图表

目录ArticlePublishChart.vue:文章发布热点图 部分2、ArticleTypeHotspotChart.vue:文章类型访问热点统计 部分 部分3、CountTo.vue 部分4、FormDrawer.vue:弹出抽屉式表单窗口,方便用户输入信息, 部分 部分 部分 部分 在 标签内的代码属于 JavaScript,实现组件的逻辑功能,比如从 Vue 和 ECharts 库导入功能函数,获取后端数据、处理数据以及配置和渲染 ECharts 图表等操作 。 2、Article

weixin_62533176的博客 2262

基于STM32的智能鞋柜系统设计与实现

摘要:本文设计并实现了一种基于STM32F103C8T6单片机的智能鞋柜系统。该系统通过DHT11温湿度传感器、PM2.5粉尘传感器和MQ-135空气质量传感器构建多维度环境监测网络,结合光电红外传感器和光敏传感器实现柜门状态识别与智能照明。系统采用分层控制策略,当温度低于15℃或湿度高于65%时自动启动加热和通风,PM2.5超标时启动通风,污染物浓度升高时激活紫外线杀菌。创新性地实现了柜门状态与紫外线消毒的双保险互锁机制,确保使用安全。测试结果表明,系统温湿度控制精度达±0.4℃/±2.0%RH,PM2.

3254968421的博客 252

【AI大模型应用开发】1.0 Prompt Engineering(提示词工程)- 典型构成、原则与技巧,代码中加入Prompt

Prompt典型构成、原则与技巧,以及OpenAI API重要参数解释,助你轻松入门Prompt

同学小张的博客 2580

百度ECharts图表展示动态数据

百度ECharts是个非常强大的图表工具,引入百度提供的echarts.min.js文件后,只需从后台获取数据便可以图表的形式展示数据,能够更直观的查看、比较、统计数据。 这里以一个柱状图展示动态数据的小例子讲解如何使用百度ECharts。 1.首先引入需要的js文件: &lt;!-- jquery --&gt; &lt;script src="https://cdn.bootc...

wl_Honest的博客 4769

用 ABAP CDS 把树建起来:Hierarchy 的建模、调试与消费全流程

CDS Hierarchy 将树形数据结构作为一等公民引入 ABAP 开发,通过定义父子关联、根节点条件和兄弟排序规则,让数据库原生支持层级查询。相比传统递归处理方式,它能避免性能瓶颈,提供$node系统字段描述节点结构信息,并支持与SAP UI框架无缝集成。这种方法简化了组织架构、成本中心等业务场景的层级数据处理,使开发人员能够专注于业务逻辑而非底层实现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 204

C# Ajax前后端数据交互之echars图表展示基础篇

文章目录前言一、是什么Ajax?有什么作用?二、使用步骤1.引入库2.读入数据总结 前言 嗨~程序员(媛)们好!我是pp酱~ 在我们的项目开发中使用Ajax进行前后端数据交互,展示统计数据是不可或缺的存在,清晰明了的统计图能在我们项目答辩中起到锦上添花的作用!话不多说,咱们直接开干!(效果如下) 一、是什么Ajax?有什么作用? Ajax(Asynchronous JavaScript and XML) ,是异步的javascript和XML,Ajax可以使数据交互,可以从服务器获取到数据,也可以从前

m0_58563309的博客 1616

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Flutter三方库适配鸿蒙【step_counter】模拟计步器应用项目完整实战

Flutter模拟计步器应用step_counter项目摘要 step_counter是一个Flutter实现的模拟计步器应用,主要特点: 核心功能:模拟计步过程,包含步数统计、目标进度、卡路里和距离估算,以及小时活动柱状图展示。 技术实现: 使用Future.doWhile和Future.delayed实现每2秒模拟步数增长 采用Material 3设计风格,以绿色为主色调 通过StatefulWidget管理步数、计步状态等核心数据 使用CircularProgressIndicator展示目标完成进度

2501_91703293的博客 337

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基础入门 React Native 鸿蒙跨平台开发:冒泡排序动画可视化

所有能力均为 RN 原生自带,全部从 核心包直接导入,无任何额外依赖、无任何第三方库,鸿蒙端无任何兼容问题,也是实现冒泡排序动画可视化的全部核心能力,零基础易理解、易复用,无任何冗余,所有冒泡排序动画可视化功能均基于以下组件/API 原生实现:实现冒泡排序算法,支持异步执行,便于动画展示。 核心要点:实现状态管理功能,支持数组状态、比较状态、交换状态、排序状态等。 核心要点:实现随机数组生成功能,支持自定义数组大小。 核心要点:实现排序控制功能,支持开始、暂停、继续、重置。 核心要点:实现速度控制功能,支

Easonmax的博客 675

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

零基础入门 React Native 鸿蒙跨平台开发:快速排序动画可视化

/ 解析自定义输入// 应用自定义数组} else {Alert.alert('错误', '请输入1-50个数字,用逗号分隔');

Easonmax的博客 376

【前端统计图】hcharts实现堆叠柱形图(与后台数据交互)

原型图类似如下: 图片.png &lt;!DOCTYPE &gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt;&lt;link rel="icon" href="https://static.jianshukeji.com/highcharts/

祈澈菇凉 961

我的当当图书爬虫

我的当当图书爬虫一、项目简介二、爬取数据(scrapy框架)scrapy框架的简单介绍scrapy框架的安装爬取过程增量爬取功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章U...

qq_38779009的博客 961

canvas:绘制柱状统计图

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/title&gt; &lt;style&gt; canvas{ back

一只程序媛 3191

Reportr:终极个人生活仪表板,10分钟快速搭建你的专属数据追踪系统

Reportr是一款功能强大的个人生活仪表板,能够帮助你集中管理和可视化各类个人数据,打造专属于你的数据追踪中心。无论是日常活动、工作效率还是健康状况,都能通过直观的图表和清晰的统计数据呈现,让你对自己的生活状态了如指掌。 ## 🚀 为什么选择Reportr个人仪表板? 在信息爆炸的时代,我们的生活数据散落在各个平台,难以形成完整的视图。Reportr的出现正是为了解决这一痛点,它将分散的数

gitblog_00835的博客 362

Python高性能数据可视化与Plotly实战分享:大规模交互图表构建与性能优化经验

数据预处理与聚合减少绘图数据量分段加载与异步回调保证交互流畅WebGL 加速与缓存复用提升渲染效率交互筛选与异常标记提高分析价值监控与告警机制确保系统稳定运行Python 结合 Plotly,通过高性能可视化设计、异步渲染和缓存策略,为金融、电商和数据分析系统提供了稳定、高效且可交互的数据可视化解决方案。

2501_94179948的博客 645

计算机毕业设计之基于flask框架的微博实时热点数据可视化设计与实现

本文设计了一个基于Flask框架的微博实时热点数据可视化系统。系统通过数据爬取模块获取微博热点内容,经处理后采用多种可视化方式(如柱状图、词云等)展示数据。核心功能包括数据看板(点赞、评论、粉丝等统计)和管理系统(用户管理、舆情监控)。系统采用Bootstrap前端框架和Flask后端处理,通过AJAX实现异步交互,具有友好的用户界面和数据安全保障。测试表明系统运行稳定,能有效支持微博舆情分析与决策。

2501_92338149的博客 285

php结合MySQL的柱状图_PHP结合MySQL实现千万级数据处理

推荐:《PHP视频教程》mysql分表思路一张一亿的订单表,可以分成五张表,这样每张表就只有两千万数据,分担了原来一张表的压力,分表需要根据某个条件进行分,这里可以根据地区来分表,需要一个中间件来控制到底是去哪张表去找到自己想要的数据。中间件:根据主表的自增id作为中间件(什么样的字段适合做中间件?要具备唯一性)怎么分发?主表插入之后返回一个id,根据这个id和表的数量进行取模,余数是几就往哪张表...

weixin_33169898的博客 127

echart图片库_基于html5 Canvas图表库 : ECharts

ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘、整合的能力。—— 大数据时代,重新定义数据图表的时候到了ArchitectureECharts (Enterprise Charts 商业产品...

weixin_39533307的博客 624
上一篇: 华为云服务镜像手动更换
下一篇: java通过解密身份证计算年龄(精确到日)
@百思不如奇解
博客等级 码龄5年 352粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@百思不如奇解

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值