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

虚拟电商-话费充值业务(六)话费充值业务回调补偿

一、话费充值回调业务补偿

业务需求:供应商对接下单成功后充吧系统将订单状态更改为:等待确认中,此时等待供应商系统进行回调,当供应商系统回调时说明供应商充值成功,供应商回调充吧系统将充吧的订单改为充值成功,如果在这个过程中出现了故障,比如供应商没有回调,或者回调过程中产生了异常,或者回调不通,回调失败,如果我们不对这种情况进行处理的话,那么我们的订单状态永远得不到修改.

解决方案:

1:供应商会提供一个查询订单充值状态的接口,当我们系统对接下单成功后添加一个查询状态的任务,该任务1分钟或者几分钟后去调用供应商查询状态的API,我们根据供应商返回的结果进行充吧订单状态的修改

2:如果供应商系统能够正常回调,则将查询状态的任务取消即可

1.1.状态检查接口开发

步骤1:我们在chongba_recharge_mock工程中模拟的供应商都提供了状态检查接口,同理我需要将供应商状态检查接口api地址配置到对接模块chongba_recharge_supplier中,修改application-dev.yml配置文件如下:

supplier:jisu_url: "http://127.0.0.1:8090/jisuapi/mobilerecharge"juhe_url: "http://127.0.0.1:8090/juheapi"apis: {jisuapi: "${supplier.jisu_url}/recharge",juheapi: "${supplier.juhe_url}/recharge"}maxrepeat: 4checkStateApis: {jisuapi: "${supplier.jisu_url}/orderState",juheapi: "${supplier.juhe_url}/orderState"}stateCheckTime: 1 #状态检查时间

并修改配置类:SupplierConfig

@Data
@Component
@ConfigurationProperties(prefix = "supplier")
public class SupplierConfig {private Map<String,String> apis; //加载供应商api地址private int maxrepeat;//最大重试次数private Map<String,String> checkStateApis;private int stateCheckTime; //订单充值状态检查时间
}

步骤2:在chongba_recharge_supplier模块的对接供应商接口:SupplierService中添加检查充值状态的接口方法

public interface SupplierService {/*** 对接供应商下单* @param rechargeRequest*/public void recharge(RechargeRequest rechargeRequest);/*** 对接下单成功后检查充值状态* @param checkStatusRequest */public void checkStatus(CheckStatusRequest checkStatusRequest);
}

在chongba_common工程中的:com.chongba.recharge包下创建实体:
CheckStatusRequest

@Data
@NoArgsConstructor
@AllArgsConstructor
public class CheckStatusRequest {private String supplier;private String orderNo;private String tradeNo;
}

参数说明:

supplier:不同供应商查询订单充值状态API地址不一样,需要根据供应商编号去获取

orderNo:充吧系统生成的订单号,充吧支付成功后通知对接模块下单时已经将充吧订单号传递过来了

tradeNo:供应商系统生成的唯一的交易号,当我们调用供应商对接下单API后由供应商生成的唯一交易号,并返回给了充吧系统

orderNo和tradeNo参数是供应商状态检查接口需要传递的参数!企业开发中看第三方的供应商系统接口需要传递什么参数就传递什么参数。

步骤3:在SupplierServiceImpl类中实现检查状态的方法

@Override
public void checkStatus(CheckStatusRequest checkStatusRequest) {//获取状态检查接口地址String checkStatusApi = supplierConfig.getCheckStateApis().get(checkStatusRequest.getSupplier());//设置请求头HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);//封装请求参数---实际业务中看供应商需要传递哪些参数,实际情况中可能要根据不同的供应商传递不同的//参数,那就要在这个逻辑中添加不同的条件分支MultiValueMap<String,String> map = new LinkedMultiValueMap<>();map.add("outorderNo",checkStatusRequest.getOrderNo());map.add("tradeNo",checkStatusRequest.getTradeNo());HttpEntity<MultiValueMap<String,String>> httpEntity = new HttpEntity<>(map,headers);ResponseEntity<String> responseEntity = restTemplate.postForEntity(checkStatusApi, httpEntity, String.class);Result<RechargeResponse> result = JSON.parseObject(responseEntity.getBody(), new TypeReference<Result<RechargeResponse>>() {});if(result.getCode() == StatusCode.OK){log.info("订单状态检查,订单成功{}",checkStatusRequest);updateTrade(checkStatusRequest.getOrderNo(),result.getData().getStatus());}else{//订单失败log.info("订单状态检查,订单失败{}",checkStatusRequest);updateTrade(checkStatusRequest.getOrderNo(),OrderStatusEnum.FAIL.getCode());}
}

