Em xin gửi lời cảm ơn đến anh/chị tại phòng Hành chính – Đào tạo, anh/chị mentors trong DG8-Ext TMA Solutions Bình Định đã nhiệt tình giúp đỡ, tạo điều kiện và hỗ trợ em hoàn thành khóa
Trang 1
BÁO CÁO THỰC TẬP NGHỀ NGHIỆP
Đề tài: CRM Email Customer Touchpoint
Ngành : Hệ thống thông tin quản lí Chuyên ngành : Quản trị hệ thống thông tin Đơn vị thực tập : TMA Solutions Bình Định
Vị trí thực tập : Java Back-end Intern Giảng viên hướng dẫn : ThS Nguyễn Văn Chức
TRƯỜNG ĐẠI HỌC KINH TẾ – ĐẠI HỌC ĐÀ NẴNG
KHOA THỐNG KÊ – TIN HỌC
Trang 21
MỤC LỤC
NHẬN XÉT CỦA ĐƠN VỊ THỰC TẬP 2
LỜI CẢM ƠN……….4
LỜI CAM ĐOAN 5
LỜI MỞ ĐẦU……….6
I Giới thiệu TMA Solutions Bình Định và Java Back-end Developer 7
II Cơ sở lí thuyết 10
III.Phân tích và thiết kế hệ thống 16
1 Sơ đồ Use Case của hệ thống 16
2 Thiết kế hệ thống 16
2.1 Liệt kê API 16
2.2 Database 17
IV Triển khai đề tài và kết quả đạt được 18
1 Triển khai xây dựng dự án 18
1.1 Cài đặt môi trường 18
1.2 Các công nghệ được sử dụng trong dự án 18
1.3 Tạo project Spring Boot với Spring Initializr 18
1.4 Xây dựng template 19
1.5 Thực hiện viết code 19
2 Kết quả đạt được 43
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 51
Trang 32
NHẬN XÉT CỦA ĐƠN VỊ THỰC TẬP
Trang 43
Trang 54
LỜI CẢM ƠN
Để hoàn thành được kì thực tập nghề nghiệp cũng như báo cáo này, lời đầu tiên em xin được gửi đến quý thầy cô giáo khoa Thống kê – Tin học, trường Đại học Kinh tế – Đại học Đà Nẵng lời cảm ơn sâu sắc
Đặc biệt, em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Văn Chức – giảng viên trực tiếp hướng dẫn em trong kì thực tập vữa qua Thầy đã giúp đỡ và động viên em để em có thể hoàn thiện báo cáo này
Em xin gửi lời cảm ơn đến anh/chị tại phòng Hành chính – Đào tạo, anh/chị mentors trong DG8-Ext TMA Solutions Bình Định đã nhiệt tình giúp đỡ, tạo điều kiện và hỗ trợ em hoàn thành khóa thực tập Batch13BD cũng như là làm quen với môi trường làm việc, cải thiện
và phát triển các kĩ năng cần có của một Java Back-end Developer
Vì kì thực tập còn bị hạn chế về mặt thời gian, khả năng và kiến thức của bản thân em còn nhiều thiếu xót Vậy nên, báo cáo này khó tránh khỏi sai xót, em rất mong nhận được ý kiến nhận xét và đóng góp để bản thân hoàn thiện hơn nữa ở kì thực tập tốt nghiệp
Em xin chân thành cảm ơn!
Trang 65
LỜI CAM ĐOAN
Em xin cam đoan báo cáo đề tài “CRM Email Customer Touch Point” là thành quả nghiên cứu trong thời gian thực tập tại TMA Solutions Bình Định dưới sự hướng dẫn nhiệt tình và sự hỗ trợ đến từ anh/chị mentors trong DG8-Ext và giảng viên hướng dẫn – thầy Nguyễn Văn Chức
Nội dung báo cáo này là kết quả mà em đã nỗ lực tìm hiểu, nghiên cứu, học tập trong suốt quá trình thực tập tại công ty, đồng thời học hỏi từ các nguồn tài liệu mà công ty cung cấp Em xin cam đoan và chịu hoàn toàn trách nhiệm nếu có vấn đề xảy ra
Họ và tên sinh viên
Tạ Thị Trang
Trang 76
LỜI MỞ ĐẦU
1 Mục tiêu của đề tài
- Customer touch point là cửa sổ tương tác giữa người mua cá nhân và doanh nghiệp Điều này bao gồm bất kì trao đổi nào, dù là trực tiếp hay thông qua các phương tiện kỹ thuật số Email là một customer phổ biến - là kênh hỗ trợ khách hàng chính cho hầu hết các công ty B2B, B2C hoặc Thương mại điện tử 62% khách hàng nói rằng họ thích
hỗ trợ qua email hơn để giao tiếp với các thương hiệu Email ảnh hưởng đến mọi thứ,
từ tỷ lệ mua hàng lặp lại đến giá trị lâu dài đến cách ai đó nói về thương hiệu của bạn một cách riêng tư và công khai Bạn có thể tận dụng sức mạnh và phạm vi tiếp cận của email để thúc đẩy sự tương tác và mang lại trải nghiệm tốt hơn cho khách hàng
- Với các nền tảng phát triển nhanh chóng, các doanh nghiệp liên tục gặp khó khăn trong khi thống nhất các khách hàng tiềm năng Do vậy, mục tiêu của đề tài này chính là dựa trên tính năng quản lí khách hàng của CRM giúp doanh nghiệp có thể quản lí các customer touch point thông qua một nền tảng duy nhất
2 Đối tượng và phạm vi nghiên cứu
Đề tài này được thực hiện với Spring Boot được phát triển từ ngôn ngữ lập trình Java trong
hệ sinh thái Spring framework Các công nghệ khác được sử dụng: PostgreSQL, Swagger
3, Git/Github Từ đó xây dựng lên các API cơ bản của một trang web
3 Kết cấu của đề tài
Đề tài được tổ chức gồm các phần:
• Mở đầu
• Chương 1: Giới thiệu TMA Solutions Bình Định và Java Back-end Developer
• Chương 2: Cơ sở lí thuyết
• Chương 3: Phân tích và thiết kế hệ thống
• Chương 4: Triển khai đề tài và kết quả đạt được
• Kết luận và hướng phát triển
Trang 87
I Giới thiệu TMA Solutions Bình Định và Java Back-end Developer
1 TMA Solutions Bình Định
Được thành lập năm 1997, TMA là tập đoàn công nghệ hàng đầu Việt Nam với
4000 kỹ sư và khách hàng là những tập đoàn công nghệ cao hàng đầu thế giới từ 30 quốc gia TMA hiện có 7 chi nhánh tại Việt Nam (6 tại Tp.HCM và 1 ở Tp Quy Nhơn) cùng 6 chi nhánh ở nước ngoài (Mỹ, Úc, Canada, Đức, Nhật, Singapore)
Tháng 6 năm 2018, TMA đã mở chi nhánh tại Bình Định Sau 5 năm, TMA Bình Định đã phát triển nhanh chóng với hơn 600 kỹ sư, trong đó có nhiều kỹ sư đang làm việc tại TP.HCM đã trở về làm việc tại quê hương
Tháng 8 năm 2018, TMA đã khởi công xây dựng Công viên Sáng tạo TMA Bình Định (TMA Innovation Park – TIP) trên 10 hecta tại Thung lũng Sáng tạo Quy Nhơn (Quy Nhon Innovation Park – QNIVY) với vốn đầu tư hàng trăm tỷ đồng
Là trung tâm phần mềm đầu tiên tại Thung lũng Sáng tạo Quy Nhơn, Công viên Sáng tạo TMA mang sứ mệnh trở thành trung tâm phát triển phần mềm và công nghệ cao hàng đầu tại miền Trung, góp phần quan trọng đưa Thung lũng sáng tạo Quy Nhơn trở thành một điểm đến của công nghệ 4.0 tại Việt Nam Công viên Sáng tạo TMA bao gồm Trung tâm Phát triển Phần Mềm, Xưởng Phần mềm, Trung tâm R&D, Trung tâm Khoa học Dữ liệu, Học viện Công Nghệ…với tổng diện tích sử dụng hơn 15,000m2
Với mối quan hệ mật thiết và các chương trình hợp tác chiến lược cùng nhiều Đại học lớn trong khu vực miền Trung – Tây Nguyên như ĐH Quy Nhơn, ĐH Tây Nguyên, ĐH Phú Yên, ĐH Phạm Văn Đồng… Công viên Sáng tạo TMA với môi trường làm việc hiện đại, đạt tiêu chuẩn quốc tế có quy mô hơn 3000 kỹ sư sẽ không chỉ là nơi dành cho sinh viên Miền Trung đến lập nghiệp mà còn là nơi nhân tài miền Trung trên
cả nước hội tụ Thúc đẩy phát triển công nghệ cao, khoa học kỹ thuật – giáo dục và kinh
tế xã hội tại Bình Định và các tỉnh miền Trung
Với sự phát triển vững mạnh 25 năm qua, TMA tự hào nhận được sự tin tưởng của khách hàng là những tập đoàn lớn đến từ 30 quốc gia trên thế giới TMA nhiều năm liền vinh dự được bình chọn trong top doanh nghiệp CNTT Việt Nam, liên tục được
Trang 98
vinh danh trong top 10 doanh nghiệp xuất khẩu phần mềm, Top 10 doanh nghiệp Fintech, Top 10 doanh nghiệp AI – IoT…
Đặt yếu tố con người lên hàng đầu, TMA với môi trường làm việc chuyên nghiệp
và thân thiện, luôn nỗ lực tạo ra đời sống văn hóa phong phú, sôi động, để nhân viên TMA luôn cảm thấy thoải mái, xem công ty không chỉ là nơi làm việc, mà còn là nơi
có các hoạt động vui chơi, giải trí đầy thú vị, hấp dẫn
Cùng với đó, TMA còn có rất nhiều phúc lợi hấp dẫn như:
• Lương thưởng cạnh tranh
• Nhiều cơ hội thăng tiến
• Bảo hiểm chăm sóc sức khỏe nhân viên toàn diện với mức bảo hiểm cao
• Hệ thống đào tạo nội bộ với hàng trăm khóa học mỗi năm
• Hàng trăm cơ hội công tác nước ngoài mỗi năm
2 Java Back-end Developer
2.1 Java Back-end Developer làm gì?
Lập trình Java Backend là quá trình sử dụng ngôn ngữ lập trình Java để xây dựng phần mềm đảm nhiệm các chức năng xử lý logic, xử lý dữ liệu và quản lý tài nguyên của một ứng dụng hoặc trang web Java là một trong những ngôn ngữ lập trình phổ biến được sử dụng trong lập trình Backend
Các ứng dụng Java Backend có thể được xây dựng trên các nền tảng như Spring Framework, JavaServer Pages (JSP), Java Servlet và Enterprise JavaBeans (EJBs) Java cung cấp nhiều tính năng và thư viện hỗ trợ phát triển các ứng dụng Web Backend đáp ứng được các yêu cầu về hiệu suất, bảo mật và quản lý tài nguyên
2.2 Những kiến thức và kĩ năng mà một Java Back-end Developer cần có
Trang 109
- Kiểm soát phiên bản code 2.2.2 Kĩ năng chuyên sâu về code
- Web frameworks
- Công cụ kiểm thử Java
- Java Enterprise Edition
- DevOps
- Các nguyên tắc của SOLID
- Big Data
2.3 Lộ trình nghề nghiệp của Java Developer
- Junior: Đây là giai đoạn đầu với những vị trí cơ bản Thời kì Junior có thể có kéo dài lên đến thời gian 4 năm với những nhiệm vụ chính là code, đánh giá code, gỡ lỗi và làm các tài liệu kỹ thuật
- Senior: Giai đoạn tiếp theo sau Junior là Senior, khi kinh nghiệm và kiến thức được tích lũy đủ nhiều, nhân viên sẽ được nâng lên vị trí lập trình viên cao cấp, cụ thể hơn là mức độ Senior Ở vị trí senior trách nhiệm của lập trình viên sẽ lớn hơn, đôi khi sẽ kiêm luôn việc hướng dẫn khách hàng sử dụng theo hình thức đào tạo giúp họ hiểu về phần mềm
- Architect: Để đạt được vị trí này, một lập trình viên Java cần phải sở hữu khoảng 10 năm kinh nghiệm làm việc Ở vị trí Architect, nhiệm
vụ liên kết khách hàng của phần mềm và phân tích yêu cầu của họ, từ
đó xây dựng kiến trúc tổng thể hệ thống và chịu trách nhiệm về nó là những gì mà một Architect phải làm Đây là một giai đoạn không hề
dễ dàng
- Manager: Trách nhiệm của một manager là vô cùng lớn Không chỉ quản lý về chuyên môn, manager có trách nhiệm trong việc quản lý tài chính của phòng, cụ thể là ngân sách, quản lý nhân sự, phân phối phần mềm, và làm việc với các cấp quản lý cao hơn
Trang 11- Platform: Bất cứ môi trường phần cứng hoặc phần mềm nào mà trong
đó có một chương trình chạy, thì được hiểu như là một Platform Với môi trường runtime riêng cho mình (JRE) và API, Java được gọi là Platform
- Ngôn ngữ lập trình Java ban đầu được phát triển bởi Sun Microsystems
do James Gosling khởi xướng và phát hành vào năm 1995 Phiên bản mới nhất của Java Standard Edition là Java SE 8 Với sự tiến bộ của Java
và sự phổ biến rộng rãi của nó, nhiều cấu hình đã được xây dựng để phù hợp với nhiều loại nền tảng khác nhau Ví dụ: J2EE cho các ứng dụng doanh nghiệp, J2ME cho các ứng dụng di động
- Các phiên bản J2 mới đã được đổi tên thành Java SE, Java EE và Java
ME Phương châm của java là "Write Once, Run Anywhere" - viết một lần chạy nhiều nơi, nghĩa là bạn chỉ cần viết một lần trên window chẳng hạn, sau đó vẫn chương trình đó bạn có thể chạy trên Linux, Android, các thiết bị J2ME
b Một số tính năng của Java
- Hướng đối tượng - Trong Java, mọi thứ đều là một Object Java có thể
dễ dàng mở rộng và bảo trì vì nó được xây dựng dựa trên mô hình Object
- Nền tảng độc lập - Không giống nhiều ngôn ngữ lập trình khác bao gồm
cả C và C ++, khi Java được biên dịch, nó không được biên dịch thành ngôn ngữ máy nền tảng cụ thể, thay vào mã byte - nền tảng độc lập Mã byte này được thông dịch bởi máy ảo (JVM) trên nền tảng nào đó mà nó đang chạy
- Đơn giản - Java được thiết kế để dễ học Nếu bạn hiểu khái niệm cơ bản
về OOP Java, sẽ rất dễ để trở thành master về java
Trang 12và có số lượng người dùng rất cao
- Trong đó, Spring Boot là một dự án phát triển nằm trong hệ sinh thái Spring Framework Spring Boot là một Java framework được phát triển bởi Pivital Team dựa trên Java framework mã nguồn mở để tạo ra các microservice, nhằm mục đích xây dựng các ứng dụng Spring độc lập một cách nhanh chóng và có khả năng thực thi ngay
b Lợi ích của việc sử dụng Spring Boot
- Sở hữu đầy đủ các tính năng của Spring Framework
- Tạo ứng dụng một cách độc lập, có thể chạy trên cả nền tảng Java Web
- Cho phép nhúng trực tiếp các web server như Jetty, Tomcat,… mà không cần phải triển khai các file WAR
- Cung cấp nhiều plugin
- Tối ưu hóa công đoạn cấu hình cho ứng dụng, không sinh ra code cấu hình và nó cũng không yêu cầu người dùng phải cấu hình lại bằng XML
Từ đó, giúp tiết kiệm thời gian viết code và tăng năng suất lao động
- Có thể đóng gói ứng dụng Spring dưới dạng là file JAR và có thể dễ dàng khởi động ứng dụng chỉ với một câu lệnh ngắn gọn, quen thuộc: java – jar,…
- Giảm thiểu thời gian phát triển code, tăng hiệu suất phát triển chung của
Trang 1312
- JPA là viết tắt của Java Persistence API, nó là một đặc tả Java cho việc ánh xạ giữa các đối tượng Java với cơ sở dữ liệu quan hệ sử dụng công nghệ phổ biến là ORM (Object Relational Mapping)
- JPA cung cấp đầy đủ các công cụ cho phép chúng ta có thể thao tác với
cơ sở dữ liệu một cách đơn giản và nhanh chóng JPA có thể dùng để persist một đối tượng Java (POJO – Plain Old Java Object) vào trong cơ
sở dữ liệu hoặc lấy dữ liệu từ cơ sở dữ liệu và ánh xạ (mapping) ra các đối tượng Java một cách đơn giản
b Lợi ích của việc sử dụng Spring Data JPA
- Đơn giản hóa công nghệ cho tầng persistence (tầng dữ liệu)
- Không phụ thuộc vào các framework ORM
- Có nhiều nhà cung cấp hỗ trợ cài đặt JPA
- Dữ liệu có thể được lưu trữ thông qua việc ORM
4 Spring Security
-Spring Security là một trong những core feature quan trọng của Spring Framework, nó giúp chúng ta phân quyền và xác thực người dùng trước khi cho phép họ truy cập vào các tài nguyên của chúng ta
Hình 1 Luồng xử lí người dùng đăng kí tài khoản mới, đăng nhập và xác thực
Trang 14có nhiều người dùng đồng thời
b Lợi ích của việc sử dụng PostgreSQL
- Dễ sử dụng
- Cho phép chạy các trang web, ứng dụng web động với LAMP
- Lưu nhật ký đã viết trước đó để sử dụng như một cơ sở dữ liệu với khả năng sửa lỗi tốt
- Có sẵn mã nguồn miễn phí theo giấy phép nguồn mở, cho phép chỉnh sửa và triển khai tùy theo nhu cầu
Trang 1514
- Có khả năng đối tượng hóa dữ liệu
- Được hỗ trợ bởi một cộng đồng đông đảo và nhiều kinh nghiệm
- Giảm thiểu việc bảo trì hệ thống
và được truyền tải qua HTTP
- API (Application Programming Interface) là một tập các quy tắc và cơ chế mà theo đó, một ứng dụng hay một thành phần sẽ tương tác với một ứng dụng hay thành phần khác API có thể trả về dữ liệu mà bạn cần cho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML
- REST (REpresentational State Transfer) là một dạng chuyển đổi cấu trúc
dữ liệu, một kiểu kiến trúc để viết API Nó sử dụng phương thức HTTP đơn giản để tạo cho giao tiếp giữa các máy Vì vậy, thay vì sử dụng một URL cho việc xử lý một số thông tin người dùng, REST gửi một yêu cầu HTTP như GET, POST, DELETE, vv đến một URL để xử lý dữ liệu
- RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho các ứng dụng web để quản lý các resource RESTful là một trong những kiểu thiết kế API được sử dụng phổ biến ngày nay để cho các ứng dụng (web, mobile…) khác nhau giao tiếp với nhau
- Chức năng quan trọng nhất của REST là quy định cách sử dụng các HTTP method (như GET, POST, PUT, DELETE…) và cách định dạng các URL cho ứng dụng web để quản các resource RESTful không quy định logic code ứng dụng và không giới hạn bởi ngôn ngữ lập trình ứng dụng, bất kỳ ngôn ngữ hoặc framework nào cũng có thể sử dụng để thiết
kế một RESTful API
b Status code
Trang 16201 Created – Trả về khi một Resouce vừa được tạo thành công
204 No Content – Trả về khi Resource xoá thành công
304 Not Modified – Client có thể sử dụng dữ liệu cache
400 Bad Request – Request không hợp lệ
401 Unauthorized – Request cần có auth
403 Forbidden – bị từ chối không cho phép
404 Not Found – Không tìm thấy resource từ URI
405 Method Not Allowed – Phương thức không cho phép với user hiện tại
410 Gone – Resource không còn tồn tại, Version cũ đã không còn hỗ trợ
415 Unsupported Media Type – Không hỗ trợ kiểu Resource này
422 Unprocessable Entity – Dữ liệu không được xác thực
429 Too Many Requests – Request bị từ chối do bị giới hạn
- Chính vì thế, ta cần phải có 1 công cụ hỗ trợ việc tạo document APIs giúp thuận tiện cho việc cung cấp về cách sử dụng tài nguyên thông qua APIs 1 cách hiệu quả Hôm nay chúng ta sẽ tìm hiểu về 1 công cụ khá nổi tiếng dùng để viết document APIs: Swagger
Trang 1716
III Phân tích và thiết kế hệ thống
1 Sơ đồ Use Case của hệ thống
Hình 3 Sơ đồ Use case của hệ thống CRM Email Customer Touch Point
2 Thiết kế hệ thống
2.1 Liệt kê API
# HTTP Method Endpoint Descriptions
4 DELETE /user/{id} Delete a user by ID
5 POST /user/create Create a new user
7 GET /customer/paging Paging customer
8 GET /customer/{id} Retrieve a user by ID
Trang 1817
9 PUT /customer/{id} Update a user by ID
10 DELETE /customer/{id} Delete a user by ID
11 POST /customer/add Add a new user
12 GET /customer/all List all customers
13 POST /template/upload Upload a file
14 GET /template/download Download a file
15 GET /template/paging Paging template
16 POST /email/send Send a simple email to
customer
2.2 Database
2.2.1 User
Tên thuộc tính Kiểu dữ liệu Diễn giải
2.2.2 Roles
Tên thuộc tính Kiểu dữ liệu Diễn giải
2.2.3 userRole
Tên thuộc tính Kiểu dữ liệu Diễn giải
user_id (PK, FK) UUID Mã định danh user role_id (PK, FK) Integer Mã định danh role 2.2.4 Customer
Tên thuộc tính Kiểu dữ liệu Diễn giải
customer
Trang 1918
2.2.5 Attachment Tên thuộc tính Kiểu dữ liệu Diễn giải
template
physical_path String Địa chỉ lưu trên
server
IV Triển khai đề tài và kết quả đạt được
1 Triển khai xây dựng dự án
1.1 Cài đặt môi trường
- IntelliJ IDEA community 2023.2
- Git & GitHub
1.3 Tạo project Spring Boot với Spring Initializr
Trang 2019
1.4 Xây dựng template
1.5 Thực hiện viết code
Trang 2120
Mã nguồn dự án: thcong98/CRM at feature/send-email (github.com)
1.5.1 User Management User Entity
Trang 2221
Trang 2322 Erole
Role Entity
Trang 2423 Role Repository
Trang 2524 User Repository
User Service
Trang 2625 User Service Implementation