当前位置: 首页 > news >正文

苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)

Spring Task介绍

应用场景:

  • 信用卡每月还款提醒
  • 银行贷款每月还款提醒
  • 火车票销售系统处理未付款订单
  • 入职纪念日为用户发送通知

cron表达式

cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间。

构成规则:分为6或7个域,由空格分隔,每个域代表一个含义。

每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)。

秒 分钟 小时 日 月 周 年 

2022年10月12日上午9点整对应的cron表达式为:0 0 9 12 10 ? 2022

cron表达式在线生成器:Cron在线生成器 | 程序员导航网

Spring Task 使用步骤:

  1. 导入 Maven 坐标 spring-context(已存在)
  2. 在启动类添加注解 @EnableScheduling 开启任务调度
  3. 自定义定时任务类,新建一个Task包
    @Component
    @Slf4j
    public class MyTask {@Scheduled(cron = "0/5 * * * * ?") // 每五秒触发public void executeTask(){log.info("定时任务开始执行:{}", new Date());}
    }

订单状态定时处理 

@Component  // 将该类标记为Spring组件,以便自动扫描和管理  
@Slf4j  // 使用Lombok的@Slf4j注解,自动生成日志记录器  
public class OrderTask {  @Autowired  // 自动注入OrderMapper依赖  private OrderMapper orderMapper;  @Scheduled(cron = "0 * * * * ?")  // 每分钟执行一次  public void processTimeoutOrder() {  log.info("定时处理超时订单 {}", LocalDateTime.now());  // 记录当前时间的日志  // 当前时间减去15分钟  LocalDateTime time = LocalDateTime.now().plusMinutes(-15);  // 查询状态为待付款且订单时间早于当前时间减去15分钟的订单  List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT, time);  // 如果查询到的订单列表不为空  if (ordersList != null && ordersList.size() > 0) {  for (Orders orders : ordersList) {  // 将订单状态设置为已取消  orders.setStatus(Orders.CANCELLED);  // 设置取消原因  orders.setCancelReason("订单超时,自动取消");  // 设置取消时间为当前时间  orders.setCancelTime(LocalDateTime.now());  // 更新订单信息  orderMapper.update(orders);  }  }  }  @Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行  public void processDeliveryOrder() {  log.info("定时处理配送中的订单 {}", LocalDateTime.now());  // 记录当前时间的日志  // 当前时间减去60分钟  LocalDateTime time = LocalDateTime.now().plusMinutes(-60);  // 查询状态为配送中且订单时间早于当前时间减去60分钟的订单  List<Orders> ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS, time);  // 如果查询到的订单列表不为空  if (ordersList != null && ordersList.size() > 0) {  for (Orders orders : ordersList) {  // 将订单状态设置为已完成  orders.setStatus(Orders.COMPLETED);  // 更新订单信息  orderMapper.update(orders);  }  }  }  
}

WebSocket

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输。

HTTP协议和WebSocket协议对比:

  • HTTP是短连接
  • WebSocket是长连接
  • HTTP通信是单向的,基于请求响应模式
  • WebSocket支持双向通信
  • HTTP和WebSocket底层都是TCP连接

 选择使用 HTTP 协议还是 WebSocket 协议?

使用 HTTP 协议的情况

  1. 请求-响应结构

    • 如果你的应用主要以传统的请求-响应方式工作(例如,加载网页、提交表单等),那么 HTTP 是更合适的。
  2. 无持续连接

    • HTTP 适合于短暂的连接需求,每个请求和响应都是独立的。
  3. 安全和缓存

    • HTTP 支持缓存机制,可以提高静态资源的加载速度,同时可以通过 HTTPS 实现安全传输。
  4. 简单性

    • 对于相对简单的应用,使用 HTTP 通信更为直观和易于实现。

使用 WebSocket 协议的情况

  1. 实时双向通信

    • 当应用需要实时数据交换,如在线聊天、游戏、股票行情更新等,WebSocket 是更好的选择。
  2. 低延迟和高频率数据传输

    • WebSocket 允许在客户端和服务器之间建立持久连接,适用于需要频繁更新或低延迟的数据传输场景。
  3. 高效数据传输

    • WebSocket 在数据传输上比 HTTP 更为高效,因为它减少了开销,适合大规模应用。
  4. 无需频繁连接和断开

    • 如果应用需要保持长连接,WebSocket 可以避免频繁的连接和断开,节省资源和时间。

