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

从一张表格开始做挖机报价系统

一、前言

历时4个月的挖机销售报价系统进入收尾阶段,由我直接负责与业务方对接,这中间各种折腾真是一言难尽,项目开发过程中还要维护POS系统以及牛奶配送系统,本项目我们采用的是迭代开发,今天讲一下具体的开发过程以及本项目业务架构。

注:这是我这5年在公司第三比较大的项目,第二个项目见 《窗帘销售平台技术架构的一点思考》,这也是我负责产品设计第二个项目。

二、迭代开发

上面方框中就是一个迭代周期,每一个迭代周期时间在1~2周左右,形成一个可演示版本,并且部署到澳洲生产环境机器上,交付给业务方进行试用,然后根据试用的结果再梳理出下一迭代需求。

1、需求阶段

业务方很难讲清楚需求,在第一次需求会上给我们看了一个Excel表格,有接近100多个字段,说他们主要是用这个表格来管理所有的挖机主机和零部件从采购、库存、客户、销售报价、出库、财务、售后一系列工作,现在需要开发一个软件来管理。

注:几乎所有业务方都很难讲清楚自己的需求,毕竟他们不是做系统的,我们做为专业人士要理解这一点,如果能够是需要尽量引导业务方讲出他真正需要做的功能。

3、设计阶段

我们团队总共8个人,人人都是产品经理,所有人都需要参加与需求方的沟通会以及考虑自己所负责模板的产品原型,在这过程中我更多的是负责思考整个项目要拆分成哪些功能模块,每个模块需要几个交互页面,页面之间逻辑是怎样的,业务流程是什么,数据流是怎样的,要建哪些表,表之间的关系以及明确每张表的关键字段,具体细节由各位开发自己去考虑。

4、开发阶段

团队分工合作,我一直认为如果做业务技术,团队成员水平一定是阶梯式的, 由技术扎实的开发负责基础架构搭建和技术难点解决,比如 报价模板在线签名,权限管理、延迟队列、库存管理抽像等,业务经验较丰富的负责核心业务开发,在开发过程中有业务逻辑问题反馈给我,我考虑清楚重新调整产品逻辑与页面原型。

注:架构中间件团队对技术人员的要求是不同的,这种团队需要开发人员水平比较均衡,在搭建业务技术团队的时候要招好两个角色,一个做技术架构,另一个更能从客户角度思考需求,一般来讲对技术比较痴迷人对业务逻辑不会有太大兴趣,而能更多从客户需求考虑的人只会把技术当成解决问题一个工具,所以一个比较完美的团队最好有这两个角色并且能通力合作。

5、测试阶段

我一直认为一个专业的测试是相当重要的,搞不清楚为何很多大厂在削减测试人员,以我这么多年带技术团队经验观察的结果,开发的思路和测试是完全不同的,要想让开发做到无Bug上线几乎是不现实的,尤其是像POS系统、报价系统这些直接影响销售收入的软件,如果没有测试把握完全无法想像。我对测试人员要求是必须搞清楚数据流,每一笔业务操作写到表的哪个字段都要搞清楚并且对产品功能逻辑问题进行有效反馈,然后我再重新考虑产品原型的调整,所以我比较清闲。

注:我一直认为一个技术管理者最重要的就是做好工作安排,老板是不会考核你个人的产出的,他要考核的是整个团队的产出,你撸不撸代码老板是不Care的,但团队成员理不清楚思路或者技术难点你必须搞定,这也是技术管理者该做的事情。

6、功能演示

做完一个小版本我们就给澳洲业务方做本次迭代的功能演示,然后业务方通过具像化可运行的产品去思考本次迭代的功能需要做哪些优化以及下一个迭代还要做哪些功能,这样版本从0.1演变到0.8,每个小版本都与业务方有充分沟通,整个产品进行逐步完善,再做两个小迭代,就可以交付正式使用。

注:这种迭代模式一个比较大的问题就是业务方经常对已经完成的功能模板提出新的需求。

三、业务架构

上图是报价系统的业务架构图,整个系统是以商品和客户为核心进行构建。

1、客户CRM模块

客户是CRM模块的核心,围绕着客户将其在系统中的每一个事件都进行汇总,并且记录每一事件中销售与客户的沟通记录,这样销售在跟进一个客户时,可以清晰地知道与客户交互的所有情况,我们会生成一个时间轴,什么时间接到客户电话,什么时间进行报价,什么时间与客户签订合同,以及这中间所有的沟通记录,然后给客户分成不同等级,当客户变成非活跃时,会及时提醒销售进行跟进。

2、商品模块

