苍穹外卖11(Apache ECharts前端统计,营业额统计,用户统计,订单统计,销量排名Top10)

news2024/11/24 9:54:05

目录

一、Apache ECharts【前端】

1. 介绍

2. 入门案例

二、营业额统计

1. 需求分析和设计

1 产品原型

2 业务规则

3 接口设计

2. 代码开发

3. 功能测试

三、用户统计

1. 需求分析和设计

1 产品原型

2 业务规则

3 接口设计

2. 代码开发

 3. 功能测试

四、订单统计

1. 需求分析和设计

1 产品原型

2 业务规则

3 接口设计

2. 代码开发

3. 功能测试

五、销量排名Top10

1. 需求分析和设计

1 产品原型

2 业务规则

3 接口设计

2. 代码开发

3. 功能测试


一、Apache ECharts【前端】

1. 介绍

Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。 官网地址:Apache ECharts

常见效果展示:

1). 柱形图

 

2). 饼形图  

3). 折线图

总结:不管是哪种形式的图形,最本质的东西实际上是数据,它其实是对数据的一种可视化展示。

2. 入门案例

Apache Echarts官方提供的快速入门:快速上手 - 使用手册 - Apache ECharts

效果展示:

实现步骤:

1). 引入echarts.js 文件(当天资料已提供)

2). 为 ECharts 准备一个设置宽高的 DOM

3). 初始化echarts实例

4). 指定图表的配置项和数据

5). 使用指定的配置项和数据显示图表

代码开发:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>ECharts</title>
    <!-- 引入刚刚下载的 ECharts 文件 -->
    <script src="echarts.js"></script>
  </head>
  <body>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
      // 基于准备好的dom,初始化echarts实例
      var myChart = echarts.init(document.getElementById('main'));

      // 指定图表的配置项和数据
      var option = {
        title: {
          text: 'ECharts 入门示例'
        },
        tooltip: {},
        legend: {
          data: ['销量']
        },
        xAxis: {
          data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
        },
        yAxis: {},
        series: [
          {
            name: '销量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
          }
        ]
      };

      // 使用刚指定的配置项和数据显示图表。
      myChart.setOption(option);
    </script>
  </body>
</html>

测试:使用浏览器方式打开即可。

总结:使用Echarts,重点在于研究当前图表所需的数据格式。通常是需要后端提供符合格式要求的动态数据,然后响应给前端来展示图表。

二、营业额统计

1. 需求分析和设计

1 产品原型

营业额统计是基于折现图来展现,并且按照天来展示的。实际上,就是某一个时间范围之内的每一天的营业额。同时,不管光标放在哪个点上,那么它就会把具体的数值展示出来。并且还需要注意日期并不是固定写死的,是由上边时间选择器来决定。比如选择是近7天、或者是近30日,或者是本周,就会把相应这个时间段之内的每一天日期通过横坐标展示。

原型图 :

2 业务规则

  • 营业额,指订单状态为已完成的订单金额合计

  • 基于可视化报表的折线图展示营业额数据,X轴为日期,Y轴为营业额

  • 根据时间选择区间,展示每天的营业额数据

3 接口设计

通过上述原型图,设计出对应的接口。

注意:具体返回数据一般由前端来决定,前端展示图表,具体折现图对应数据是什么格式,是有固定的要求的。 所以说,后端需要去适应前端,它需要什么格式的数据,我们就给它返回什么格式的数据。

2. 代码开发

//在sky-pojo模块,TurnoverReportVO.java已定义

package com.sky.vo;

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

import java.io.Serializable;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TurnoverReportVO implements Serializable {

    //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
    private String dateList;

    //营业额,以逗号分隔,例如:406.0,1520.0,75.0
    private String turnoverList;

}


--------------
//创建ReportController
//根据接口定义创建ReportController:

package com.sky.controller.admin;

import com.sky.result.Result;
import com.sky.service.ReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;

@RestController
@Api(tags = "数据统计相关接口")
@RequestMapping("/admin/report")
public class ReportController {
    @Autowired
    private ReportService reportService;

    @GetMapping("/turnoverStatistics")
    @ApiOperation("营业额统计接口")
    public Result turnoverStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                                     @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
        return reportService.turnoverStatistics(begin, end);
    }
}


-------------
//创建ReportService

package com.sky.service;

import com.sky.result.Result;

import java.time.LocalDate;

