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

news2025/3/13 13:19:26

在这里插入图片描述

上图是本项目用到的所有技术栈

这个项目分为四端(前端)

  • App(只做安卓不上架) 技术栈ReactNative TS Socket.io scss
  • 桌面端(只做Win) 技术栈 Electron TS Vue3 Socket.io
  • web端技术栈 Vue3 TS ElementPlus Day.js Unocss Vite Axios Pinia Md5 Echarts less
  • 小程序技术栈 Uniapp Vue3 Dayjs UviewPlus

项目所使用的AI工具

  • cursor3.5/3.7 gpt-4 deepseek

服务器

  • 阿里云 Linux Nginx 宝塔

项目后端(服务端)

  • 技术栈 Nestjs TS Dayjs Axios
  • 数据库 Mysql Redis ORM(prisma)力荐
  • 消息队列 BullMQ

架构设计思想

整体是 pnpm + monorepo架构,为什么要这么做呢,因为这样设计前后端可以通过workspace技术实现前后端共用一套声明文件,后端增加了一个字段,前端会立马报错需要添加新增的字段,这样能避免很多问题。

在这里插入图片描述

common目录就是存放公共的声明文件前后端一起用的

前后端只需要把这个common项目安装到前后端项目即可

pnpm add @project/common --workspace --filter @project/admin-server

在这里插入图片描述

第二个考虑为什么不用现成的模板呢

  1. 我从来没用过若依那些框架(不熟)
  2. 客户很多界面都是定制化的
  3. 这也是一个学习的机会很多东西我想手写一次,毕竟真实在公司里不会让你去搞这些的,所以私活可以自己整很多东西前提是客户不懂技术。

所以综合考虑就自己干了 本来想跟群友一起搞的但是那时候缺米后来还是一个人承包了

后端架构

微服务设计

  1. 后端管理系统微服务Admin-Server
  2. 文件管理微服务 Fs-server
  3. 小程序微服务 Program-server
  4. 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这样就行了

扫码枪要扫三个东西

  1. 小程序的会员码
  2. 付款码
  3. 商品码直接扫商品的条码就能新增进去
    在这里插入图片描述

小票机对接难度指数(☆☆☆☆☆)

客户买的小票机无法通过网络编程,也就是直接提供好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门北侧

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

HarmonyOS 应用程序包结构 (编译态)

不同类型的Module编译后会生成对应的HAP、HAR、HSP等文件,开发态视图与编译态视图的对照关系如下: 从开发态到编译态,Module中的文件会发生如下变更: ets目录:ArkTS源码编译生成.abc文件。resources目录:A…

原生iOS集成react-native (react-native 0.65+)

由于官方文档比较老,很多配置都不能用,集成的时候遇到很多坑,简单的整理一下 时间节点:2021年9月1日 本文主要提供一些配置信息以及错误信息解决方案,具体步骤可以参照官方文档 原版文档:https://reactnative.dev/docs…

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数字,全局模式就是涉及所有像素的模式)​,而卷积层学到的是局部模式(对于图像来说**,局部模式…

计算机毕业设计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面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

im即时聊天客服系统SaaS还是私有化部署:成本、安全与定制化的权衡策略

随着即时通讯技术的不断发展,IM即时聊天客服系统已经成为企业与客户沟通、解决问题、提升用户体验的重要工具。在选择IM即时聊天客服系统时,企业面临一个重要决策:选择SaaS(软件即服务)解决方案,还是进行私…

深入理解与配置 Nginx TCP 日志输出

一、背景介绍 在现代网络架构中,Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于各种场景。除了对 HTTP/HTTPS 协议的出色支持,Nginx 从 1.9.0 版本开始引入了对 TCP 和 UDP 协议的代理功能,这使得它在处理数据库…

【文心索引】搜索引擎测试报告

目录 一、项目背景 1、互联网信息爆炸的时代背景 2、搜索引擎的应运而生 3、搜索引擎的市场需求和竞争态势 4、搜索引擎项目的意义 二、项目功能 1、基础搜索功能 2、用户交互与体验功能 3、数据索引与爬取功能 三、测试报告 3.1.功能测试 3.1.1.输入测试&#xff…

ReAct论文阅读笔记总结

ReAct:Synergizing Reasoning and Acting in Language Models 背景 最近的研究结果暗示了在自主系统中结合语言推理与交互决策的可能性。 一方面,经过适当Prompt的大型语言模型(LLMs)已经展示了在算术、常识和符号推理任务中通…

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…

虚拟系统实验

实验拓扑 启动虚拟系统 [FW]vsys enable 配置资源类 先查看 配置 创建虚拟系统 [USG6000V1]vsys name vsysa 绑定资源类 [USG6000V1-vsys-vsysa]assign resource-class r1 将接口划入虚拟系统 [USG6000V1-vsys-vsysa]assign interface GigabitEthernet 1/0/1 公共接口 --- 勾…

V90伺服电机初调试

分配设备IP地址 打开博途,将IP地址分配给对应伺服 打开V-ASSISTANT软件,刷新后读取硬件。VASSISTANT软件选择指定伺服,点击设备调试, 在控制模式选项中选择基本定位器控制(EPOS) 在设置PROFINET-选择报文页…