商品模块有点复杂,这与窗帘销售不太一样,想了很长时间才想清楚,主要是主机和零部件的管理是完全不同的,主机价值都比较高,对于每一台主机是需要全链路跟踪的,这个关键点在于主机的序列号,需要通过主机序列号串起从供应商发货到入库、在哪个仓库,在仓库哪个区位,然后报价生成合同生成时关联到起来一直到该主机出库甚至后续的售后,而对于零部件来讲就相对简单,采购后供应商可以分批次发货,在入库时需要指定放到哪个仓库哪个货架,但零部件在货架上多少数量是不需要管理的,也没有办法管理,只维护某个型号的零部件当前在哪个仓库哪个区位什么货架上即可。

注:在产品设计时一定要考虑哪些是必须要做的,哪些是不需要做的,很多功能做出来实际业务流程限于企业的管理成本也没有办法用起来。

3、财务模块

财务模板也想了很长一段时间才想清楚,还好我自学了一段时间会计,后来想明白了就比较简单了,其实把应付款和应收款管理好就可以,应付款对应采购合同,应收款对应销售合同,一个合同可以开1张或多张发票,一张发票可以进行一次或多次付款,只有财务进行发票确认的采购价和销售价才是最准确的,最终利润是根据发票上销售价减去采购价再扣减分摊的物流成本进行计算,这样我们就能够精确计算每一台主机的销售利润。

注:这张图是报价选商品的主流程,我们将服务、安装费都打包成基础产品,这样整个系统架构会更简单一些。

四、技术要点

1、采用最简单的单体前后端分离架构,除了牛奶那个系统其它系统我们都没用分布式架构,牛奶业务零售再过两个月左右就会完全停掉,到时再把系统架构整理出来,纪念一下我是如何搭建年销售额百亿的系统架构的,但这是一个有点悲伤的故事。

2、报价模板生成涉及到解析Word模板、动态生成PDF报价文件,在线签名,邮件发送给客户。

3、操作日志 解析BinLog 记录了每张表每个字段变更前后的值。

4、ToB的系统没有高并发的挑战,但业务复杂度是远远超过ToC的业务,这里仅简单介绍一下,实际项目中更复杂,每一个下拉框选择不同的类型都会触发一系列业务规则。

注:一个产品从0到1还是挺有难度的,需要理清客户真正需求,平衡好需求与开发进度的关系,如果掌握不了一个度,任何一个点你可能都需要花一两周时间去做,然后整个项目进度无限期拖延。

相关文章:

从一张表格开始做挖机报价系统

一、前言 历时4个月的挖机销售报价系统进入收尾阶段,由我直接负责与业务方对接,这中间各种折腾真是一言难尽,项目开发过程中还要维护POS系统以及牛奶配送系统,本项目我们采用的是迭代开发,今天讲一下具体的开发过程以…...

Qt扫盲-QTreeView 理论总结

QTreeView 理论使用总结 一、概述二、快捷键绑定三、提高性能四、简单实例1. 设计与概念2. TreeItem类定义3. TreeItem类的实现4. TreeModel类定义5. TreeModel类实现6. 在模型中设置数据 一、概述 QTreeView实现了 model 中item的树形表示。这个类用于提供标准的层次列表&…...

BF算法详解(JAVA语言实现)

目录 BF算法的介绍 图解 JAVA语言实现 BF算法的时间复杂度 BF算法的介绍 BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继…...

零基础转行网络工程师,过来人给的一些建议

最近收到好多同学的一些提问,零基础没经验,能不能转行到网络工程师?薪资能有多少?发展前景怎么样? 应该有不少朋友都有这个疑问,那么,今天我尽量给大家做出一个详细的解答,希望能有…...

Vue中如何进行分布式搜索与全文搜索(如Elasticsearch)

在Vue中实现分布式搜索与全文搜索(使用Elasticsearch) 分布式搜索和全文搜索在现代应用程序中变得越来越重要,因为它们可以帮助用户快速查找和检索大量数据。Elasticsearch是一种强大的分布式搜索引擎,它可以用于实现高性能的全文…...

数据结构-图-最小生成树问题

最小生成树 并查集定义举例说明查找某个元素属于哪个集合代码实现路径压缩 Kruskal算法原理代码实现 Prim算法原理代码实现 并查集 定义 🚀在一些应用问题中,需要将n个不同的元素分成一些不相交的集合。开始时,每个元素自成一个单元素集合&…...

使用vite+npm封装组件库并发布到npm仓库

组件库背景:使用elementplusvue封装了一个通过表单组件。通过JSX对el-form下的el-input和el-button等表单进行统一封装,最后达到,通过数据即可一键生成页面表单的功能。 1.使用vite创建vue项目 npm create vitelatest elementplus-auto-form…...

85.最大矩形

单调栈&#xff0c;时间复杂度o(mn)&#xff0c;空间复杂度o(mn) class Solution { public:int maximalRectangle(vector<vector<char>>& matrix) {int mmatrix.size();if(m0){return 0;}int nmatrix[0].size();//记录矩阵中每个元素左边连续1的数量vector<…...