public interface ReportService {
    /**
     * 统计营业额
     * @param begin
     * @param end
     * @return
     */
    Result turnoverStatistics(LocalDate begin, LocalDate end);
}


-------------
//ReportServiceImpl

package com.sky.service.impl;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.sky.mapper.OrderMapper;
import com.sky.result.Result;
import com.sky.service.ReportService;
import com.sky.vo.TurnoverReportVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class ReportServiceImpl implements ReportService {
    @Autowired
    private OrderMapper orderMapper;

    @Override
    public Result turnoverStatistics(LocalDate begin, LocalDate end) {
        TurnoverReportVO vo = new TurnoverReportVO();

        List<LocalDate> dateList = new ArrayList<>();
        List<Double> amountList = new ArrayList<>();
        while (!(begin.isAfter(end))) {
            //1. 把日期添加到dateList里
            dateList.add(begin);
            //2. 查询这一天的营业额,添加到amountList里
            LocalDateTime startOfDay = LocalDateTime.of(begin, LocalTime.MIN);
            LocalDateTime endOfDay = LocalDateTime.of(begin, LocalTime.MAX);
            Double amount = orderMapper.sumAmountByDate(startOfDay, endOfDay);
            amount = amount == null ? 0D : amount;
            amountList.add(amount);

            //3. 到下一天
            begin = begin.plusDays(1);
        }

        //dateList 日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
        String dateListStr = dateList.stream()
                .map(localDate -> localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
                .collect(Collectors.joining(","));
        vo.setDateList(dateListStr);

        //turnoverList  营业额,以逗号分隔,例如:406.0,1520.0,75.0
        String turnoverListStr = amountList.stream()
                .map(Object::toString)
                .collect(Collectors.joining(","));
        vo.setTurnoverList(turnoverListStr);
        return Result.success(vo);
    }
}


------------
//OrderMapper

@Select("select sum(amount) from orders where status = 5 and order_time between #{start} and #{end}")
Double sumAmountByDate(LocalDateTime start, LocalDateTime end);

3. 功能测试

可以通过如下方式进行测试:

  • 接口文档测试

  • 前后端联调测试

启动服务器,启动nginx,直接采用前后端联调测试。

进入数据统计模块

1). 查看近7日营业额统计

 

2). 查看近30日营业额统计

 

进入开发者模式,查看返回数据

 也可通过断点方式启动,查看每步执行情况。

三、用户统计

1. 需求分析和设计

1 产品原型

所谓用户统计,实际上统计的是用户的数量。通过折线图来展示,上面这根蓝色线代表的是用户总量,下边这根绿色线代表的是新增用户数量,是具体到每一天。所以说用户统计主要统计两个数据,一个是总的用户数量,另外一个是新增用户数量

原型图 :

2 业务规则

  • 基于可视化报表的折线图展示用户数据,X轴为日期,Y轴为用户数

  • 根据时间选择区间,展示每天新增用户量,和截止到当天的用户总量和

3 接口设计

根据上述原型图设计接口。

2. 代码开发

//在sky-pojo模块,UserReportVO.java已定义

package com.sky.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserReportVO implements Serializable {

    //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
    private String dateList;

    //用户总量,以逗号分隔,例如:200,210,220
    private String totalUserList;

    //新增用户,以逗号分隔,例如:20,21,10
    private String newUserList;

}


--------------
//ReportController

@GetMapping("/userStatistics")
@ApiOperation("用户统计接口")
public Result userStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                             @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
    return reportService.userStatistics(begin, end);
}


-------------
//ReportService

    /**
     * 统计用户
     * @param begin
     * @param end
     * @return
     */
    Result userStatistics(LocalDate begin, LocalDate end);

------------
//ReportServiceImpl

