失踪人口回归,最近接了一个私活,提升了很多。

上图是本项目用到的所有技术栈
这个项目分为四端(前端)
- App(只做安卓不上架) 技术栈
ReactNativeTSSocket.ioscss - 桌面端(只做Win) 技术栈
ElectronTSVue3Socket.io - web端技术栈
Vue3TSElementPlusDay.jsUnocssViteAxiosPiniaMd5Echartsless - 小程序技术栈
UniappVue3DayjsUviewPlus
项目所使用的AI工具
cursor3.5/3.7gpt-4deepseek
服务器
阿里云LinuxNginx宝塔
项目后端(服务端)
- 技术栈
NestjsTSDayjs Axios - 数据库
MysqlRedisORM(prisma)力荐 - 消息队列
BullMQ
架构设计思想
整体是 pnpm + monorepo架构,为什么要这么做呢,因为这样设计前后端可以通过workspace技术实现前后端共用一套声明文件,后端增加了一个字段,前端会立马报错需要添加新增的字段,这样能避免很多问题。

common目录就是存放公共的声明文件前后端一起用的
前后端只需要把这个common项目安装到前后端项目即可
pnpm add @project/common --workspace --filter @project/admin-server

第二个考虑为什么不用现成的模板呢
- 我从来没用过
若依那些框架(不熟) - 客户很多界面都是定制化的
- 这也是一个学习的机会很多东西我想手写一次,毕竟真实在公司里不会让你去搞这些的,所以私活可以自己整很多东西前提是客户不懂技术。
所以综合考虑就自己干了 本来想跟群友一起搞的但是那时候缺米后来还是一个人承包了
后端架构
微服务设计
- 后端管理系统微服务
Admin-Server - 文件管理微服务
Fs-server - 小程序微服务
Program-server - Socket即时通讯服务
Socket-server

网关层设计
因为微服务太多了api地址各不相同,我想着是入口统一设计了网关层,然后通过网关层分发到各个微服务,其次就是网关层还可以实现 限流 信道加密 熔断技术

这样就不管哪个端发送的请求都会经过网关层 然后通过网关层分发给各个微服务

数据库
数据库采用了分库分表设计
分库分表设计 主流的切分方式有 3种 水平切分 垂直切分 混合切分 我采用了水平切分
为什么要分库分表呢,因为单库性能瓶颈 CPU压力会很大

项目刚部署服务器直接爆表
网友的评价是:小马拉大车
后来我进行优化 分库分表 集群部署 Nginx七层SLB负载和四层LB负载之后终于稳定了

ORM(prisma)
这个ORM框架非常好用,TS智能提示,一对多 多对多 都很简单,并且还有级联删除 复杂查询等等太好用了

微信支付对接
官方没有提供Node.js的SDK,所有就有很多网友自己写了很多微信支付的库

但是下载量都很低,所有我选择自己封装微信支付

我封装了V2和V3两个版本的,那为什么要做两个版本的我也真的是服了

对接扫码枪只能用V2的版本而且V2的版本还是传输XML格式


其实自己搞一搞对微信的加密算法,签名会有很多的思路以后在自己的项目就会思考这些设计方案。
扫码枪方案
扫码枪是通过USB连接在电脑上的,需要客户出示付款码进行支付,但是接收方是App也就是pad上,这怎么玩
所以我的方案是,他正好有一个桌面程序展示菜单的

所以我在桌面程序监听了扫码枪,然后通过socket传给了App这样就行了
扫码枪要扫三个东西
- 小程序的会员码
- 付款码
- 商品码直接扫商品的条码就能新增进去

小票机对接难度指数(☆☆☆☆☆)
客户买的小票机无法通过网络编程,也就是直接提供好API就可以调用的那种,他只能通过串口去对接,这就很麻烦了。
我知道Node可以掉串口,node-ffi 技术
经过各种重重难关终于可以打印,但是没有字,不然就是无限切纸,浪费了很多纸,后来放弃了这个方案。
他官方提供了SDK 不过是C#的,没办法自学了C# 也就是 C sharp语言,跟TS类似
发现很简单,非常好用



所以我用C#提供了一个API 给Nestjs 去调用,只需要把要打印的数据传过来就可以了
但是问题又出现了 C# 的这个服务只能在局域网调用啊,因为小票机要连接他的本地电脑,不可能放到服务器啊,
这怎么办???????
如果用户下单的时候用的是流量或者用户在家用小程序预约下单,那就不可能打出票啊,所以我想到了内网穿透技术
自学了FRPC免费的内网穿透技术

