CRM项目开发【准备篇】

(参考B站视频CRM项目)

01-基本技术框架

  • 视图层(View):展示数据,负责跟用户交互

    html,css,js,jquery,bootstrap

  • 控制层(Controller):控制业务处理流程,(接收请求,接收参数,封装参数;根据不同的请求调用业务层处理业务;根据处理结果,返回响应信息)

    ServletSpringMVC

  • 业务层(Service):处理业务逻辑(处理业务的步骤以及操作的原子性)

    SpringJavaSE

  • 持久层(Dao):操作数据库

    MyBatis

02-项目开发流程

  1. 招标

    甲方、乙方、标书

  2. 可行性分析——可行性分析报告

  3. 需求分析——需求文档

    产品经理:需求调研

    项目原型:主要是静态网页,方便确定需求

  4. 分析与设计

    • 架构设计——架构文档(架构师)

      物理架构设计:如应用服务器、数据库服务器的设计

      逻辑架构设计:代码分层(视图层–控制层–业务层–持久层–数据库)

    • 项目设计——项目设计文档(项目经理)

      物理模型设计:表、字段、关系

      逻辑模型设计:类、属性、方法、返回值和参数、类之间的关系

      界面设计:企业级应用一般要求朴素、互联网应用一般要求炫酷一些

      算法设计:算法设计文档

  5. 搭建开发环境——技术架构文档

  6. 编码实现(程序员编码常在的阶段)

  7. 测试(程序员编码常在的阶段)

  8. 试运行——使用手册

  9. 上线—实施时文档

  10. 运维——运维手册(国内软件能用到5年的就已经很不错了,运维基本上留个2年就挺好了)

  11. 文档编纂

    该流程贯穿于上述过程之中,包括标书、可行性分析报告、需求文档、架构文档、项目设计文档、算法设计文档、技术架构文档、使用手册、实施文档、运维手册

03-项目核心业务

  1. CRM项目的简介:Customer Relationship Management 客户关系管理系统
    企业级应用,传统应用;给销售或者贸易型公司使用,在市场、销售、服务等各个环节中维护客户关系。
    CRM项目的宗旨:增加新客户,留住老客户,把已有客户转化为忠诚客户。

    • 传统应用相对的就是互联网应用。
  2. CRM是一类项目,我们的CRM是给一个大型的进出口贸易公司来使用的,做大宗商品的进出口贸易;商品是受国家管制的。

  3. CRM项目的核心业务:

    • 系统管理功能:不是直接处理业务数据,为了保证业务管理的功能正常安全运行而设计的功能。

      比如:用户登录、安全退出、登录验证等,给超级管理员,开发和运维人员使用。

    • 业务管理功能:处理业务数据

      • 市场活动:市场部,设计市场活动营销活动
      • 线索:销售部(初级销售),增加线索
      • 客户和联系人:销售部(高级销售),有效地区分和跟踪客户和联系人
      • 交易:销售部(高级销售),更好地区分和统计交易的各个阶段。
      • 售后回访:客服部,妥善安排售后回访。主动提醒。
      • 统计图表:管理层,统计交易表中各个阶段数据量。

04-主键id的生成方式

关于分布式id问题的小总结

  • 分布式id:在数据量不大的时候,单库单表完全可以支撑现有业务,数据量再大一点搞个MySql主从同步也可以。数据量增长,到后期,需要进行分库分表,显然,这个时候需要一个全局唯一ID,而这个订单号就是分布式ID。
  • 需要满足的条件:全局唯一、高可用、高性能、简单可用
  • 方案:
算法 优点 缺点
UUID/GUID 容易实现、ID唯一、无需中心化服务器、不会泄露机密 可读性差、占用空间过多、影响数据库性能
数据库递增 容易产生、可读性好、存储空间小 需要中心化的服务器、ID暴露不安全、需要访问数据库获取id
随机数 可以有可读性、存储空间小、随机且安全 需要中心化的服务、需要两步操作
随机字符串 短、可读性高、随机且安全 ID可能不唯一
雪花算法 存储少、可读性高、性能好 时间回拨会出问题、ID生成有一定规律不安全
MongoDB的ID 可读性高、性能好 占用存储过多、时间回拨有问题、ID生成有规律
  1. 数据库自增

    利用数据库主键可以设定为自增的特点来设置对应表的id字段。

    【缺陷】运行效率低、并发场景表现很差

    【优势】开发容易

  2. hilo算法

    转载自HILO

    private class HiloOptimizer {private String prefix;private int maxLo;private int lo;private long hi;private long lastValue;public HiloOptimizer(String prefix, int maxLo) {this.prefix = prefix != null ? prefix.replace("{", "${") : "";this.maxLo = maxLo;            //最大低位this.lo = maxLo + 1;           //最低初始位}public synchronized String generate() {if (lo > maxLo) {                    //当低位超过最大高位lastValue = getLastValue();  //表示hi位的进位次数,从数据库id管理表获取lo = lastValue == 0 ? 1 : 0;     //低位归0hi = lastValue * (maxLo + 1);    //高位进位}return String.valueOf(hi + lo++);    //低位最后自增lo++}
    }
    

    为了避免每次的生成都从数据库中查询,开发了该算法,不使用synchronized也能产生不重复的序号。

    基本公式:
    hi∗(maxlo+1)+lohi * (max_lo + 1) + lo hi∗(maxl​o+1)+lo

  3. 雪花算法SnowFlake

    参看原文

    定义:一种分布式的id生成算法,核心思想是使用64位的long数字作为全局唯一id

    64位的含义(0-63)

    0:无意义,仅仅为了标识是正数,负数部分我们不使用

    1-41:时间戳(时间范围在69年,以毫秒为最小粒度)

    42-46:机房id(32个机房)

    47-51:机器id(每个机房内可表示32个电脑)

    52-63:序号(这一毫秒内的第多少个请求,最大支持4096个)

    将上述各个逐次拼接,就可以得到一个基本上唯一的分布式id

    【优点】高性能、高可用:生成时不依赖于数据库,完全在内存中生成;容量大:每秒能生成百万的自增idid是自增的:存入数据库中的索引效率比较高。

    【缺点】依赖与宜通世纪间的一致性,如果时间被回调或者改变,就会造成id冲突或者重复。

  4. UUID

    参考原文

    • UUID的基本定义:Universally Unique Identifier,一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符。

    • 基本特点:经由一系列的算法机器生成、非人工指定和识别的、在特定的范围内重复的可能性极小

    • 基本模式:是一个16字节共128位长的数字,通常以36字节的字符串表示,如:3F2504E0-4F89-11D3-9A0C-0305E82C3301

      128位的含义(0-127)

      0-59:时间戳

      60-63:UUID版本号

      64-76:clock sequence

      77-79:保留字段

      80-127:节点标识

    • UUID的版本包括基于时间的和DEC安全的。

    • java中的使用:

      import java.util.UUID;
      String uuid = UUID.randomUUID().toString();
      

    【优点】能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响;保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

    【缺点】比较占地方,和INT类型相比,存储一个UUID要花费更多的空间;使用UUID后,URL显得冗长,不够友好。

  5. 共享主键

    由另一张表的类型和长度决定。

  6. 联合主键

    由多个字段的类型和长度共同决定。

动力节点CRM项目开发【准备篇】相关推荐

  1. 动力节点crm项目中登录无响应记录

    项目场景: 利用thymeleaf+ssm完成crm项目,使用jquery实现登录功能. 问题描述 在到达登录页面后,点击登录,页面没有跳转,并且没有出现报错,但是没有填写账号点击登录和密码有弹窗提示 ...

  2. CRM项目开发【实操篇----市场活动模块】

    CRM项目开发[实操篇----市场活动模块] 前言:本项目来源于B站动力节点视频,CRM项目开发 使用的后端技术栈主要是SSM框架,不涉及boot,老师讲的非常细致,推荐 关于流程图部分,由于是老师创 ...

  3. CriminalIntent项目开发--后篇

    CriminalIntent项目开发--后篇 为Criminal Intent应用添加对话框 创建DiaologFragment,使用FragmentManager管理对话框,可以灵活的显示对话框. ...

  4. 动力节点-javaweb项目入门到实战教程-下

    继续上文的内容,are you ready?let's go !!! 熟悉的配方搭配精美的视频:动力节点最新JavaWeb视频教程,javaweb零基础入门到精通IDEA版-持续更新中_哔哩哔哩_bi ...

  5. 动力节点-javaweb项目入门到实战教程-上

    Java Web,是用Java技术来解决相关web互联网领域的技术栈.web包括:web服务端和web客户端两部分.Java在客户端的应用有Java Applet,不过使用得很少,Java在服务器端的 ...

  6. 第2章搭建CRM项目开发环境(搭建开发环境)

    2.2搭建开发环境 2.2.1创建crm项目 使用IDEA创建Empty Project,作为项目的工作空间 2.2.2创建crm模块 创建maven类型的模块,作为开发工程 2.2.3为项目添加me ...

  7. CRM 项目总结——工作篇

    在项目即将结束时,当站在全局的角度去看整个项目时,发现了我们平时忽略的很多问题,以下是我在OCS_CRM项目开发时所看到的一些问题,希望以后我们做项目时能注意以下问题: 1:效率:CRM很大一部份是报 ...

  8. 第2章搭建CRM项目开发环境(数据库设计)

    2.1CRM数据库设计 2.1.1数据库设计原则 我们可以结合项目原型来考虑数据库设计,市场活动,用户,这些都是需要是持久化的,所以都需要设计成表.表和表之间通常还会有一定的关系.看每一个创建表单上都 ...

  9. python3 项目开发-中级篇(二)

    本篇内容讲述图形化界面的聊天室的搭建过程. 用到的知识点: 1,tkinter模块 2,udp协议构建聊天室 3,多进程接收消息和发送消息 4,进程间的通信 难点: 1,用tkinter编写的图形化界 ...

最新文章

  1. java 老年代回收_Java垃圾回收之老年代垃圾收集器
  2. linux shell脚本 引入外部shell文件
  3. 长沙望城:以“速”大干一百天,以“质”实现双过半
  4. Kindle使用技巧
  5. 怎么将aspx网站改为静态页面?
  6. vue中Ajax(axios)及Ajax(vue-resource)的使用方法
  7. Python+OpenCV4:读写输入和输出的简单实践(图片、视频、摄像头)
  8. python中存储坐标_最好使用元组或numpy数组来存储坐标
  9. ssma5.3_适用于Oracle的Microsoft SQL Server迁移助手(SSMA)v7.1
  10. 《编码规范和测试方法——C/C++版》学习笔记 ·002
  11. C# 浏览器控件 谷歌、火狐内核
  12. jquery $.post 超时_详解如何实现前端jquery中的ajax方法,看这一篇就够了
  13. html5音乐播放器格式midi,HTML5 Audio时代的MIDI音乐文件播放
  14. 山东联通中兴B860 AV1.1机顶盒 刷机问题解决
  15. 桌面超简单小代码 bat形式
  16. 使用C#创建快捷方式
  17. STM32F401 / STM32F411 WeAct Studio 资料以及翻版说明
  18. veeam安装及使用
  19. 高效建站(华为云服务器建站IIS篇)
  20. 极客日报第123期:华为鸿蒙商标被驳回复审;《王者荣耀》蝉联全球手游畅销榜冠军;苹果承认iOS 14.5.1令旧款iPhone性能下降

热门文章

  1. macOS图片编辑开发
  2. SQL SERVER精品视频教程
  3. Bigder:42/100 showCase多少bug可以打回去
  4. nodejs--promise之bluebird部分API
  5. Linux awk指令详解
  6. VR看房难改变国内房地产市场,看看国外巨头怎么做
  7. ipython及ipython notebook常用操作
  8. linux安装 python3-pip没有安装候选项
  9. Python 之文本进度条
  10. windows中freeRTOS模拟器环境搭建