@Override
public Result userStatistics(LocalDate begin, LocalDate end) {
    UserReportVO vo = new UserReportVO();

    List<LocalDate> dateList = new ArrayList<>();
    List<Integer> totalCountList = new ArrayList<>();
    List<Integer> newCountList = new ArrayList<>();
    while (!(begin.isAfter(end))) {
        //把日期加到dateList集合里
        dateList.add(begin);

        //获取截止到当天的用户总量 select count(*) from user where create_time <= 当天日期
        LocalDateTime endOfDay = LocalDateTime.of(begin, LocalTime.MAX);
        Integer totalCount = userMapper.countByDate(null, endOfDay);
        totalCountList.add(totalCount==null?0:totalCount);

        //获取当天的新用户数量 select count(*) from user where create_time between 当天日期开始时间 and 当天日期结束时间
        LocalDateTime startOfDay = LocalDateTime.of(begin, LocalTime.MIN);
        Integer newCount = userMapper.countByDate(startOfDay, endOfDay);
        newCountList.add(newCount==null?0:newCount);

        //到下一天
        begin = begin.plusDays(1);
    }

    //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
    String dateListStr = dateList.stream()
        .map(date -> date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
        .collect(Collectors.joining(","));
    vo.setDateList(dateListStr);

    //用户总量,以逗号分隔,例如:200,210,220
    String totalListStr = totalCountList.stream()
        .map(Objects::toString)
        .collect(Collectors.joining(","));
    vo.setTotalUserList(totalListStr);

    //新增用户,以逗号分隔,例如:20,21,10
    String newListStr = newCountList.stream()
        .map(Objects::toString)
        .collect(Collectors.joining(","));
    vo.setNewUserList(newListStr);

    return Result.success(vo);
}


-------------
//UserMapper

/**
 * 统计指定日期范围内的用户数量
 */
Integer countByDate(LocalDateTime startOfDay, LocalDateTime endOfDay);


-------------
//UserMapper.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.sky.mapper.UserMapper">
    <select id="countByDate" resultType="int">
        select count(*) from user
        <where>
            <if test="startOfDay!=null">
                and create_time >= #{startOfDay}
            </if>
            <if test="endOfDay!=null">
                and create_time &lt;= #{endOfDay}
            </if>
        </where>
    </select>
</mapper>

 3. 功能测试

可以通过如下方式进行测试:

  • 接口文档测试

  • 前后端联调测试

进入数据统计模块

1). 查看近7日用户统计

进入开发者模式,查看返回数据

2). 查看近30日用户统计

进入开发者模式,查看返回数据

也可通过断点方式启动,查看每步执行情况。

四、订单统计

1. 需求分析和设计

1 产品原型

订单统计通过一个折现图来展现,折线图上有两根线,这根蓝色的线代表的是订单总数,而下边这根绿色的线代表的是有效订单数,指的就是状态是已完成的订单就属于有效订单,分别反映的是每一天的数据。上面还有3个数字,分别是订单总数、有效订单、订单完成率,它指的是整个时间区间之内总的数据。

原型图:

2 业务规则

  • 有效订单,指状态为 “已完成” 的订单

  • 基于可视化报表的折线图展示订单数据,X轴为日期,Y轴为订单数量

  • 根据时间选择区间,展示每天的订单总数和有效订单数

  • 展示所选时间区间内的有效订单数、总订单数、订单完成率,订单完成率 = 有效订单数 / 总订单数 * 100%

3 接口设计

根据上述原型图设计接口。

2. 代码开发

//在sky-pojo模块,OrderReportVO.java已定义

package com.sky.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderReportVO implements Serializable {

    //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
    private String dateList;

    //每日订单数,以逗号分隔,例如:260,210,215
    private String orderCountList;

    //每日有效订单数,以逗号分隔,例如:20,21,10
    private String validOrderCountList;

    //订单总数
    private Integer totalOrderCount;

    //有效订单数
    private Integer validOrderCount;

    //订单完成率
    private Double orderCompletionRate;

}


--------------
//ReportController

@GetMapping("/ordersStatistics")
@ApiOperation("订单统计接口")
public Result orderStatistics(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                              @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
    return reportService.orderStatistics(begin, end);
}


--------------
//ReportService

    /**
     * 统计订单
     * @param begin
     * @param end
     * @return
     */
    Result orderStatistics(LocalDate begin, LocalDate end);


--------------
//ReportServiceImpl