1.2.添加和消费状态查询任务

有了对接供应商状态查询的接口,下面要做的就是在对接供应商下单成功之后添加一个查询状态的任务,该任务可在1分钟后执行,即1分钟后去查询供应商充值状态

步骤1:在chongba_recharge_supplier模块的任务接口:SupplierTask中新增两个方法,

添加查询状态任务方法:addCheckStatusTask(CheckStatusRequest checkStatusRequest);

消费查询状态任务方法:checkStatus();

/*** 添加状态检查查询任务* @param checkStatusRequest*/
public void addCheckStatusTask(CheckStatusRequest checkStatusRequest);/*** 状态检查任务*/
public void checkStatus();

参数说明:

添加任务是为了消费任务,消费状态检查任务就是要对接供应商状态检查接口,而该接口需要传递的参数就是CheckStatusRequest ,包含了属性supplier,orderNo,tradeNo,所以添加任务时需要将CheckStatusRequest 作为任务对象Task的parameter属性值。

步骤2:实现添加和消费任务方法

@Autowired
private SupplierConfig supplierConfig;@Override
public void addCheckStatusTask(CheckStatusRequest checkStatusRequest) {Task task = new Task();TaskTypeEnum taskTypeEnum = TaskTypeEnum.STATECHECK;task.setTaskType(taskTypeEnum.getTaskType());task.setPriority(taskTypeEnum.getPriority());Calendar calendar = Calendar.getInstance();calendar.add(Calendar.MINUTE,supplierConfig.getStateCheckTime());task.setExecuteTime(calendar.getTimeInMillis());
​task.setParameters(ProtostuffUtil.serialize(checkStatusRequest));//添加状态检查任务ResponseMessage result = taskServiceClient.push(task);
}@Override
@Scheduled(fixedRate = 1000)
public void checkStatus() {//消费状态检查任务-----发起状态检查TaskTypeEnum statecheck = TaskTypeEnum.STATECHECK;ResponseMessage poll = taskServiceClient.poll(statecheck.getTaskType(), statecheck.getPriority());if(poll.isFlag()){if(poll.getData()!=null){String taskStr = JSON.toJSONString(poll.getData());Task task = JSON.parseObject(taskStr,new TypeReference<Task>(){});CheckStatusRequest statusRequest = ProtostuffUtil.deserialize(task.getParameters(), CheckStatusRequest.class);log.info("消费任务时从拉取的任务数据{}",statusRequest);//调用状态检查接口进行状态检查supplierService.checkStatus(statusRequest);}}
}

步骤3:对接供应商下单成功后添加状态检查任务,完善SupplierServiceImpl类中的recharge方法