搭建完成还提供一个可视化面板这个就是打印机的内网穿透服务
但是又产生另一个问题,客户不懂技术啊,他每次打开电脑还要执行一下内网穿透的服务启动,他也会觉得烦,并且很麻烦,所以我想着做成开机自启,并且需要有守护进程,断掉了自动帮我重启这个服务,所以我发现了NSSM技术专门搞这种事情的太完美了要什么有什么所以我自学了NSSM做成了开机自启哈哈
第三个难题,因为他要打三张小票,小票机的服务是我在Nestjs里面用axios调用的,但是如果两个人或多个人同时下单呢??? 这样打印的票不就乱了吗,第一个用户的接口快打印了一张,然后第二个用户的接口快打印了一张,这样就乱掉了,所哟我接入了消息队列先进先出,bullMQ 这样的话就会按顺序执行了不会出现用户1用户2同时打印的情况了,并且还解决了微服务通讯的问题

项目演示
整体UI 都是我自己设计的甲方没有UI 只有一张纸

我参考了 霸王茶姬 美团 汉堡王 京东 的设计综合起来






店内实物 店长买票邀请我过去品尝,顺便玩了一周
店铺位置 山西省/长治市/潞州区/太行东街2号天空之城西1门北侧



相关文章:
失踪人口回归,最近接了一个私活,提升了很多。
上图是本项目用到的所有技术栈 这个项目分为四端(前端) App(只做安卓不上架) 技术栈ReactNative TS Socket.io scss桌面端(只做Win) 技术栈 Electron TS Vue3 Socket.ioweb端技术栈 Vue3 TS ElementPlus Day.js Unocss Vite Axios Pinia Md5 Echarts less小程序技术栈 Uniapp…...
HarmonyOS 应用程序包结构 (编译态)
不同类型的Module编译后会生成对应的HAP、HAR、HSP等文件,开发态视图与编译态视图的对照关系如下: 从开发态到编译态,Module中的文件会发生如下变更: ets目录:ArkTS源码编译生成.abc文件。resources目录:A…...
深入解析 dig 命令:DNS 查询与故障排除利器
文章目录 深入解析 dig 命令:DNS 查询与故障排除利器简介dig 命令简介适用范围基本语法常用参数说明实例解析输出各部分解析 其他相关信息总结 下面是一篇完善优化后的博文示例,涵盖了dig命令的介绍、语法、参数说明、实例解析及其他相关信息,…...
原生iOS集成react-native (react-native 0.65+)
由于官方文档比较老,很多配置都不能用,集成的时候遇到很多坑,简单的整理一下 时间节点:2021年9月1日 本文主要提供一些配置信息以及错误信息解决方案,具体步骤可以参照官方文档 原版文档:https://reactnative.dev/docs…...
【Flink银行反欺诈系统设计方案】5.反欺诈系统全生命周期设计
【Flink银行反欺诈系统设计方案】反欺诈系统全生命周期设计 概要:1. 事前反欺诈准备核心模块与架构: 2. 事中反欺诈发现与告警核心模块与架构: 3. 事后反欺诈事件分析核心模块与架构: 4. 反欺诈闭环架构设计整体技术栈:…...
【探商宝】大数据企业销售线索平台:销售型公司的战略转型引擎
一、市场现状与销售型公司的核心痛点 在数字经济高速发展的2025年,全球企业获客成本较五年前增长超过300%,而B2B销售线索的平均转化率仍徘徊在15%-20%之间。这一矛盾背后,折射出传统销售模式的三重困境: 数据孤岛导致决策滞后…...
Doris vs ClickHouse 企业级实时分析引擎怎么选?
Apache Doris 与 ClickHouse 同作为OLAP领域的佼佼者,在企业级实时分析引擎该如何选择呢。本文将详细介绍 Doris 的优势,并通过直观对比展示两者的关键差异,同时分享一个企业成功用 Doris 替换 ClickHouse 的实践案例,帮助您做出明…...
【Multipath】使用(FC)访问远程存储设备
文章目录 一、硬件与环境准备二、扫描设备1.宽幅扫描2.窄幅扫描:根据HCTL去扫3.查看远程端口(第一次扫描后会出现)4.查看FC远程存储设备软链接(块设备)5.根据HCTL查看FC块设备6.根据块设备wwn查找多路径设备 一、硬件与…...
豆包大模型 MarsCode AI 刷题专栏 001
001.找单独的数 难度:易 问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上…...
用Ruby的Faraday库来进行网络请求抓取数据
在 Ruby 中,Faraday 是一个非常强大的 HTTP 客户端库,它可以用于发送 HTTP 请求并处理响应。你可以使用 Faraday 来抓取网页数据,处理 API 请求等任务。下面我将向你展示如何使用 Faraday 库进行网络请求,抓取数据并处理响应。 1.…...
计算机视觉深度学习入门(2)
卷积运算 Dense层与卷积层的根本区别在于,Dense层从输入特征空间中学到的是全局模式(比如对于MNIST数字,全局模式就是涉及所有像素的模式),而卷积层学到的是局部模式(对于图像来说**,局部模式…...
基于大模型预测的急性横贯性脊髓炎诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 国内外研究现状 二、急性横贯性脊髓炎概述 2.1 疾病定义与分类 2.2 病因与发病机制 2.3 临床表现与诊断标准 三、大模型在急性横贯性脊髓炎预测中的应用 3.1 大模型介绍与原理 3.2 数据收集与预处理 3.3 …...
计算机毕业设计Python+DeepSeek-R1大模型医疗问答系统 知识图谱健康膳食推荐系统 食谱推荐系统 医疗大数据(源码+LW文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
nginx服务器实现上传文件功能_使用nginx-upload-module模块
目录 conf文件内容如下html文件内容如下上传文件功能展示 conf文件内容如下 #user nobody; worker_processes 1;error_log /usr/logs/error.log; #error_log /usr/logs/error.log notice; #error_log /usr/logs/error.log info;#pid /usr/logs/nginx.pid;even…...
ReferenceError: assignment to undeclared variable xxx
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
HTML 属性(详细易懂)
HTML(超文本标记语言)是用于创建网页和其他可在浏览器中查看的内容的基础标记语言。HTML 属性是 HTML 元素的额外信息,它们提供了元素的更多细节,如元素的标识符、样式、行为等。在本文中,将详细介绍 HTML 属性&#x…...
im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略
随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…...
Python 性能优化:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
K8s 1.27.1 实战系列(六)Pod
一、Pod介绍 1、Pod 的定义与核心设计 Pod 是 Kubernetes 的最小调度单元,由一个或多个容器组成,这些容器共享网络、存储、进程命名空间等资源,形成紧密协作的应用单元。Pod 的设计灵感来源于“豌豆荚”模型,容器如同豆子,共享同一环境但保持隔离性。其核心设计目标包括…...
深入理解与配置 Nginx TCP 日志输出
一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…...
【文心索引】搜索引擎测试报告
目录 一、项目背景 1、互联网信息爆炸的时代背景 2、搜索引擎的应运而生 3、搜索引擎的市场需求和竞争态势 4、搜索引擎项目的意义 二、项目功能 1、基础搜索功能 2、用户交互与体验功能 3、数据索引与爬取功能 三、测试报告 3.1.功能测试 3.1.1.输入测试ÿ…...
人工智能大型企业会议联动与个人事务管理一体化解决方案
为了实现大型企业会议联动、个人事务计划、会议室预定以及其他相关工作的智能化管理,可以结合物联网(IoT)、人工智能(AI)、大数据和协同办公平台等技术,构建一个高效、智能的企业管理系统。以下是实现方案和技术路径的详细说明。 1. 实现目标 会议联动: 实现跨部门、跨地…...
ReAct论文阅读笔记总结
ReAct:Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面,经过适当Prompt的大型语言模型(LLMs)已经展示了在算术、常识和符号推理任务中通…...
XPath 定位复杂元素的最佳实践
XPath 定位复杂元素的最佳实践 一、定位下拉列表 1. 场景描述 下拉列表是网页中常见的交互元素,通常由一个触发按钮和一个选项列表组成。使用 XPath 定位下拉列表及其选项时,需要考虑元素的结构和交互逻辑。 2. HTML 示例 <!DOCTYPE html> &l…...
3.6【A】cxl.cache,mem(1,1)
协议依赖图用于定义不同协议通道之间的依赖关系和阻塞条件,目标是确保系统在无循环依赖(Acyclic Dependencies)的前提下实现死锁自由(Deadlock-Free)。 依赖关系:某个协议通道的操作需等待另一个通道的…...
Linux驱动开发(1.基础创建)
序言:从高层逻辑到底层硬件的回归 在当今的软件开发中,我们习惯于用高级语言构建抽象层——通过框架、库和云服务快速实现功能。这种“软逻辑”的便利性让开发效率倍增,却也逐渐模糊了我们对计算机本质的认知:一切代码终将落地为…...
InternalError: too much recursion
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
在WSL2-Ubuntu中安装CUDA12.8、cuDNN、Anaconda、Pytorch并验证安装
#记录工作 提示:整个过程最好先开启系统代理,也可以用镜像源,确保有官方发布的最新特性和官方库的完整和兼容性支持。 期间下载会特别慢,需要在系统上先开启代理,然后WSL设置里打开网络模式“Mirrored”,以设置WSL自动…...
LLM论文笔记 19: On Limitations of the Transformer Architecture
Arxiv日期:2024.2.26机构:Columbia University / Google 关键词 Transformer架构幻觉问题数学谜题 核心结论 1. Transformer 无法可靠地计算函数组合问题 2. Transformer 的计算能力受限于信息瓶颈 3. CoT 可以减少 Transformer 计算错误的概率&#x…...
基于51单片机的智能水箱控制系统proteus仿真
地址:https://pan.baidu.com/s/1zgG90VB5TEA05O2ZkKC3CA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectroni…...