@Override
public Result orderStatistics(LocalDate begin, LocalDate end) {
    OrderReportVO vo = new OrderReportVO();
    List<LocalDate> dateList = new ArrayList<>();
    List<Integer> countList = new ArrayList<>();
    List<Integer> completeCountList = new ArrayList<>();

    while (!(begin.isAfter(end))) {
        //把日期添加到dateList里
        dateList.add(begin);

        //统计当天的订单数量
        LocalDateTime startOfDay = LocalDateTime.of(begin, LocalTime.MIN);
        LocalDateTime endOfDay = LocalDateTime.of(begin, LocalTime.MAX);
        Integer count = orderMapper.countStatistics(startOfDay, endOfDay, null);
        countList.add(count==null?0:count);

        //统计当天的有效订单数量
        Integer completeCount = orderMapper.countStatistics(startOfDay, endOfDay, Orders.COMPLETED);
        completeCountList.add(completeCount == null ? 0 : completeCount);

        //到下一天
        begin = begin.plusDays(1);
    }

    //日期,以逗号分隔,例如:2022-10-01,2022-10-02,2022-10-03
    String dateListStr = dateList.stream()
        .map(date -> date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
        .collect(Collectors.joining(","));
    vo.setDateList(dateListStr);

    //每日订单数,以逗号分隔,例如:260,210,215   select count(*) from orders where order_time >= ? and order_time <= ?
    String countListStr = countList.stream()
        .map(Objects::toString)
        .collect(Collectors.joining(","));
    vo.setOrderCountList(countListStr);

    //每日有效订单数,以逗号分隔,例如:20,21,10   select count(*) from orders where order_time >= ? and order_time <= ? and status = 5
    String completeListStr = completeCountList.stream()
        .map(Objects::toString)
        .collect(Collectors.joining(","));
    vo.setValidOrderCountList(completeListStr);

    //订单总数  select count(*) from orders
    Integer totalCount = countList.stream().reduce(Integer::sum).orElse(0);
    vo.setTotalOrderCount(totalCount);

    //有效订单数 select count(*) from orders where status = 5
    Integer completeCount = completeCountList.stream().reduce(Integer::sum).orElse(0);
    vo.setValidOrderCount(completeCount);

    //订单完成率 有效订单数/订单总数
    if (totalCount == 0) {
        vo.setOrderCompletionRate(0D);
    }else{
        vo.setOrderCompletionRate(1.0 * completeCount/totalCount);
    }

    return Result.success(vo);
}


-----------
//OrderMapper

/**
 * 根据日期范围和状态,统计订单数量
 */
Integer countStatistics(LocalDateTime startOfDay, LocalDateTime endOfDay, Integer status);


------------
//OrderMapper.xml

    <select id="countStatistics" resultType="int">
        select count(*) from orders
        <where>
            <if test="startOfDay!=null">
                and order_time >= #{startOfDay}
            </if>
            <if test="endOfDay!=null">
                and order_time &lt;= #{endOfDay}
            </if>
            <if test="status!=null">
                and status = #{status}
            </if>
        </where>
    </select>    

3. 功能测试

可以通过如下方式进行测试:

  • 接口文档测试

  • 前后端联调

重启服务,直接采用前后端联调测试。

进入数据统计模块

1). 查看近7日订单统计

2). 查看近30日订单统计

进入开发者模式,查看返回数据

也可通过断点方式启动,查看每步执行情况

五、销量排名Top10

1. 需求分析和设计

1 产品原型

所谓销量排名,销量指的是商品销售的数量。项目当中的商品主要包含两类:一个是套餐,一个是菜品,所以销量排名其实指的就是菜品和套餐销售的数量排名。通过柱形图来展示销量排名,这些销量是按照降序来排列,并且只需要统计销量排名前十的商品。

原型图:

2 业务规则

  • 根据时间选择区间,展示销量前10的商品(包括菜品和套餐)

  • 基于可视化报表的柱状图降序展示商品销量

  • 此处的销量为商品销售的份数

3 接口设计

2. 代码开发

//在sky-pojo模块,SalesTop10ReportVO.java已定义

package com.sky.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalesTop10ReportVO implements Serializable {

    //商品名称列表,以逗号分隔,例如:鱼香肉丝,宫保鸡丁,水煮鱼
    private String nameList;

    //销量列表,以逗号分隔,例如:260,215,200
    private String numberList;

}


-------------
//ReportController

@GetMapping("/top10")
@ApiOperation("查询销量排名top10接口")
public Result top10Dishes(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                          @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
    return reportService.top10Dishes(begin, end);
}


-------------
//ReportService

    /**
     * 查询销量排名top10接口
     * @param begin
     * @param end
     * @return
     */
    Result top10Dishes(LocalDate begin, LocalDate end);


------------
//ReportServiceImpl