Windows服务器 开机自启动服务

1、新建txt&#xff0c;并粘贴下面脚本 start cmd /k "cd /d D:\ahjd&&java -jar clips-admin.jar" start cmd /k "cd /d D:\ahjd\dist&&simple-http-server.exe -i -p 8000"说明&#xff0c;脚本格式为&#xff1a;start cmd /k “cd /d…...

《算法通关之路》chapter17一些通用解题模板

《算法通关之路》学习笔记&#xff0c;记录一下自己的刷题过程&#xff0c;详细的内容请大家购买作者的书籍查阅。 1 二分法 1.1 普通二分法 # 查找nums数组中元素值为target的下标。如果不存在&#xff0c;则返回-1def bs(nums: list[int], target: int) -> int :l, h …...

常用求解器安装

1 建模语言pyomo Pyomo是一个Python建模语言&#xff0c;用于数学优化建模。它可以与不同的求解器&#xff08;如Gurobi&#xff0c;CPLEX&#xff0c;GLPK&#xff0c;SCIP等&#xff09;集成使用&#xff0c;以求解各种数学优化问题。可以使用Pyomo建立数学优化模型&#xf…...

第三章:最新版零基础学习 PYTHON 教程(第一节 - Python 运算符)

在Python编程中,运算符一般用于对值和变量进行操作。这些是用于逻辑和算术运算的标准符号。在本文中,我们将研究不同类型的Python 运算符。 运算符:这些是特殊符号。例如- + 、 * 、 / 等。操作数:它是应用运算符的值。目录 Python 中的运算符类型 Python 中的算术运算符…...

细粒度特征提取和定位用于目标检测:PPCNN

1、简介 近年来&#xff0c;深度卷积神经网络在计算机视觉上取得了优异的性能。深度卷积神经网络以精确地分类目标信息而闻名&#xff0c;并采用了简单的卷积体系结构来降低图层的复杂性。基于深度卷积神经网络概念设计的VGG网络。VGGNet在对大规模图像进行分类方面取得了巨大…...

【STM32单片机】数学自动出题器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用按键、IIC OLED模块等。 主要功能&#xff1a; 系统运行后&#xff0c;OLED液晶显示出题器开机界面&#xff0c;默认结果范围为100&#xff0c;可按…...

C语言之动态内存管理篇(1)

目录 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 今天收假了&#xff0c;抓紧时间写几篇博客。我又来赶进度了。今天我们来讲解动态内存管理。&#x1f197;&#x1f197; 为什么存在动态内存分配 假设我们去实现一个…...

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下&#xff1a; React&#xff1a; V18.2.0Node.js: V16.14.0TypeScript&#xff1a;最新版工具&#xff1a; VsCode 本文将采用图文详解的方式&#xff0c;手把手带你快速完成在React项目中配置husky、prettier、commitLint&#xff0c;实现编码规范的统…...

【VINS】苹果手机采集单目相机+IMU数据离线运行VINS-Mono

0.准备工作 开个新坑&#xff0c;之前用Android手机做过离线采集数据的实验&#xff0c;这次用IPhone来测试&#xff01; 1.虚拟机配置Mac OS 下载一个Mac OS 的ios镜像&#xff0c;打开虚拟机按照跟Ubuntu差不多的方式安装&#xff0c;但是发现没有Mac OS的入口。 因为VMwa…...

数据结构 2.1 单链表

1.单链表 线性表&#xff1a;1.有限的序列 2.序列中的每一个元素都有唯一的前驱和后继&#xff0c;除了开头和结尾的两个节点。 顺序表&#xff1a;分配一块连续的内存去存放这些元素&#xff0c;eg、数组 链表&#xff1a;内存是不连续的&#xff0c;元素会各自被分配一块内…...

[Machine Learning]pytorch手搓一个神经网络模型

因为之前虽然写过一点点关于pytorch的东西&#xff0c;但是用的还是他太少了。 这次从头开始&#xff0c;尝试着搓出一个神经网络模型 &#xff08;因为没有什么训练数据&#xff0c;所以最后的训练部分使用可能不太好跑起来的代码作为演示&#xff0c;如果有需要自己连上数据…...

KdMapper扩展实现之Dell(pcdsrvc_x64.pkms)

1.背景 KdMapper是一个利用intel的驱动漏洞可以无痕的加载未经签名的驱动&#xff0c;本文是利用其它漏洞&#xff08;参考《【转载】利用签名驱动漏洞加载未签名驱动》&#xff09;做相应的修改以实现类似功能。需要大家对KdMapper的代码有一定了解。 2.驱动信息 驱动名称pcds…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...