总结

  • HTTP:适用于传统请求-响应式的应用,简单和一次性的通信。
  • WebSocket:适用于需要实时、双向且高效沟通的应用。

WebSocket入门案例

导入坐标

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

 导完坐标之后新建配置类,使WebSocket的第三方bean由ioc容器管理

@Configuration
public class WebSocketConfiguration {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}

添加websocket的实体类

/*** WebSocket服务*/
@Component
@ServerEndpoint("/ws/{sid}")
public class WebSocketServer {//存放会话对象private static Map<String, Session> sessionMap = new HashMap();/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session, @PathParam("sid") String sid) {System.out.println("客户端:" + sid + "建立连接");sessionMap.put(sid, session);}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, @PathParam("sid") String sid) {System.out.println("收到来自客户端:" + sid + "的信息:" + message);}/*** 连接关闭调用的方法** @param sid*/@OnClosepublic void onClose(@PathParam("sid") String sid) {System.out.println("连接断开:" + sid);sessionMap.remove(sid);}/*** 群发,服务器给客户端发送** @param message*/  
public void sendToAllClient(String message) {  Collection<Session> sessions = sessionMap.values();  // 获取所有客户端会话  for (Session session : sessions) {  // 遍历每个会话  try {  // 服务器向客户端发送消息  session.getBasicRemote().sendText(message);  // 发送文本消息  } catch (Exception e) {  e.printStackTrace();  // 捕获并打印异常  }  }  }}

苍穹外卖跳过微信支付同时保证可以收到订单功能

苍穹外卖遇到问题(包括跳过微信支付、nodejs不兼容等)-CSDN博客

来单提醒功能代码开发

需求分析和设计

  • 通过WebSocket实现管理端页面和服务端保持长连接状态
  • 当客户支付后,调用WebSocket的相关API实现服务端向客户端推送消息
  • 客户端浏览器解析服务端推送的消息,判断是来单提醒还是客户催单,进行相应的消息提示和语音播报
  • 约定服务端发送给客户端浏览器的数据格式为JSON,字段包括:type, orderId, content
    • type 为消息类型,1为来单提醒 2为客户催单
    • orderId 为订单id
    • content 为消息内容
/*** 订单支付* @param ordersPaymentDTO* @return*/public OrderPaymentVO payment(OrdersPaymentDTO ordersPaymentDTO) throws Exception {// 当前登录用户idLong userId = BaseContext.getCurrentId();User user = userMapper.getById(userId);JSONObject jsonObject = new JSONObject();jsonObject.put("code","ORDERPAID");OrderPaymentVO vo = jsonObject.toJavaObject(OrderPaymentVO.class);vo.setPackageStr(jsonObject.getString("package"));Integer OrderPaidStatus = Orders.PAID;//支付状态,已支付Integer OrderStatus = Orders.TO_BE_CONFIRMED;  //订单状态,待接单LocalDateTime check_out_time = LocalDateTime.now();//更新支付时间orderMapper.updateStatus(OrderStatus, OrderPaidStatus, check_out_time, this.os.getId());//通过websocket向客户端浏览器推送消息 type orderId contentMap map = new HashMap();map.put("type",1);map.put("orderId",this.os.getId());map.put("content","订单号:"+this.os.getNumber());String json = JSON.toJSONString(map);webSocketServer.sendToAllClient(json);return vo;}

如上面的代码,用户支付成功之后修改数据库中记录的订单的状态为已支付,然后发送websocket响应给管理端admin,然后在controller层发送vo实体类的响应给小程序用户端。

//通过websocket向客户端浏览器推送消息 type orderId content
Map map = new HashMap();
map.put("type",1);
map.put("orderId",this.os.getId());
map.put("content","订单号:"+this.os.getNumber());
String json = JSON.toJSONString(map);
webSocketServer.sendToAllClient(json);
return vo; // 发送给小程序端

管理员的浏览器端接收websocket响应。

深入了解websocket

  • websocket使用前一定要建立通信的信道,这样就可以实现双方的相互通信。
  • WebSocket通信通常是由前端负责打开和关闭的,一旦连接建立,前端和后端可以通过这个通道双向发送和接收消息。

客户催单

// controller层
//客户催单@GetMapping("/reminder/{id}")@ApiOperation("客户端提醒")public Result reminder(@PathVariable("id") Long id){orderService.reminder(id);return Result.success();}// service层
public void reminder(Long id) {// 根据id查询订单Orders ordersDB = orderMapper.getById(id);// 校验订单是否存在if (ordersDB == null) {throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}Map map = new HashMap();map.put("type", 2); // 类型map.put("orderId", id);map.put("content", "订单号: " + ordersDB.getNumber());// 发送websocket消息webSocketServer.sendToAllClient(JSON.toJSONString(map));}

相关文章:

苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)

Spring Task介绍 应用场景&#xff1a; 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触发的时间。 构成规则&#xff1a;分为6或7个域&…...

IDEA的常用设置

目录 一、显示顶部工具栏 二、设置编辑区字体按住鼠标滚轮变大变小&#xff08;看需要设置&#xff09; 三、设置自动导包和优化导入的包&#xff08;有的时候还是需要手动导包&#xff09; 四、设置导入同一个包下的类&#xff0c;超过指定个数的时候&#xff0c;合并为*&a…...

【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则

在 Go 语言中&#xff0c;字符串的比较是基于字典顺序进行的。 字典顺序的比较规则&#xff1a; 比较两个字符串从左到右逐个字符的Unicode码点值&#xff0c; 若比较结果不相等则将此结果作为字符串大小的结果&#xff0c; 若比较结果相等则比较下一位&#xff0c; 若其中一个…...

3d打印材料是塑料么?pla petg

3D 打印材料不仅限于塑料&#xff0c;但塑料确实是最常见的材料类型之一。以下是一些常用的3D打印塑料材料的介绍&#xff1a; 1. PLA&#xff08;聚乳酸&#xff09; • 特点&#xff1a;可生物降解&#xff0c;环保&#xff0c;容易打印&#xff0c;表面光滑。 • 适用…...

HTML5 语义元素:网页构建的新时代

HTML5 语义元素&#xff1a;网页构建的新时代 HTML5&#xff0c;作为网页开发的新标准&#xff0c;引入了一系列语义元素&#xff0c;这些元素不仅为网页内容提供了明确的含义&#xff0c;还极大地提高了网页的可访问性和搜索引擎优化&#xff08;SEO&#xff09;效果。本文将…...

下载导出Tomcat上的excle文档,浏览器上显示下载

目录 1.前端2.Tomcat服务器内配置3.在Tomcat映射的文件内放置文件4.重启Tomcat&#xff0c;下载测试 1.前端 function downloadFile() {let pictureSourceServer "http://192.168.1.1:8080/downFile/";let fileName "测试文档.xlsx";let fileURL pictu…...

Edge浏览器内置的截长图功能

Edge浏览器内置截图功能 近年来&#xff0c;Edge浏览器不断更新和完善&#xff0c;也提供了长截图功能。在Edge中&#xff0c;只需点击右上角的“...”&#xff0c;然后选择“网页捕获”->“捕获整页”&#xff0c;即可实现长截图。这一功能的简单易用&#xff0c;使其成为…...

【测试】持续集成CI/CD

近期更新完毕&#xff0c;建议关注收藏点赞&#xff5e; 目录 概括gitJenkinspostman集成jenkins代码集成jenkins 概括 CI/CD stands for Continuous Integration and Continuous Deployment 定义 团队成果持续集成到公共平台。一天可以集成1次or多次 本地代码管理 git 远程代…...

大数据数据治理精讲

前言 首先明确&#xff0c;数据治理是一个很大的概念。 在许多与数据相关的文章中&#xff0c;我们经常能看到“数据治理”这一术语。从字面意思来看&#xff0c;它主要强调对数据进行有效管理。作为数据基础支撑工作的一部分&#xff0c;数据治理的重要性不言而喻。在日常工作…...

Spring Boot项目中增加MQTT对接

在Spring Boot项目中增加MQTT对接&#xff0c;通常涉及以下几个步骤&#xff1a; 一、搭建MQTT服务器 首先&#xff0c;你需要搭建一个MQTT服务器&#xff08;Broker&#xff09;。这可以通过多种方式实现&#xff0c;例如使用Docker来部署EMQX或Mosquitto等MQTT Broker。 以…...

Python自学 - 类进阶(迭代器)

<< 返回目录 1 Python自学 - 类进阶(迭代器) 迭代器是一个实现了 __iter__ 和 __next__ 方法的对象。实现这两个方法是Python迭代行为一种约定。   为什么要用迭代器&#xff1f;迭代器的好处是不占内存&#xff0c;它并不会像列表一样&#xff0c;把每个成员都占满。…...

FreePBX 17 on ubuntu24 with Asterisk 20

版本配置&#xff1a; FreePBX 17&#xff08;最新&#xff09; Asterisk 20&#xff08;最新Asterisk 22&#xff0c;但是FreePBX 17最新只支持Asterisk 21&#xff0c;但是21非LTS版本&#xff0c;所以选择Asterisk 20&#xff09; PHP 8.2 Maria DB (v10.11) Node J…...

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现&#xff0c;并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架&#xff0c;帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …...

[应用类App] 轮廓线 aia源码 UI界面精美,画布实现手柄摇杆

屏幕数量&#xff1a;10个&#xff0c;仅主界面近3000代码块&#xff0c;请自行研究参考。 实现了手柄摇杆功能&#xff0c;界面做的比较好。 下载地址&#xff1a;轮廓线 aia源码 UI界面精美&#xff0c;画布实现手柄摇杆 - .aia 案例源码 - 清泛IT社区&#xff0c;为创新赋能…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)

通过左侧导航菜单〖业务建模〗→〖业务对象〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的业务对象&#xff1b; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b; 新建页面左侧…...

uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件&#xff0c;某个表单需求&#xff0c;单位性质字段如果是高校&#xff0c;那么工作单位则是高校的下拉选择格式&#xff0c;单位性质如果是其他的类型&#xff0c;工作单位则是手动…...

JVM 触发类加载的条件有哪些?

目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时&#xff0c;先初始化父类 2.5、虚拟机启动时&#xff0c;初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…...

01 springboot集成mybatis后密码正确但数据库连接失败

01 springboot集成mybatis后密码正确但数据库连接失败 问题描述&#xff1a; 1.datasource配置&#xff1a; //application.yaml spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&serverTime…...

学习threejs,导入assimp assimp2json格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AssimpJSONLoader as…...

NLTK分词以及处理方法

在自然语言处理(NLP)的领域中,文本的处理是一个基础且核心的环节,特别是在大规模数据分析和文本挖掘中。无论是聊天机器人、情感分析,还是机器翻译,分词都是必不可少的步骤之一。分词的目的是将长篇的文本拆解为较小的单位(如单词或句子),这些单位是后续分析和处理的基…...

容器技术全面攻略:Docker的硬核玩法

文章背景 想象一下&#xff0c;一个项目终于要上线了&#xff0c;结果因为环境配置不一致&#xff0c;测试服务器一切正常&#xff0c;生产环境却宕机了。这是开发者噩梦的开始&#xff0c;也是Docker救世主角色的登场&#xff01;Docker的出现颠覆了传统环境配置的方式&#…...

什么是顶级思维?

在现代社会&#xff0c;我们常常听到“顶级思维”这个概念&#xff0c;但究竟什么才是顶级思维&#xff1f;它又是如何影响一个人的成功和幸福呢&#xff1f;今天&#xff0c;我们就来探讨一下顶级思维的几个关键要素&#xff0c;并分享一些实用的生活哲学。 1. 身体不适&…...

Chromium 132 编译指南 Windows 篇 - 配置核心环境变量 (三)

1. 引言 在之前的 Chromium 编译指南系列文章中&#xff0c;我们已经完成了编译前的准备工作以及 depot_tools 工具的安装与配置。本篇我们将聚焦于 Chromium 编译过程中至关重要的环境变量设置&#xff0c;这些配置是您顺利进行 Chromium 构建的基石。 2. 启用本地编译&…...

Linux查看服务器日志

一、tail 这个是我最常用的一种查看方式 用法如下&#xff1a; tail -n 10 test.log 查询日志尾部最后10行的日志; tail -n 10 test.log 查询10行之后的所有日志; tail -fn 10 test.log 循环实时查看最后1000行记录(最常用的)一般还会配合着grep用&#xff…...

Docker 专栏 —— Dockerfile 指令详解

文章目录 ADD 复制文件COPY 复制文件ARG 设置构建参数CMD 容器启动命令ENTRYPOINT ⼊⼝点ENV 设置环境变量EXPOSE 声明暴露的端⼝FROM 指定基础镜像LABEL 为镜像添加元数据MAINTAINER 指定维护者的信息RUN 执⾏命令USER 设置⽤户VOLUME 指定挂载点WORKDIR 指定⼯作⽬录 ADD 复制…...

IntelliJ IDEA 优化设置

针对 Java 开发&#xff0c;IntelliJ IDEA 有许多优化设置&#xff0c;可以帮助提高代码编写、调试、构建和运行的效率。以下是一些针对 Java 开发的优化建议&#xff1a; 1. 增加 JVM 内存和性能优化 增加堆内存: 通过调整 idea.vmoptions 文件&#xff0c;增加 IntelliJ ID…...

git打补丁

1、应用场景 跨仓库升级 开发项目B使用的是开源项目A。开源项目A发现漏洞&#xff0c;作者进行了修复&#xff0c;我们可以通过使用git补丁的方式&#xff0c;将作者修改的内容复制到我 们的项目B中。 2、TortoiseGit方式 源仓库 格式化补丁 根据提交数量&#xff0c;生成…...

开源CMS建站系统的安全优势有哪些?

近年来&#xff0c;用户们用开源CMS系统搭建网站的比例也越来越高&#xff0c;它为用户提供了便捷的网站建设解决方案。其中&#xff0c;亿坊CMS建站系统更因安全方面备受用户欢迎&#xff0c;下面带大家一起全面地了解一下。 一、什么是开源CMS&#xff1f; 开源CMS指的是那…...

【linux系统之redis6】redis的基础命令使用及springboot连接redis

redis的基础命令很多&#xff0c;大部分我们都可以在官网上找到&#xff0c;真的用的时候可以去官网找&#xff0c;不用全部记住这些命令 redis通用的基础命令的使用 代码测试 string类型常见的命令 key值的结构&#xff0c;可以区分不同的需求不同的业务名字 hash类型 创建…...

HDFS异构存储和存储策略

一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常&#xff0c;公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用&#xff0c;从而该数据被标记为"热"数据。随着时间的推移&#xff0c;存储的数据每周…...

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意&#xff1a;保存哦&#xff01;ctrlS 三、测试 按住ctrl鼠标滚轮&#xff0c;控制字体大小...

全面教程:Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置

全面教程&#xff1a;Nacos 2.4.2 启用鉴权与 MySQL 数据存储配置 1. 配置 Nacos 开启鉴权功能 1.1 修改 application.properties 配置文件 在 Nacos 2.4.2 中&#xff0c;开启鉴权功能需要修改 conf/application.properties 文件。按照以下方式配置&#xff1a; # 开启鉴权…...

pycharm-pyspark 环境安装

1、环境准备&#xff1a;java、scala、pyspark、python-anaconda、pycharm vi ~/.bash_profile export SCALA_HOME/Users/xunyongsun/Documents/scala-2.13.0 export PATH P A T H : PATH: PATH:SCALA_HOME/bin export SPARK_HOME/Users/xunyongsun/Documents/spark-3.5.4-bin…...

论文解析 | 基于语言模型的自主代理调查

论文 《A Survey on Large Language Model-based Autonomous Agents》 对基于大型语言模型&#xff08;LLM&#xff09;的自主智能体&#xff08;Autonomous Agents&#xff09;进行了全面调查。随着大型语言模型&#xff08;如 GPT 系列、BERT、T5 等&#xff09;的快速发展&a…...

Jupyter Notebook 安装PyTorch

1、判断当前环境 通过如下命令可以看出是Anaconda 环境 2、Anaconda 环境安装 PyTorch 2.1 要执行的命令 如果你使用的是 Anaconda 环境&#xff0c;可以使用以下命令来安装 PyTorch&#xff1a; conda install pytorch -c pytorch 2.2 执行遇到的问题&#xff1a;没有权…...

计算机网络之---ICMP协议与Ping命令

ICMP 协议 ICMP (Internet Control Message Protocol) 是一种网络层协议&#xff0c;主要用于在 IP 网络中传递控制消息。ICMP 主要用于网络设备之间的故障报告和诊断&#xff0c;帮助设备检测网络连接问题。它是 IP 协议的核心部分之一&#xff0c;用于发送错误消息和操作信息…...

Flutter项目开发模版,开箱即用(Plus版本)

前言 当前案例 Flutter SDK版本&#xff1a;3.22.2 本文&#xff0c;是由这两篇文章 结合产出&#xff0c;所以非常建议大家&#xff0c;先看完这两篇&#xff1a; Flutter项目开发模版&#xff1a; 主要内容&#xff1a;MVVM设计模式及内存泄漏处理&#xff0c;涉及Model、…...

工作效率提升:使用Anaconda Prompt 创建虚拟环境总结

目录 完整顺序命令流程&#xff08;直接照着改就行&#xff09;详细步骤解析&#xff08;想要详细解析的看过来&#xff09;1. 创建一个用于存储 Conda 环境的目录&#xff08;可选&#xff09;2. 创建新的 Conda 虚拟环境并指定路径3. 激活新创建的环境4. 安装 Jupyter Notebo…...

MySQL学习笔记2【函数/约束/多表查询】

MySQL学习笔记 函数 字符串函数 函数功能CONCAT(s1, s2, …, sn)字符串拼接&#xff0c;将s1, s2, …, sn拼接成一个字符串LOWER(str)将字符串全部转为小写UPPER(str)将字符串全部转为大写LPAD(str, n, pad)左填充&#xff0c;用字符串pad对str的左边进行填充&#xff0c;达到…...

Pathview包:整合表达谱数据可视化KEGG通路

Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包&#xff0c;其会先下载KEGG官网上的通路图&#xff0c;然后整合输入数据对通路图进行再次渲染&#xff0c;从而对KEGG通路图进行一定程度上的个性化处理&#xff0c;并且丰富其信息展示。&#xff08;KEGG在线数…...

利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情

在当今数字化时代&#xff0c;数据是商业决策的关键。对于从事国际贸易的商家来说&#xff0c;精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台&#xff0c;拥有海量的商品数据。通过 Java 爬虫技术&#xff0c;我们可以高效地从 yiwugo 根据商品 ID 获取详细…...

Word 转成pdf及打印的开源方案支持xp

Word转成pdf、打印的方案几乎没有免费开源的方案&#xff0c;现在提供一个通过LibreOffice实现的方案 操作依赖LibreOffice需要安装&#xff0c;点此下载老版本 5.4.7.2是最后一个支持xp的 版本如需xp要请安装此版本 LibreOffice官方介绍 LibreOffice 是一款开放源代码的自…...

2025年第三届“华数杯”国际赛B题解题思路与代码(Matlab版)

问题1&#xff1a;产业关联性分析 在 question1.m 文件中&#xff0c;我们分析了中国主要产业之间的相互关系。以下是代码的详细解读&#xff1a; % 问题1&#xff1a;分析中国主要产业之间的相互关系function question1()% 清空工作区和命令窗口clear;clc;% 设置中文显示set…...

pandas与sql对应关系【帮助sql使用者快速上手pandas】

本页旨在提供一些如何使用pandas执行各种SQL操作的示例&#xff0c;来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…...

<C++> XlsxWriter写EXCEL

XlsxWriter XlsxWriter是一个用于创建和写入Excel 2007及以上版本&#xff08;.xlsx文件格式&#xff09;的C库。以下是对XlsxWriter的详细介绍&#xff1a; 主要功能 文本、数字和公式写入&#xff1a;可以向多个工作表中写入文本、数字和公式。格式设置&#xff1a;支持丰…...

PySpark广播表连接解决数据倾斜的完整案例

使用PySpark解决数据倾斜问题的完整案例&#xff0c;通过广播表连接的方式来优化性能。 准备数据 假设我们有两张表&#xff0c;一张大表 big_table 和一张小表 small_table &#xff0c;小表将作为广播表。 from pyspark.sql import SparkSession# 初始化SparkSession spar…...

seleniun 自动化程序,python编程 我监控 chrome debug数据后 ,怎么获取控制台的信息呢

python 好的&#xff0c;使用 Python 来监控 Chrome 的调试数据并获取控制台信息&#xff0c;可以使用 websocket-client 库来连接 Chrome 的 WebSocket 接口。以下是一个详细的示例&#xff1a; 1. 安装必要的库 首先&#xff0c;你需要安装 websocket-client 库。可以使用…...

Java Web开发进阶——Spring Boot与Thymeleaf模板引擎

Thymeleaf 是一个现代化的、功能强大的 Java 模板引擎&#xff0c;常用于生成 Web 应用程序的视图。它与 Spring Boot 的集成十分方便&#xff0c;并且提供了丰富的功能&#xff0c;能够帮助开发者实现动态渲染数据、处理表单、页面控制等操作。下面&#xff0c;我们将详细探讨…...

【“软件工程”基础概念学习】

基础和相关概念 英文&#xff1a;Software Engineering 软&#xff1a;物体内部的组织疏松&#xff0c;受外力作用后容易改变形状软件&#xff1a; 计算机系统的组成部分&#xff0c;是指挥计算机进行计算、判断、处理信息的程序系统。通常分为系统软件和应用软件。借指某项活…...

C语言基本知识复习浓缩版:控制语句--分支

选择结构 if语句 if控制语句 #include <stdio.h>int main() { int hour; float money; printf("请输入上网小时数&#xff1a;"); scanf("%d", &hour); if (hour <10) { money 30; }else if (hour >10 && hour <50) { mone…...