@Override
public Result top10Dishes(LocalDate begin, LocalDate end) {
    SalesTop10ReportVO vo = new SalesTop10ReportVO();

    LocalDateTime start = LocalDateTime.of(begin, LocalTime.MIN);
    LocalDateTime stop = LocalDateTime.of(end, LocalTime.MAX);

    List<GoodsSalesDTO> salesTop10 = orderMapper.salesTop10(start, stop);

    //商品名称列表,以逗号分隔,例如:鱼香肉丝,宫保鸡丁,水煮鱼
    String names = salesTop10.stream()
        .map(GoodsSalesDTO::getName)
        .collect(Collectors.joining(","));
    vo.setNameList(names);

    //销量列表,以逗号分隔,例如:260,215,200
    String numbers = salesTop10.stream()
        .map(GoodsSalesDTO::getNumber)
        .map(Objects::toString)
        .collect(Collectors.joining(","));
    vo.setNumberList(numbers);

    return Result.success(vo);
}


-------------
//OrderMapper

/**
* 查询商品销量前10名
* @param begin
* @param end
*/
List<GoodsSalesDTO> salesTop10(LocalDateTime start, LocalDateTime stop);

------------
//OrderMapper.xml

<select id="salesTop10" resultType="com.sky.dto.GoodsSalesDTO">
    select od.name as name, sum(od.number) as number from orders o, order_detail od
    <where>
        o.id = od.order_id and o.status = 5
        <if test="start!=null">
            and o.order_time >= #{start}
        </if>
        <if test="stop!=null">
            and o.order_time &lt;= #{stop}
        </if>
    </where>
    group by od.name
    order by number desc
    limit 10
</select>

3. 功能测试

可以通过如下方式进行测试:

  • 接口文档测试

  • 前后端联调

重启服务,直接采用前后端联调测试。

查看近30日销量排名Top10统计

若查询的某一段时间没有销量数据,则显示不出效果。

进入开发者模式,查看返回数据

也可通过断点方式启动,查看每步执行情况。  

       

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

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

相关文章

Harmony鸿蒙南向驱动开发-DAC

DAC&#xff08;Digital to Analog Converter&#xff09;是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备。 DAC模块支持数模转换的开发。它主要用于&#xff1a; 作为过程控制计算机系统的输出通道&#xff0c;与执行器相连&#xff0c;实现对生产过程的自…

通过本机调试远端路由器非直连路由

实验目的&#xff1a;如图拓扑&#xff0c;通过本机电脑发&#xff0c;telnet调试远程AR4设备。 重点1&#xff1a;通过ospf路由协议配置拓扑网络&#xff0c;知识点&#xff1a;ospf配置路由器协议语法格式&#xff0c;area区域的定义&#xff0c;区域内网络的配置&#xff0…

蓝桥杯加训

1.两只塔姆沃斯牛&#xff08;模拟&#xff09; 思路&#xff1a;人和牛都记录三个数据&#xff0c;当前坐标和走的方向&#xff0c;如果人和牛的坐标和方向走重复了&#xff0c;那就说明一直在绕圈圈&#xff0c;无解 #include<iostream> using namespace std; const i…

idea keymap用eclipse的相关快捷键

idea快捷键用eclipse的方式 CtrlShiftR 搜索文件shiftshift 全部文件/类搜索CtrlH 全局搜索CtrlO 快速打开Outline大纲视图ctrle 查看recent窗口文件

排序算法,归并排序

归并排序是什么 归并排序&#xff08;Merge Sort&#xff09;是建立归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序&#xff0c;…

element UI table合并单元格方法

废话不多讲&#xff0c;直接上代码&#xff0c;希望能帮到需要的朋友 // 合并单元格function spanMethod({ row, column, rowIndex, columnIndex }) {//定义需要合并的列字段&#xff0c;有哪些列需要合并&#xff0c;就自定义添加字段即可const fields [declareRegion] // …

智能工业电脑在智慧电力中实现全程实时监控与调控

可视化编程工业电脑在化工、石油、电力等行业过程控制领域扮演着越来越重要的角色。这些基于ARM架构设计的嵌入式工业计算机凭借其高性能、低功耗以及出色的实时处理能力&#xff0c;有效提升了各行业生产过程的安全性和效率。 钡铼技术ARMxy系列采用嵌入式Linux 系统开发的产品…

Idea中 maven 下载jar出现证书问题