@Override
public void recharge(RechargeRequest rechargeRequest) {if(result !=null){//判断成功还是失败if(result.getCode() == StatusCode.OK){log.info("下单成功,等待充值处理回调!");//特别注意此时订单状态还不能修改为充值成功-----供应商回调之后才能修改为成功updateTrade(rechargeRequest.getOrderNo(),OrderStatusEnum.UNAFFIRM.getCode());//充值处理中等待确认log.info("下单成功,添加状态检查任务,1分钟后进行状态检查");supplierTask.addCheckStatusTask(new CheckStatusRequest(rechargeRequest.getSupply(),result.getData().getOrderNo(),result.getData().getTradeNo()));return;}else {//.....................后面的代码省略}}
}

步骤3:测试:

现在要测试供应商回调不成功由充吧系统主动发起状态查询的情形,在chongba_recharge_mock工程中的MockJisuRechargeController中注释掉回调的方法

启动所有系统,进行话费充值业务。

1.3.回调成功后取消任务

当供应商成功回调后我们需要取消状态查询任务,取消任务需要任务id,而在供应商的回调方法中,只有供应商返回的订单号和交易号,没有任务id,因此在充吧添加状态查询任务时需要将充吧订单号和任务id进行关联存储,

步骤1:在SupplierTaskImpl类中完善:addCheckStatusTask添加状态检查任务方法

@Autowiredprivate CacheService cacheService;@Overridepublic void addCheckStatusTask(CheckStatusRequest checkStatusRequest) {Task task = new Task();TaskTypeEnum taskTypeEnum = TaskTypeEnum.STATECHECK;task.setTaskType(taskTypeEnum.getTaskType());task.setPriority(taskTypeEnum.getPriority());Calendar calendar = Calendar.getInstance();calendar.add(Calendar.MINUTE,supplierConfig.getStateCheckTime());task.setExecuteTime(calendar.getTimeInMillis());task.setParameters(ProtostuffUtil.serialize(checkStatusRequest));//添加状态检查任务ResponseMessage result = taskServiceClient.push(task);//供应商系统能够正常回调则需要取消状态检查任务,取消任务需要任务id,回调成功后修改充吧订单状态知道订单号//因此要将订单号和任务id做一个映射存储if(result.getCode() == StatusCode.OK){cacheService.hPut(Constants.order_checked,checkStatusRequest.getOrderNo(),String.valueOf(result.getData()));}}

步骤2:在SupplierTask中添加一个取消状态检查任务的方法,方法参数是订单号

 /*** 取消状态检查任务* @param orderNo*/public void cancelCheckTask(String orderNo);

步骤3:在SupplierTaskImpl类中实现取消状态检查任务的方法

@Override
public void cancelCheckTask(String orderNo) {String taskId = (String) cacheService.hGet(Constants.order_checked, orderNo);if(taskId!=null){taskServiceClient.cancel(Long.valueOf(taskId));cacheService.hDelete(Constants.order_checked,orderNo);}
}

步骤4:在供应商回调成功的方法中调用取消状态检查的任务,在chongba_recharge_supplier模块的:com.chongba.supplier.controller包下的RechargeNotifyController中的notify(@RequestBody String result)方法,调用取消状态检查方法

@Autowiredprivate SupplierTask supplierTask;@RequestMapping(value = "/order/notify")public String notify(@RequestBody String result) {JSONObject jsonObject = (JSONObject) JSON.parse(result);String orderNo= (String) jsonObject.get("orderNo");int status= Integer.parseInt(jsonObject.get("status").toString());log.info("充值回调成功修改订单{}的状态为{}",orderNo,status);updateTrade(orderNo, status);log.info("回调成功后取消状态检查任务");supplierTask.cancelCheckTask(orderNo);return "sucess";}

步骤5:测试,

注意:在chongba_recharge_mock模块中将极速的回调通知方法放开,然后再测试,

启动所有工程,进行话费充值。

相关文章:

虚拟电商-话费充值业务(六)话费充值业务回调补偿

一、话费充值回调业务补偿 业务需求&#xff1a;供应商对接下单成功后充吧系统将订单状态更改为&#xff1a;等待确认中&#xff0c;此时等待供应商系统进行回调&#xff0c;当供应商系统回调时说明供应商充值成功&#xff0c;供应商回调充吧系统将充吧的订单改为充值成功&…...

加密解密工具箱 - 专业的在线加密解密工具

加密解密工具箱 - 专业的在线加密解密工具 您可以通过以下地址访问该工具&#xff1a; https://toolxq.com/static/hub/secret/index.html 工具简介 加密解密工具箱是一个功能强大的在线加密解密工具&#xff0c;支持多种主流加密算法&#xff0c;包括 Base64、AES、RSA、DES…...

印度股票实时数据API接口选型指南:iTick.org如何成为开发者优选

在全球金融数字化浪潮中&#xff0c;印度股票市场因其高速增长潜力备受关注。对于量化交易开发者、金融科技公司而言&#xff0c;稳定可靠的股票报价API接口是获取市场数据的核心基础设施。本文将深度对比主流印度股票API&#xff0c;并揭示iTick在数据服务领域的独特优势。 一…...

使用python实现视频播放器(支持拖动播放位置跳转)

使用python实现视频播放器&#xff08;支持拖动播放位置跳转&#xff09; Python实现视频播放器&#xff0c;在我早期的博文中介绍或作为资料记录过 Python实现视频播放器 https://blog.csdn.net/cnds123/article/details/145926189 Python实现本地视频/音频播放器https://bl…...

Python星球日记 - 第2天:数据类型与变量

&#x1f31f;引言&#xff1a; 上一篇&#xff1a;Python星球日记 - 第1天&#xff1a;欢迎来到Python星球 名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和…...

CyclicBarrier、Semaphore、CountDownLatch的区别,适用场景

CyclicBarrier、Semaphore 和 CountDownLatch 是 Java 并发包中用于线程协作的工具类&#xff0c;它们虽然都与线程同步相关&#xff0c;但设计目的和使用场景有显著差异。以下是它们的核心区别和典型应用场景&#xff1a; 1. CountDownLatch 核心机制 一次性计数器&#xf…...

【愚公系列】《高效使用DeepSeek》050-外汇交易辅助

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

java短连接,长连接

在网络通信中&#xff0c;短连接&#xff08;Short Connection&#xff09;是指客户端与服务器建立连接后&#xff0c;仅完成一次或几次数据交互就立即断开连接的通信方式。以下是关于短链接的详细说明&#xff1a; 一、短链接的核心特点 连接短暂 数据传输完成后立即关闭连接…...

从零开始训练Codebook:基于ViT的图像重建实践

完整代码在文末&#xff0c;可以一键运行。 1. 核心原理 Codebook是一种离散表征学习方法&#xff0c;其核心思想是将连续特征空间映射到离散的码本空间。我们的实现方案包含三个关键组件&#xff1a; 1.1 ViT编码器 class ViTEncoder(nn.Module):def __init__(self, codebo…...

每日一题洛谷P8664 [蓝桥杯 2018 省 A] 付账问题c++

P8664 [蓝桥杯 2018 省 A] 付账问题 - 洛谷 (luogu.com.cn) 思路&#xff1a;要使方差小&#xff0c;那么钱不能一下付的太多&#xff0c;可以让钱少的全付玩&#xff0c;剩下还需要的钱再让钱多的付&#xff08;把钱少的补上&#xff09;。 将钱排序&#xff0c;遍历一遍&…...

蓝桥杯真题——传送阵

原题连接&#xff1a;蓝桥杯2024年第十五届省赛真题-传送阵 - C语言网 知识点&#xff1a;并查集 题目描述 小蓝在环球旅行时来到了一座古代遗迹&#xff0c;里面并排放置了 n 个传送阵&#xff0c;进入第 i 个传送阵会被传送到第 ai 个传送阵前&#xff0c;并且可以随时选择…...

解释回溯算法,如何应用回溯算法解决组合优化问题?

一、回溯算法核心原理 回溯算法本质是暴力穷举的优化版本&#xff0c;采用"试错剪枝"策略解决问题。其核心流程如下&#xff1a; ​路径构建&#xff1a;记录当前选择路径​选择列表&#xff1a;确定可用候选元素​终止条件&#xff1a;确定递归结束时机​剪枝优化…...

opencv连接vs2015

需要改的地方&#xff1a; 1.debug x64 2.vc目录 包含目录&#xff1a;D:\softword\opencv\opencv3416\opencv\build\include 3.vc目录 库目录&#xff1a;D:\softword\opencv\opencv3416\opencv\build\x64\vc14\lib 4.链接器——输入&#xff1a;D:\softword\ope…...

用matlab搭建一个简单的图像分类网络

文章目录 1、数据集准备2、网络搭建3、训练网络4、测试神经网络5、进行预测6、完整代码 1、数据集准备 首先准备一个包含十个数字文件夹的DigitsData&#xff0c;每个数字文件夹里包含1000张对应这个数字的图片&#xff0c;图片的尺寸都是 28281 像素的&#xff0c;如下图所示…...

移动端六大语言速记:第6部分 - 错误处理与调试

移动端六大语言速记:第6部分 - 错误处理与调试 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在错误处理与调试方面的特性,帮助开发者理解和掌握各语言的异常处理机制。 6. 错误处理与调试 6.1 异常处理 各语言异常处理的语法对比:…...

【数据库】达梦arm64安装

话不多说&#xff0c;快速开始~ 1.下载 进入官网&#xff1a; 产品下载 | 达梦在线服务平台 下载安装包。 选飞腾、鲲鹏都可以&#xff0c;都是arm架构的。我选择的是&#xff1a; 直接下载地址是https://download.dameng.com/eco/adapter/DM8/202502/dm8_20250117_HWarm920…...

QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异

一、目的 在 Qt 的 QTableWidget 中&#xff0c;insertRow(0) &#xff08;头插&#xff09;和 insertRow(rowCount())&#xff08;尾插&#xff09;在性能上存在显著差异。 二、QAbstractItemModel:: insertRows 原文解释 QAbstractItemModel Class | Qt Core 5.15.18 AI 解…...

使用MFC ActiveX开发KingScada控件(OCX)

最近有个需求&#xff0c;要在KingScada上面开发一个控件。 原来是用的WinCC&#xff0c;WinCC本身是支持调用.net控件&#xff0c;就是winform控件的&#xff0c;winform控件开发简单&#xff0c;相对功能也更丰富。奈何WinCC不是国产的。 话说KingScada&#xff0c;国产组态软…...

大模型学习二:DeepSeek R1+蒸馏模型组本地部署与调用

一、说明 DeepSeek R1蒸馏模型组是基于DeepSeek-R1模型体系&#xff0c;通过知识蒸馏技术优化形成的系列模型&#xff0c;旨在平衡性能与效率。 1、技术路径与核心能力 基础架构与训练方法‌ ‌DeepSeek-R1-Zero‌&#xff1a;通过强化学习&#xff08;RL&#xff09;训练&…...

通过 Markdown 改进 RAG 文档处理

通过 Markdown 改进 RAG 文档处理 作者&#xff1a;Tableau 原文地址&#xff1a;https://zhuanlan.zhihu.com/p/29139791931 通过 Markdown 改进 RAG 文档处理https://mp.weixin.qq.com/s/LOBOKNA71dANXHuwxe7yxw 如何将 PDF 转换为 Markdown 以获得更好的 LLM RAG 结果 Mar…...

Java学习总结-IO流

什么IO流&#xff1f; 以内存为主体。input&#xff1a;磁盘向内存输入内容。output&#xff1a;内存向磁盘输入内容。 IO流的分类&#xff1a;...

python发送qq邮件

1.发送邮件的前提是你的qq邮箱设置能够用程序访问 这个服务点打开 就在 设置->账号 中 可以找到 # 导入 smtplib 库&#xff0c;用于实现 SMTP 协议&#xff0c;可实现邮件的发送功能 import smtplib # 从 email.mime.multipart 模块导入 MIMEMultipart 类&#xff0c;用…...

使用Deployment运行无状态应用

使用Deployment运行无状态应用 文章目录 使用Deployment运行无状态应用[toc]一、工作负载资源与控制器二、ReplicationController、ReplicaSet和Deployment1. ReplicationController&#xff08;已淘汰&#xff09;2. ReplicaSet&#xff08;ReplicationController 的增强版&am…...

QT Quick(C++)跨平台应用程序项目实战教程 6 — 弹出框

目录 1. Popup组件介绍 2. 使用 上一章内容完成了音乐播放器程序的基本界面框架设计。本小节完成一个简单的功能。单击该播放器顶部菜单栏的“关于”按钮&#xff0c;弹出该程序的相关版本信息。我们将使用Qt Quick的Popup组件来实现。 1. Popup组件介绍 Qt 中的 Popup 组件…...

Design Compiler:库特征分析(ALIB)

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 简介 在使用Design Compiler时&#xff0c;可以对目标逻辑库进行特征分析&#xff0c;并创建一个称为ALIB的伪库&#xff08;可以被认为是缓存&#xff09;&…...

2025高频面试设计模型总结篇

文章目录 设计模型概念单例模式工厂模式策略模式责任链模式 设计模型概念 设计模式是前人总结的软件设计经验和解决问题的最佳方案&#xff0c;它们为我们提供了一套可复用、易维护、可扩展的设计思路。 &#xff08;1&#xff09;定义&#xff1a; 设计模式是一套经过验证的…...

41. 评论日记

越复杂的结构越脆弱&#xff0c;你不能因为有智驾有只能&#xff0c;你就全交给它了&#xff0c;手机永久了还发热呢&#xff0c;你全交给它那你要死了也怪不了谁。 这年头的手机基本都有防水&#xff0c;但是你天天拿着这个在泳池里玩&#xff0c;哪天炸了我都只能说炸的响炸的…...

Python第七章09:自定义python包.py

# 自定义python包# 从物理上看&#xff0c;包就是一个文件夹&#xff0c;在该文件夹下包含了一个_init_.py文件&#xff0c;该文件夹可用于包含多个模块文件 # 从逻辑上看&#xff0c;包的本质依然是模块 # _init_.py 标识python包&#xff0c;没有就是普通文件夹&#xff0…...

基于大模型预测升主动脉瘤的多维度诊疗研究报告

目录 一、引言 1.1 研究背景 1.2 研究目的与意义 二、升主动脉瘤概述 2.1 定义与分类 2.2 发病原因与机制 2.3 流行病学现状 三、大模型技术原理及应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用进展 3.3 针对升主动脉瘤预测的独特价值 四、术前大模型预测方案…...

Lua中table函数使用详解

目录 1. table.concat(list [, sep [, i [, j]]])2. table.insert(list, [pos,] value)3. table.move(src, a, b, dest [, dest_pos]) (Lua 5.3)4. table.pack(...) (Lua 5.2)5. table.remove(list [, pos])6. table.sort(list [, comp])7. table.unpack(list [, i [, j]])总结…...

如何在Windows上找到Python安装路径?两种方法快速定位

原文&#xff1a;如何在Windows上找到Python安装路径&#xff1f;两种方法快速定位 | w3cschool笔记 在 Windows 系统上找到 Python 的安装路径对于设置环境变量或排查问题非常重要。本文将介绍两种方法&#xff0c;帮助你找到 Python 的安装路径&#xff1a;一种是通过命令提…...

图形库 EasyX - EasyX 初识(EasyX 概述、EasyX 下载与安装、打开一个窗口、打开一个彩色窗口、绘制简易图形、输出文字)

一、EasyX 概述 EasyX 是一款专为 C 开发者设计的轻量级图形库&#xff0c;主要面向 Windows 平台&#xff0c;它有如下特点 EasyX 的 API 设计简洁直观&#xff0c;易学易用&#xff0c;绘图效果所见即所得 二、EasyX 下载与安装 1、EasyX 下载 官方网址&#xff1a;https…...

《深度探秘:SQL助力经典Apriori算法实现》

在数据的广袤世界里&#xff0c;隐藏着无数有价值的信息&#xff0c;等待着我们去挖掘和发现。关联规则挖掘算法&#xff0c;作为数据挖掘领域的关键技术&#xff0c;能够从海量数据中找出事物之间潜在的关联关系&#xff0c;为商业决策、学术研究等诸多领域提供有力支撑。其中…...

AVR128单片机红外遥控8*8LED点阵屏显示

1&#xff09;将接收到的红外解码信号用LCD液晶显示屏显示。 2&#xff09;将接收到的5种红外解码信号分别控制88的液晶点阵屏MATRIX-88-GREEN (颜色可以自定)进行不同的显示&#xff1a;整行从上到下、从下到上轮流显示&#xff1b;整列从左到右、从右到左轮流显示&#xff1b…...

前端Uniapp接入UviewPlus详细教程!!!

相信大家在引入UviewPlusUI时遇到很头疼的问题&#xff0c;那就是明明自己是按照官网教程一步一步的走&#xff0c;为什么到处都是bug呢&#xff1f;今天我一定要把这个让人头疼的问题解决了&#xff01; 1.查看插件市场 重点&#xff1a; 我们打开Dcloud插件市场搜素uviewPl…...

【c++深入系列】:类与对象详解(中)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 不是因为看到希望才坚持&#xff0c;而是坚持了才能看到希望 那么上一篇博客我讲解了什么是类和对象以及类和对象是怎么定义的&#xff0…...

【Linux】远程登录时,使用图形界面报错:MoTTY X11 proxy: Unsupported authorisation protocol

1、问题描述 使用 MobaXterm 远程登录Ubuntu后,使用sudo权限运行图形界面程序报错: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服务端配置,…...

作用域与上下文:JavaScript魔法森林探秘

在JavaScript的魔法森林里&#xff0c;作用域和上下文是两位神秘的守护者&#xff0c;它们掌控着代码的逻辑流向和变量的生杀大权。今天&#xff0c;就让我们一起踏入这片神奇的土地&#xff0c;揭开全局作用域、函数作用域和闭包的神秘面纱&#xff0c;看它们如何影响我们的代…...

虚拟电商-话费充值业务(五)充值成功逻辑和网络异常重试逻辑

一、网络异常重试逻辑编写 如果在对接供应商的过程中出现了网络异常&#xff0c;我们需要做一个补偿机制&#xff0c;在任务类型枚举类&#xff1a;TaskTypeEnum中有一种业务状态码是针对远程调用失败的 步骤一&#xff1a;在对接供应商的方法&#xff1a;SupplierServiceImp…...

42.评论日记

怎么看待算命&#xff1f; 我能算到你今晚睡觉前会上一次厕所。 你可以选择相信我算的内容&#xff0c;也可以不信。 你也可以有感觉要上厕所的时候不去拉兜里。 也可以选择相信&#xff0c;早早的拿好纸做准备。 你今晚可能不止上一次&#xff0c;也可能今晚没吃没喝早早…...

MTK-GMS版本国内WIFI受限问题

MTK-GMS版本国内WIFI受限问题解决 文章目录 问题参考资料解决方案方案一 修改配置坑点 方案二 直接修改属性 问题 最近负责ROOM 产品&#xff0c;出现WIFI受限显示&#xff0c;但是网络是通畅的。 GMS 版本&#xff0c;在国外或者国内翻墙网络不会出现WIFI受限显示问题&#…...

C# System.Text.Json 中 JsonConverter 使用详解

总目录 前言 在 C# 开发中&#xff0c;System.Text.Json 是一个高性能的 JSON 处理库&#xff0c;广泛用于序列化和反序列化对象。当默认的序列化行为无法满足需求时&#xff0c;JsonConverter 提供了强大的自定义能力。本文将详细讲解 JsonConverter 的使用方法&#xff0c;帮…...

Leetcode 857 -- 贪心 | 数学

题目描述 雇佣 K 名工人的最低成本 思路 参考官方题解和这里。 代码1&#xff08;正确&#xff09; class Solution { public:double mincostToHireWorkers(vector<int>& quality, vector<int>& wage, int k) {int n wage.size();double res 0, totalq …...

基于 SpringBoot 的社区维修平台

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…...

maven项目添加第三方JAR包

项目开发过程中&#xff0c;不可避免的需要用到一些maven库&#xff08;公共库、司库等&#xff09;中没有的冷门jar包依赖&#xff0c;这时&#xff0c;可以将这些第三方JAR包安装到本地maven仓库中&#xff0c;实现项目依赖的一致性。具体步骤如下&#xff1a; 1、下载jar包 …...

C#:接口(interface)

目录 接口的核心是什么&#xff1f; 1. 什么是接口&#xff08;Interface&#xff09;&#xff0c;为什么要用它&#xff1f; 2. 如何定义和使用接口&#xff1f; 3.什么是引用接口&#xff1f; 如何“引用接口”&#xff1f; “引用接口”的关键点 4. 接口与抽象类的区…...

c#和c++脚本解释器科学运算

说明&#xff1a; 我希望用c#和c写一个脚本解释器&#xff0c;用于科学运算 效果图&#xff1a; step1: c# C:\Users\wangrusheng\RiderProjects\WinFormsApp3\WinFormsApp3\Form1.cs using System; using System.Collections.Generic; using System.Data; using System.Tex…...

2025年嵌入式大厂春招高频面试真题及解析

以下是 2025 年嵌入式大厂春招高频面试真题及解析,结合真题分类和核心知识点整理: 一、‌C/C++编程基础‌ ‌1.1 指针与内存‌ ‌野指针的成因及避免方法‌(未初始化、释放后未置空)‌ malloc与calloc的区别(后者自动初始化为0)‌ ‌指针与数组的区别‌(内存分配方…...

【C++】nlohmann::json 配置加载技术实践:从基础到高级应用

一、nlohmann::json 库概况与核心特性 nlohmann::json 是 C 社区最受欢迎的 JSON 库之一&#xff0c;其设计理念简洁即美&#xff0c;通过单头文件实现完整的 JSON 解析、序列化和操作功能。 1.1 基本特性 nlohmann::json是一个现代C编写的开源JSON库&#xff0c;采用MIT协议…...

ngx_regex_init

定义在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就为假 条件不成立 ngx_regex_init 函数就成了空实现 NGX_PCRE2 被定义&#xff0c;则表示 Ngin…...