# SmartStock **Repository Path**: TsingFengIT/SmartStock ## Basic Information - **Project Name**: SmartStock - **Description**: 第二组-项目源码第二组-项目源码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-06-16 - **Last Updated**: 2024-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SmartStock ## **0.修订记录(M)** | 版本 | 作者 | 修订时间 | 修订内容 | | ---- | ---------------------- | ---------- | -------- | | V1.0 | 王豪杰、王双力、黄亚美 | 2024-06-14 | 初稿 | ## 1.需求分析**(M)** 业务要做的是会员小二提供一站式商品管理平台。提高工作效率和用户满意度;预期解决站点基本布局、权限管理、新建,编辑商品表单、查看商品列表、商品草稿静态详情页,预览商品、基于草稿的商品编辑上线审批流程以及进行站点数据展示;产品方案可以解决问题并且成本可以接受。 ### 1.1 术语解释**(M)** | **序号** | **术语名** | **术语解释** | | -------- | ---------- | -------------------------------- | | 1 | 游客 | 游客只能浏览loading页面 | | 2 | 运营小二 | 只能访问管理员相关功能 | | 3 | 超级管理员 | 可以访问并且操作站点所有功能页面 | ### 1.2 业务分析**(M)** #### 1.2.1 背景(C) ```basic 背景即:为会员运营⼩⼆提供⼀站式商品管理的⼯作平台。 ``` ​ 在电子商务领域,随着市场竞争的日益激烈和消费者需求的不断变化,会员制模式已成为众多电商平台吸引并保持用户忠诚度的重要策略之一。在此背景下,为会员运营小二提供的一站式商品管理平台显得尤为重要。 #### 1.2.2 问题**(C)** ```basic 问题即:当前状况+客观因素 VS 预期状态 = 矛盾(问题) ``` 信息同步滞后:商品信息更新与传播至前端存在延迟,影响用户体验。 权限管理混乱:运营团队成员对商品及会员数据的访问权限界定不清,存在安全风险。 决策缺乏数据支持:缺少有效的数据分析工具,商品策略调整和会员运营决策更多依赖经验而非数据。 工作流程不畅:商品从创建到上线的审批流程复杂且不透明,影响上新速度。 #### 1.2.3 诉求**(C)** ```basic 即:业务想到达到的目的(化解矛盾) ``` 数据实时性与准确性:建立实时数据同步机制,确保任何商品信息的变动都能立即反映在前端,提升用户体验,解决信息滞后与用户体验不佳的矛盾。 权限分明与安全强化:设计严谨的权限管理体系,确保每位会员运营小二只能访问和操作其权限范围内的数据,同时加强数据加密与访问控制,保护会员数据安全,化解权限混乱与安全风险的矛盾。 工作流程透明高效:简化商品从创建到上线的每一步审批步骤,实现流程的可视化管理,提升流程的透明度和执行效率,解决流程复杂与响应慢的矛盾。 成本控制与投资回报:在确保平台功能全面、性能优越的同时,合理规划项目预算,选择性价比高的技术和解决方案,确保项目实施的整体成本效益,实现长期的业务增长和价值创造。 #### 1.2.4 价值(M) ```basic 即:预期可以产生的收益(矛盾化解,所带来的业务状况的积极转变) ``` 运营效率显著提升:自动化工具和优化的工作流程将大大减少手动操作,缩短商品上架时间,提升运营团队的工作效率,使团队能够集中精力于更具策略性和创造性的工作,提高整体业务响应速度。 用户体验优化:实时的商品信息更新将增强用户在平台的浏览和购买体验,提高用户满意度和忠诚度,促进复购率和口碑传播,为平台带来更多的自然流量和更高的转化率。 成本节约与投资回报:虽然初期会有一定的开发和实施成本,但长期来看,平台将通过减少人力成本、降低错误率、提高运营效率等方式显著节约成本,同时增加收入来源,快速实现投资回报,提升企业的财务健康状况。 ### 1.3 技术目标&价值**(C)** | **序号** | **描述** | | -------- | ------------------------------------------------------------ | | **1** | SpringBoot、Mybatis-Plus、Redis、RocketMQ、SofaRegester、MySQL | | 2 | 数据实时处理:利用消息队列(如RocketMQ)和事件驱动架构,实现商品信息变更的实时处理与推送,保证前后端数据的一致性和时效性。 | | 3 | 接口限流处理:使用Redisson限流策略,如滑动窗口限流、令牌桶限流等 | ### 1.4 相关文档**(O)** - 需求文档: - https://www.yuque.com/chunchunzi-eb5c7/md86pi/azm9uh1ccyftg0ek - 后端系分:[https://www.yuque.com/wangshuangli7wvu2/auqv31/rgq3my0hqt1lxzzu#MM9tM](https://www.yuque.com/wangshuangli-7wvu2/auqv31/rgq3my0hqt1lxzzu#MM9tM) - 前端系分: - https://www.yuque.com/zhangpeixin-nodm4/ph3g51/tc1zufbor6qhy4gc - 质量系分: - https://www.yuque.com/zhangpeixin-nodm4/ph3g51/metg11nngwuahrzx ### 1.5 相关人员**(O)** 后端:王豪杰、黄亚美、王双力 前端:马志豪、郭孟雪 质量:张培鑫 - ## 2.系统设计**(M)** 2.1 模型设计(C) ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718340470306-911915da-bace-40c9-ab64-6e4246a99f8f.png) ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718340475030-c0959464-8e0e-41a9-8d56-28487c74ac15.png) ### 2.4 接口设计(C) ##### 1. 用户登录 | **接口** | /user/login | | | | ------------ | ------------------------------------------------------------ | ---- | ---- | | **请求方式** | POST | | | | **方法** | Result userLogin(String username,String password) | | | | **功能** | 用户登录 | | | | **入参** | com.entity.User属性:1.User user :用户,必须 | | | | **出参** | com.entity.User属性:1.User user:登录用户{code: intdata: Usermessage: String} | | | ##### 2. 查询所有的商品 | **接口** | /product/queryAllProduct | | -------- | ------------------------------------------------------------ | | **方法** | Result> queryAllProduct(UserDto userDto) | | **功能** | 查询所有的商品 | | **入参** | com.entity.UserDto属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.UserDto:前端传递的封装用户,必须 | | **出参** | java.util.ArrayList属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.List ProductList:根据用户查询到的所有的商品列表{code: intdata: Productmessage: String} | ##### 3. 新增商品详细信息 | **接口** | /product/insertProduct | | -------- | ------------------------------------------------------------ | | **方法** | Result createProduct(Product product) | | **功能** | 新增商品详细信息 | | **入参** | com.entity.Product属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.Product product :商品,必须 | | **出参** | {code: intdata【非必须】message: String} | ##### 4. 根据id队列删除商品 | **接口** | /product/delectProductById | | -------- | ------------------------------------------------------------ | | **方法** | Result deleteProduct(long[] id) | | **功能** | 根据id队列删除商品 | | **入参** | java.lang属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.long[] id:商品id列表,必须 | | **出参** | 属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.int result:商品是否全部删除成功,1为成功,0为失败{code: intdata: Object【非必须】message: String} | ##### 5. 修改商品详情信息 | **接口** | /product/updateProduct | | -------- | ------------------------------------------------------------ | | **方法** | Result updateProductDetailInfo(ProductDetailInfo pro) | | **功能** | 修改商品详情信息 | | **入参** | com.entity.ProductDetailInfo属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.ProductDetailInfo pro:修改商品详细信息 ,必须 | | **出参** | 属性:(属性过多时,可写成类似“见 3.5 节模型” ,单独详述)1.int result:修改商品详细信息是否成,1为成功{code: intdata: Object【非必须】message: String} | ##### 6. 上下线接口 | **接口** | /product/onDownLine | | -------- | ------------------------------------------------------ | | **方法** | Result OnDownLine(ProductDto productDto) | | **功能** | 上下线接口 | | **入参** | com.entity.ProductDto 【必须】 | | **出参** | Result{code: intdata: Object【非必须】message: String} | ##### 7. 运营小二发起审核 | **接口** | /product/approval | | -------- | ------------------------------------------------------ | | **方法** | Result approalToOnline(ProductApprvalDto data) | | **功能** | 运营小二发起审核 | | **入参** | ProductApprvalDto data,审核参数,【必须】 | | **出参** | Result{code: intdata: Object【非必须】message: String} | 1. 获取商品详细信息 | **接口** | /product/get | | -------- | ---------------------------------------------- | | **方法** | Result getProduceDetails(long productld) | | **功能** | 获取商品详细信息 | | **入参** | long: productld | | **出参** | Product{code: intdata: Productmessage: String} | ##### 8. 日志查询 | 接口 | /log/list | | ---- | --------------------------------------------------- | | 方法 | Result> loglist(int curPage,int pagesize) | | 功能 | 分页查询日志 | | 入参 | int curPageint pagesize | | 出参 | List{code: intdata: Object message: String} | ##### 9. 查询用户信息 | 接口 | /user/get | | ---- | ---------------------------------------------------- | | 方法 | Result> getUserinfo() | | 功能 | 查询用户信息 | | 入参 | 无 | | 出参 | List{code: intdata: Listmessage: String} | ##### 10. 修改审核状态 | 接口 | /product/updateProduct | | ---- | ------------------------------------------------------------ | | 方法 | Result updateProduct(ProductInfo productInfo) | | 功能 | 修改审核状态 | | 入参 | com.entity.procuctInfo属性:1.ProductInfo productInfo:商品详情【必须】 | | 出参 | Result{code: intdata: Object【非必须】message: String} | ##### 11. 修改用户密保密码 | 接口 | /user/verifyUserSecurityPassword | | ---- | ------------------------------------------------------ | | 方法 | Result verifyUserSecurityPassword(User user) | | 功能 | 修改用户密保密码 | | 入参 | com.entity.user属性:1.User user:用户信息,必须; | | 出参 | Result{code: intdata: Object【非必须】message: String} | ##### 12. 修改用户密码 | **接口** | /order/queryOrder | | -------- | ------------------------------------------------------ | | **方法** | Result alterPassword(User user) | | **功能** | 修改用户密码 | | **入参** | com.entity.User属性:1.User user:用户,必须; | | **出参** | Result{code: intdata: Object【非必须】message: String} | ##### 13. 查询数据大盘 | **接口** | /order/queryOrder | | -------- | ------------------------------------------------------ | | **方法** | Result> queryOrder(int type) | | **功能** | 查询数据大盘 | | **入参** | 属性:1.int type:类型,必须; | | **出参** | Result{code: intdata: Object【非必须】message: String} | ##### 14. 城市查询 | **接口** | /city/queryCity | | -------- | ------------------------------------------------------ | | **方法** | Result> queryCity() | | **功能** | 城市查询 | | **入参** | 无 | | **出参** | Result{code: intdata: Object【非必须】message: String} | ##### 15. 操作记录查询 | **接口** | /operate/page | | -------- | ------------------------------------------------------ | | **方法** | R queryoperate(PageResult pageresult) | | **功能** | 操作记录分页查询 | | **入参** | PageResult pageresult | | **出参** | Result{code: intdata: Object【非必须】message: String} | ##### 16. 权限管理查询 | **接口** | /operate/permissionsPage | | -------- | ------------------------------------------------------ | | **方法** | R query(PageResult pageresult) | | **功能** | 权限操作记录分页查询 | | **入参** | Pageresult : pageresult | | **出参** | Result{code: intdata: Object【非必须】message: String} | ### 2.5 实施方案设计(M) 审核流程 ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718354657045-0a66c81b-7d30-4f1d-881f-af1cda1d5c45.png) 登录注册 ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718354702102-191fe3c7-0f29-4108-abd6-7952f18c2425.png) 时序图 ![img](https://cdn.nlark.com/yuque/0/2024/png/35999095/1718337144554-628e5784-b140-47d4-b41b-77320ab63d7f.png) ![img](https://cdn.nlark.com/yuque/0/2024/png/35999095/1718337111135-ea795153-5f7a-440c-8528-4459c4c1b6d2.png) ## 3.数据设计**(M)** *//只涉及到字段增改时,数据设计可作为系统设计中的单独小节,表达为“表结构设计”或“表结构变更”,* *//涉及到新增数据库表,或方案中有离线|实时计算回流数据的复杂设计,建议将数据设计作为独立章节* ### 3.1 数据方案设计**(C)** *// 方案中有相对独立或复杂的数据回流,实时计算链路等,建议添加本小节做整体说明,否则不需要* 示例1:G+策略业务中,涉及离线数据回流+线上缓存的数据方案设计 ![img](https://cdn.nlark.com/yuque/0/2024/png/45411663/1718243649566-bc82cb1c-6b96-4b59-af54-aabe24944a46.png) 示例2:旅程图业务中,涉及复杂的数据计算&数据回流链路,输出整体数据流转链路图 ![img](https://cdn.nlark.com/yuque/0/2024/png/45411663/1718243650041-da4c3630-f104-4987-8488-64153f76125f.png) 结合方案图简述设计思路和设计要点。 ### 3.2 数据模型设计**(C)** ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718341347973-b9aaee35-24d0-4436-befb-58842d0dfc4b.png) 示例:用户账单记录的数据模型ER图 ![img](https://gitee.com/TsingFengIT/images/raw/master/images/1718243649354-d5f43c36-0586-4fd7-9362-fd9d09e37bc5.png) 结合ER图简述模型设计要点。 ### 4.3 表结构设计**(C)** #### 4.3.1用户表 | 字段名 | 描述说明 | 字段类型 | 是否为空 | 备注说明 | | ------------ | -------- | ------------ | -------- | -------------------------------------------- | | id | 用户id | bigint | not null | 主键 | | user_name | 用户名 | varchar(100) | not null | | | pass_word | 密码 | varchar(50) | not null | | | confidential | 密保 | varchar(50) | not null | | | roles | 角色 | int | not null | 权限为0时为普通用户,权限为1时,为超级管理员 | | create_time | 创建时间 | Data | not null | | | update_time | 更新时间 | Data | not null | | | detete_flag | 删除标志 | int | not null | | #### 4.3.2 商品基本信息表 | 字段名 | 描述说明 | 字段类型 | 是否为空 | 备注说明 | | -------------------- | ---------------------------------------------- | ------------ | -------- | -------- | | product_id | 商品id | bigint | not null | 主键 | | product_picture | 商品头图 (链接) | varchar(100) | not null | | | product_type | 商品类型 | varchar(50) | not null | | | peoduct_category | 商品分类 | varchar(50) | not null | | | product_details_id | 外键)商品详情id | bigint | not null | | | product_supplier | 外键)供应商id | binint | not null | | | product_owner_state | 店小二操作的状态(包括已编辑,已提交审核) | int | not null | | | product_check_state | 商品的审核状态(包括未审核,审核通过,审核驳回) | int | not null | | | product_online_state | 商品的上线状态(包括未上线,已上线,已下线) | int | not null | | | product_price | 外键)商品价格类型id | bigint | not null | | | create_time | 创建时间 | dateTime | not null | | | update_time | 修改时间 | dateTime | not null | | | operator | 操作人 | bigint | not null | | | remark | 备注 | text | | | #### 4.3.3 商品详情表 | 字段名 | 描述说明 | 字段类型 | 是否为空 | 备注说明 | | --------------------- | ------------------------------------------------ | ------------ | -------- | -------- | | p_details_id | 商品详情id | bigint | not null | | | product_name | 商品名称 | varchar(100) | not null | | | rai_type | 权益类型 | int | not null | | | description | 描述信息 | text | | | | rich_text | 富文本 | text | | | | category | 类目 | varchar(20) | not null | | | service_guarantee | 服务保障 | text | not null | | | exchange_restrictions | 兑换限制 | int | not null | | | in_stock | 库存(初始库存) | int | not null | | | remaining_stock | 剩余库存 | int | not null | | | product_picture | 商品图片(链接图,上传图片生成链接) | varchar(100) | not null | | | show_time(可选) | 展示时间(上、下线时间)不用额外加数据,前端可传 | dateTime | not null | | | time_on | 上线时间 | dateTime | not null | | | time_off | 下线时间 | dateTime | not null | | | city_whitelist | 城市白名单 | text | | | | city_blacklist | 城市黑名单 | text | | | | supplier | 供应商 (前端可传) | bigint | not null | | | create_time | 创建时间 | dateTime | not null | | | update_time | 修改时间 | dateTime | not null | | | operator | 操作人 | bigint | not null | | | remark | 备注 | | | | #### 4.3.4 城市信息表 | 字段名 | 描述说明 | 字段类型 | 是否为空 | 备注说明 | | ------------- | -------- | ------------ | -------- | -------- | | id | id | bigint | not null | | | code_id | 城市id | varchar(100) | not null | | | parent_codeid | | int | not null | | | poaition_name | 位置名称 | varchar | not null | | | level | 城市级 | int | not null | | | create_time | 开始时间 | data | not null | | | update_time | 更新时间 | data | not null | | #### 4.3.5商品分类表 | 字段名 | 描述说明 | 字段类型 | 是否为空 | 备注说明 | | ------------ | -------- | ------------ | -------- | -------- | | cat_id | 分类id | bigint | not null | | | name | 名称 | varchar(100) | not null | | | parent_catid | | bigint | not null | | | level | 级 | int | not null | | | priority | 优先级 | int | not null | | | status | 状态 | int | not null | | | imgurl | 照片链接 | varchar | not null | | | leaf | | boolean | not null | | | create_time | 创建时间 | Data | not null | | | updata_time | 更新时间 | Data | not null | | ### 4.4 数据可用性checklist**(C)** **DB峰值评估:(缓存模块峰值评估类似)** - 日常TPS,QPS - 峰值TPS,QPS,峰值业务场景说明 - 是否存在读写热点和(是否需要有)应对方案,常见的如接口层限流+压测保障 **DB容量评估:(缓存模块峰值评估类似)** - DB的日增容量需求和未来一年的自然增长容量预估,如日增容量50GB,一年内自然增长2T - 结合业务技术方案、DB峰值评估、DB部署方案(uid拆分部署?异地容灾?) - 是否存在数据倾斜,常见的如uid拆分DB部署时,是否存在大uid账号的数据导致单库数据明显倾斜 **DB备份同步:** - 原则上新建库、新建表都需要提交数据同步链路备份到ODPS,便于问题排查和数据追溯 - 提交方法&平台链接:https://dtm.alipay.com/access/ - **字段增改不会自动更新同步,所以有字段更改记得重新提交** **数据兼容:** - 线上代码与新产生数据的兼容——预发数据是否会影响线上,发布过程中兼容性设计 **数据隔离:** - 预发和生产环境的数据隔离 - 涉及到压测的,生产数据和压测数据的隔离 ## 4.非功能性设计**(M)** ### 4.1 监控&日志**(M)** | **监控项** | **预警项** | **展示方式** | **来源(细化到文件名)** | | ------------ | --------------- | ------------ | ------------------------ | | 首页秒级监控 | 激增/减>20%跌零 | 曲线 | kaileido-rpc-digest.log | a. 日志结构说明(样例:骰子任务日志) ```plain 日志文件: logs/kaleido/kaleido-task-digest.log odps表: antods.s_dd_logv_kaleido_task_digest_log 日志样例: 2021-09-28 00:12:38,749 [0be91e0416327591584983256e7a59 0.1.2.11 - /// - ] INFO TASK_DIGEST - (DICE_NORMAL_TASK_20211111,2088242664629212,FINISH,tk12276,1,SUCCESS) 样例解析: ● DICE_NORMAL_TASK_20211111——发骰子子任务bizType标记字段,取值如下: ● DICE_NORMAL_TASK_20211111:任务列表 ● DICE_FLOOR_20211111:楼层浏览 ● DICE_HIDE_TASK_20211111:钻石会员&淘宝唤端任务 ● 2088242664629212——UID ● FINISH——完成态 ● tk12276——任务id ● 1——筛子数量 ● SUCCESS——状态码 ``` ### 4.2 发布计划**(O)** - 1、DB变更、drm配置同步 - 2、应用发布顺序: ​ 服务端 ==> 前端 - 3、运营配置 ## ## 6.工作量&排期计划**(M)** ### 6.1 工作量评估**(M)** | **功能模块** | **负责人** | **工作量(最小单位为0.5天)** | | ---------------------- | ---------- | --------------------------- | | **数据模型设计** | **王豪杰** | **2.0** | | 登录页面、权限管理 | 王双力 | 2.0 | | 商品管理页面、数据大盘 | 黄亚美 | 2.0 | | | | | ### 6.2 排期计划**(C)** 在合理评估工作量的基础上,列出关键时间节点: 系分:6.13-6.14 研发:6.14-6.19 联调:6.19-6.21