目录 1&#xff1a; 具体错误&#xff1a; 2&#xff1a; 忽略证书代码&#xff1a; 3&#xff1a; 关闭所有idea&#xff0c; 清除缓存&#xff0c; 在下面添加如上忽略证书代码 4&#xff1a;执行 maven clean 然后刷刷新依赖 完成&#xff0c;撒花&#xff01;&#x…

AIoT人工智能物联网----刷机、系统安装、示例、摄像头等

软件链接见文末 1. jetson nano硬件介绍 载板 模组卡座:放置核心板 micro SD卡接口:插SD卡,将操作系统写入SD卡,然后插入;建议至少为32GB。当然根据使用情况可以是64GB;卡的质量一定要好,读写速度快。之前买了同品牌128G的比64G的慢很多。所以大小合适就好M.2 Key E …

spark本地模拟多个task时如何启动多个Excutor

1、首先在9090端口下启动Excutor,作为第一个Excutor 2、然后修改9090端口为&#xff1a;9091&#xff0c;如下图点击Edit Configration 3、然后按下图操作 &#xff0c; 4、修改一下名字 5、点击apply&#xff0c;&#x1f197; 6、检查下面圈1是否是刚刚我们新建的MyExcutor(2…

基于PSO优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 GRU网络 4.3 注意力机制&#xff08;Attention&#xff09; 5.算法完整程序工程 1.算法运行效果图预览 优化前 优化…

【架构师】-- 浅淡架构的分类

什么是架构&#xff1f; 说到架构&#xff0c;这个概念没有很清晰的范围划分&#xff0c;也没有一个标准的定义&#xff0c;每个人的理解可能都不一样。 架构在百度百科中是这样定义的&#xff1a;架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描…

LeetCode 377——组合总和 Ⅳ

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题一看应该就是需要用到动态规划算法&#xff0c;假设我们以 f[d]表示总和为 d 的元素组合的个数&#xff0c;首先&#xff0c;我们遍历 nums 数组&#xff0c; 如果有 nums[i] < target&#xff0c;那么组…

React ant 点击导航条闪烁

问题 : 点击当前位置会出现闪一下的效果 另一种点击方式 , 不会闪 原因 : 没有传递具体的参数给点击事件 , 导致在函数内部无法准确判断要展示哪个子菜单&#xff0c;可能导致页面状态的短暂变化&#xff0c;出现闪烁效果 代码 : // 左侧子菜单弹出const showSonMenu routeK…

Word 画三线表模板---一键套用

1、制作三线表 1&#xff09;设置为无边框 选中表格&#xff0c;点击「右键」——「边框」——「无框线」。 2&#xff09;添加上下边框线 选中表格后&#xff0c;点击【右键】——【表格属性】——【边框和底纹】&#xff0c;边框线选择【1.5磅】&#xff0c;然后点击【上框…

(WSI分类)WSI分类文献小综述 2024

2024的WSI分类。 Multiple Instance Learning Framework with Masked Hard Instance Mining for Whole Slide Image Classification &#xff08;ICCV2024&#xff09; 由于阳性组织只占 Gi- gapixel WSI 的一小部分&#xff0c;因此现有的 MIL 方法直观上侧重于通过注意力机…

算法:day1

前缀树&#xff1a; class Trie {private Trie[] childrenIndex;// 该节点下一个可能出现的所有字符的链接private boolean isEnd;// 该节点是否是最后一个字符// 初始化根节点public Trie() {childrenIndex new Trie[26];isEnd false;}public void insert(String word) {// …

ArcGIS Desktop使用入门(四)工具箱——属性域

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

从ChatGPT到多模态大模型:现状与未来(多模态)

ChatGPT 训练的核心技术主要包括: 预训练语言模型;有监督微调;基于人类反馈的 强 化 学 习 (ReinforcementLearningfrom Human Feedback,RLHF) 首先,通过自监督预训练使语言模型从大规模语料库中学习语言规律,具备基础 理解和生成能力;然后,通过构造指令微调数据集 并对模型进…

部署GlusterFS群集

目录 一、部署GlusterFS群集 1. 服务器节点分配 2. 服务器环境&#xff08;所有node节点上操作&#xff09; 2.1 关闭防火墙 2.2 磁盘分区&#xff0c;并挂载 2.3 修改主机名&#xff0c;配置/etc/hosts文件 3. 安装、启动GlusterFS&#xff08;所有node节点上操作&…