Báo cáo này nhằm giới thiệu quá trình thực hiện dự án, các công nghệ và phương phápđược sử dụng cũng như những thách thức và kinh nghiệm gặp phải trong quá trình thực tập.Đồng thời, báo
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
HỆ THỐNG QUẢN LÝ NHÂN SỰ
Công ty thực tập : Công ty TNHH ECR Việt Nam
Thực tập sinh : Nguyễn Thiện Sua - 19522144
TP Hồ Chí Minh, tháng 7 năm 2023
Trang 2LỜI MỞ ĐẦU
Trong thời đại công nghệ số phát triển mạnh mẽ như hiện nay, vai trò của hệ thống thôngtin trong quản lý nhân sự càng trở nên quan trọng và cần thiết hơn bao giờ hết Đặc biệt, việcthiết lập một hệ thống quản lý nhân sự hiệu quả không chỉ có thể cải thiện tính linh hoạt và tốc
độ quản lý thông tin nhân viên mà còn đóng vai trò quyết định đối với sự phát triển và thànhcông của tổ chức
Trong bối cảnh đó, em đã có cơ hội thực tập và tham gia vào dự án thiết lập hệ thốngquản trị nhân sự tiên tiến Trong thời gian thực tập, em đảm nhận vai trò backend của dự án, tậptrung phát triển chức năng cốt lõi và xử lý dữ liệu nhân viên
Báo cáo này nhằm giới thiệu quá trình thực hiện dự án, các công nghệ và phương phápđược sử dụng cũng như những thách thức và kinh nghiệm gặp phải trong quá trình thực tập.Đồng thời, báo cáo cũng nêu bật tầm quan trọng của hệ thống quản lý nguồn nhân lực và đónggóp của chúng đối với sự phát triển bền vững của tổ chức trong thời đại kỹ thuật số
Sau những năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũngnhư muốn được tham gia làm website trong một môi trường chuyên nghiệp Vì vậy, em quyếtđịnh chọn Công ty TNHH ECR Việt Nam - một môi trường lý tưởng, hiện đại, chuyên nghiệp -
là nơi sẽ giúp em thực hiện được dự định này
Trang 3Đặc biệt cảm ơn anh Lưu Trọng Tuấn, đã training Backend, chỉ dẫn em về cách làm báo
cáo, lên kế hoạch, những kỹ năng không thể thiếu, hướng dẫn và hỗ trợ em rất nhiều về các vấn
đề kỹ thuật để có thể làm ra một sản phẩm trong thời gian qua; cảm ơn chị Nguyễn Ngọc Phương Trâm đã giúp đỡ cho chúng em tận tình cả những khó khăn trong công việc, đến những
khó khăn việc làm quen và cách hòa nhập với môi trường mới
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điềukiện em làm bài báo cáo này
Nguyễn Thiện Sua
TP HCM, ngày 2 tháng 7 năm 2023
Trang 4NHẬN XÉT CỦA KHOA
Trang 5Mục Lục
Trang 6Chương 1: Giới thiệu công ty thực tập
Giới thiệu công ty TNHH ECR Việt Nam
Công ty TNHH ECR Việt Nam là một công ty phần mềm với hoạt động kinhdoanh tập trung vào phát triển web và di động Với chuyên môn sâu rộng và nguồnlực chất lượng cao, ECR Việt Nam luôn mang đến cho khách hàng những giải phápsáng tạo và đổi mới Điều này sẽ làm giảm chi phí vận hành cũng như thời gian triểnkhai mà chất lượng sản phẩm và dịch vụ vẫn ở mức tốt nhất
Các khách hàng chính của công ty đến từ Vương quốc Anh, Đức, Pháp, Singapore
và Úc Công ty luôn mong muốn xây dựng mối quan hệ lâu dài với khách hàng Hiệntại, một số khách hàng của công ty đã ở với công ty hơn 5 năm và con số đó vẫnđang tăng lên
Trang 7Ứng dụng di động:
❖ Dựa trên các khung dựng sẵn của công ty
❖ Chuyển các ứng dụng dành cho thiết bị di động của khách hàng sang cácnền tảng mới
❖ Sử dụng các sản phẩm của công ty để mở rộng danh mục đầu tư
❖ Kiểm tra ứng dụng dành cho thiết bị di động trên các thiết bị khác nhau
❖ Kiểm tra hiệu suất QoS và chuyển vùng
Trang 8Chương 2: Nội dung thực tập
Đợt thực tập nhằm mục đích giúp sinh viên thực tập được đào tạo về lập trình BackendC# với ASP.NET Core API, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm,thuyết trình, giao tiếp Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việctrong một môi trường phát triển website chuyên nghiệp
Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triển(như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức củacông ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công tynhư thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email và các công cụtrong công việc…
Kết quả : Hiểu thêm về công ty ECR Việt Nam, quá trình thành lập và phát triển.
Có thêm hiểu biết về các các công cụ trong công việc, cách làm việc có kế hoạch, có kỷluật, có trách nhiệm hơn
Nghiên cứu kỹ thuật
Các công cụ làm việc
Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc.
Trong thời gian này, leader hướng dẫn thực tập sinh tìm hiểu về các công cụ sẽgiúp ích cho trong công việc sau này Một số phần mềm trong số đó như Rocket Chat
- sử dụng để giao tiếp và làm việc nhóm, Mozilla Thunderbird dùng để quản lý email,pgAdmin dùng để quản trị cơ sở dữ liệu với database Postgres và IDE Visual Studio
Thực hiện : Thực hành cài đặt và sử dụng các phần mềm đã nêu trên.
Kết quả: Có kỹ năng cơ bản để sử dụng các công cụ kể trên và cách kết hợp chúng để
giúp công việc trở nên hiệu quả hơn
Tìm hiểu cấu trúc source code và cách viết API
Nội dung : Được training về cách tạo project, cấu trúc và tổ chức thư mục, tìm hiểu
cách viết API chuẩn
Cấu trúc một Solution gồm nhiều project quản lý các mảng riêng biệt:
- Controller: quản lý các API Controller và cấu hình trong dự án
- Common: chứa các hằng số, enum, mẫu thông báo lỗi, được dùng chungcho cả Solution
Trang 9- DTOs: quản lý tất cả các model được dùng để gửi và nhận dữ liệu từ phíaFront-end và Device.
- Entities: quản lý các kết nối với cơ sở dữ liệu, migration, các entities tươngứng với các bảng, các cấu hình quan hệ và dữ liệu ban đầu cho chúng
- Service: chứa các service cho solution
Cách viết RESTful đúng chuẩn với các phương thức tương ứng
Thực hiện :
Tham gia đầy đủ các buổi training của công ty
Làm các bài kiểm tra về kiến thức đã học
Kết quả : Có được những kiến thức cơ bản về cấu trúc dự án và cách viết API sau
này Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúngchuẩn, dễ đọc, dễ hiểu
Cấu hình dự án ASP.NET Core API với Postgres bằng Entity Framework Code-First.
Nội dung: Biết cách cấu hình dự án, kết nối, tạo dữ liệu ban đầu, cấu hình mối quan
hệ giữa các bảng, tạo và quản lý Migration
DbContext: Biết cách tạo kết nối với cơ sở dữ liệu thông qua ConnectString trong
Thực hiện: Tham gia đầy đủ các buổi training.
Kết quả: Nắm được cách kết nối với và tương tác với cơ sở dữ liệu.
Xác thực và phân quyền với JWT
Nội dung : Xây dựng phần xác thực người dùng bằng JWT và phân quyền cho từng
loại user
Định nghĩa về JWT:
➢ JSON Web Token (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏgọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đốitượng JSON Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứachữ ký số JWTs có thể được ký bằng một thuật toán bí mật (với thuật toánHMAC) hoặc một public / private key sử dụng mã hoá RSA
➢ JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.):
Header: Phần header sẽ chứa kiểu dữ liệu, và thuật toán sử dụng để mã hóa
ra chuỗi JWT
Trang 10Payload: đóng một vai trò rất quan trọng trong JWT, đây là nơi chứa cácnội dung của thông tin (claim) mà người sử dụng muốn truyền đi ở bêntrong chuỗi.Các thông tin này góp phần mô tả thực thể một cách đơn giản
và nhanh chóng hoặc cũng có thể là các thông tin bổ sung thêm cho phầnHeader
Signature (chữ ký): Chữ ký Signature trong JWT là một chuỗi được mã hóabởi header, payload cùng với một chuỗi bí mật theo nguyên tắcHMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload), secret) Do bản thân Signature đã bao gồm cả header và payload nênSignature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải
Thực hiện : Tham gia đầy đủ các buổi training.
Kết quả: Cấu hình, xác thực và phân quyền cho người dùng.
LINQ
Nội dung : Được training về LINQ và cách truy vấn dữ liệu sao cho tối ưu nhất.
➢ LINQ (Language-Integrated Query) là một tính năng trong NET Framework cho
phép truy vấn và thao tác dữ liệu từ các nguồn khác nhau bằng cách sử dụng cúpháp tương tự SQL LINQ cung cấp một cách tiện lợi để thao tác với dữ liệu từcác nguồn như các tập hợp (collections), cơ sở dữ liệu, XML, tệp tin, và cácnguồn dữ liệu khác
➢ Với LINQ, bạn có thể viết các truy vấn dữ liệu phức tạp bằng cách sử dụng cácphương thức mở rộng LINQ như Where, OrderBy, Select, Join và Aggregate.LINQ sử dụng cú pháp rõ ràng và dễ đọc, giúp rút ngắn và tối ưu hóa mã
➢ Hiểu cách dùng IQueryable và IEnumerable khi thực hiện truy vấn:
Execution: IQueryable sử dụng deferred execution, có nghĩa là truy vấnkhông được thực thi ngay lập tức mà chỉ khi nó được yêu cầu Ngược lại,IEnumerable sử dụng immediate execution, có nghĩa là truy vấn được thựcthi ngay khi nó được gọi
Truy vấn dữ liệu: IQueryable hỗ trợ các truy vấn dữ liệu phức tạp và tối ưuhóa truy vấn trên nguồn dữ liệu Nó cho phép tạo ra câu truy vấn SQL phứctạp và gửi trực tiếp đến cơ sở dữ liệu IEnumerable chỉ hỗ trợ các truy vấn
dữ liệu đơn giản và thực hiện truy vấn trên bộ nhớ
Tính tương thích với LINQ: IQueryable tương thích tốt hơn với LINQ(Language-Integrated Query) và cho phép sử dụng các phương thức mởrộng LINQ như Where, OrderBy, Select và Aggregate IEnumerable cũng
hỗ trợ LINQ, nhưng không linh hoạt và hiệu suất không cao nhưIQueryable
Trang 11Tính tương thích với ORM: IQueryable được sử dụng rộng rãi trong cáccông nghệ ORM như Entity Framework, cho phép xây dựng và thực thitruy vấn LINQ trực tiếp trên cơ sở dữ liệu IEnumerable thường được sửdụng khi xử lý dữ liệu trong bộ nhớ hoặc các tập hợp tĩnh.
Thực hiện : Tham gia đầy đủ các buổi training.
Kết quả: Biết cách dùng LINQ và cách truy vấn dữ liệu sao cho tối ưu nhất.
Hangfire
Nội dung : Biết được cách cài đặt và lập lịch cho các jobs
➢ Hangfire là một thư viện mã nguồn mở trong C# dùng để xử lý các công việc(jobs) nền tảng (background jobs) trong ứng dụng web Nó giúp đơn giản hóa việcquản lý và thực thi các công việc dễ dàng, đồng thời cung cấp khả năng lập lịch,theo dõi và tái chạy các công việc nền tảng
➢ Với Hangfire, lập trình viên có thể xử lý các công việc không đồng bộ như gửiemail hàng loạt, cập nhật dữ liệu định kỳ, xử lý tác vụ dài hạn, và nhiều công việcnền tảng khác mà không ảnh hưởng đến khả năng phản hồi và hiệu suất của ứngdụng web
➢ Hangfire sử dụng cơ sở dữ liệu (database) để lưu trữ thông tin về các công việc vàlịch trình thực thi Nó hỗ trợ nhiều loại cơ sở dữ liệu như SQL Server, MySQL,PostgreSQL, Redis và nhiều hệ thống khác
Thực hiện : Tham gia đầy đủ các buổi training của công ty Làm các bài kiểm tra về
kiến thức đã học
Kết quả: Nắm được cách cấu hình và cách lập lịch để thực hiện các công việc định
kỳ
Export và import dữ liệu với excel bằng thư viện NPOI
Nội dung : Biết cách nhập và xuất dữ liệu bằng file excel theo định dạng được yêu
cầu với thư viện NPOI
➢ Thư viện NPOI là một thư viện mã nguồn mở được sử dụng trong ngôn ngữ lậptrình C# để làm việc với các tệp tin Office như Excel, Word, và PowerPoint NPOIcung cấp các API để tạo, đọc, và chỉnh sửa các tệp tin Office mà không cần sửdụng các ứng dụng Office như Excel hoặc Word Với NPOI, lập trình viên có thểthực hiện các thao tác như tạo tệp tin Excel từ dữ liệu, đọc dữ liệu từ tệp Excel,ghi dữ liệu vào tệp Excel, thực hiện tính toán và định dạng trong tệp Excel, vànhiều công việc khác liên quan đến tệp tin Office
Thực hiện : Tham gia đầy đủ các buổi training, cài đặt và thực hành.
Kết quả: Biết cách sử dụng, nhập và xuất dữ liệu thông qua file excel.
Trang 12Xuất dữ liệu dạng PDF
Nội dung : Biết cách xuất dữ liệu ra file PDF theo định dạng cho trước bằng thư viện
iText7
➢ iText7 là một thư viện mã nguồn mở được sử dụng trong ngôn ngữ lập trình Java
và C# để tạo và xử lý các tài liệu PDF Nó cung cấp các API mạnh mẽ cho việctạo và tùy chỉnh các tệp PDF, bao gồm việc thêm và định dạng văn bản, hình ảnh,bảng, đồ thị, liên kết, trang, phông chữ, màu sắc, mã vạch, chữ ký điện tử, vànhiều tính năng khác Với iText7, lập trình viên có thể tạo tài liệu PDF từ dữ liệuđộng, sửa đổi nội dung và cấu trúc của tệp PDF sẵn có, trích xuất thông tin từ tệpPDF, tạo trang in ấn, chuyển đổi tệp tin từ định dạng khác sang PDF, và thực hiệnnhiều tác vụ liên quan đến PDF khác
Thực hiện : Tham gia đầy đủ các buổi training, cài đặt và thực hành.
Kết quả: Biết cách sử dụng, xuất dữ liệu ra PDF với iText7 với mẫu HTML.
Thực hiện project
Sau một thời gian training và thực hành, thực tập sinh đã nắm được những kiến thức cơbản về ASP.NET Core API Sau đó, trainer đã hướng dẫn thực tập sinh áp dụng nhữngkiến thức đã học để thực hiện một dự án thực tế về Quản lý nhân sự
Chi tiết dự án sẽ được nói ở phần sau
Lịch làm việc
Tuần Công việc Người hướng dẫn Mức độ
hoàn thành
Nhận xét của người hướng dẫn
1
- Tìm hiểu về công ty, cách tổ
chức của công ty
- Làm quen với các công cụ làm
việc trong công ty
- Học cách trao đổi, làm việc qua
ChịNguyễn NgọcPhương Trâm
100%
2 Làm quen với cấu trúc source
code và cách viết API
AnhLưu Trọng Tuấn 100%
Trang 13- Cấu hình ASP.NET Core với
PostgreSQL với Entity
Framework Code-First
- Seed data và Migration
AnhLưu Trọng Tuấn 100%
4 Xác thực và phân quyền với
JWT
AnhLưu Trọng Tuấn 100%
5
Viết các API cần thiết cho
module User (thêm, xóa, sửa, đổi
mật khẩu lần đầu, quên mật
khẩu, )
AnhLưu Trọng Tuấn 100%
6 Viết API quản lý ca làm việc và
điểm danh của nhân viên
AnhLưu Trọng Tuấn 100%
7 Viết API về module nghỉ phép và
ngày lễ
AnhLưu Trọng Tuấn 100%
8 Viết API nhập và xuất User qua
file excel
AnhLưu Trọng Tuấn 100%
9 Viết API xuất dữ liệu người dùng
ra PDF
AnhLưu Trọng Tuấn 100%
10 Học cách dùng Hangfire lập lịch
chạy jobs
AnhLưu Trọng Tuấn 100%
11
Viết API xuất lịch sử điểm danh
của nhân viên dạng lịch biểu và
file excel
AnhLưu Trọng Tuấn 100%
12 Review và fix bugs
AnhLưu Trọng TuấnChịNguyễn Kiều Linh
100%
Trang 14Chương 3: Chi tiết về project
Dưới sự bảo trợ của IMPL là 5 công ty khác, tất cả đều làm việc trên cùng mộtdây chuyền hoạt động và trao đổi hàng ngày về các công việc hàng ngày: OLI;PTIM; OLPL; Transport Pool; IMSB
Hệ thống IMPL ERP là bước đầu tiên trong sáng kiến số hóa mà Infiniti MarinePte Ltd (IMPL) đang bắt tay thực hiện; và với sự nỗ lực không ngừng, IMPLmong muốn mang lại sự tối ưu và hoàn thiện cho hệ thống theo thời gian
Trang 15Dưới IMPL có 5 công ty khác dưới sự bảo trợ của họ và 6 công ty này đều làm việc trêncùng một dây chuyền hoạt động Các công ty gồm:
❖ Infiniti Marine Pte Ltd,
❖ Octogon Logistics Pte Ltd
❖ Infiniti Marine Sdn Bhd
❖ Perseroan Terbatas Infiniti Marine
❖ PT Octogon Logistics
❖ Infiniti Shipping Pte Ltd
Mỗi nhân viên sẽ chỉ thuộc một Business Company (công ty phụ trách trả lương chonhân viên đó) nhưng sẽ thuộc một nhóm các công ty để họ có thể trao đổi hàng ngày về cáccông việc hàng ngày Họ chỉ có quyền hạn trong nhóm công ty mà họ ở trong đó
Họ chia thành 8 group:
❖ Infiniti Marine Pte Ltd,
❖ Octogon Logistics Pte Ltd
❖ Infiniti Shipping Pte Ltd
Việc quản lý ca làm việc và điểm danh của nhân viên như sau:
- Ca làm việc của họ sẽ dựa theo tuần chẵn hay lẻ (tuần chẵn và tuần lẻ có ca làmviệc khác nhau)
- Ca làm việc có thể là ca làm trong ngày hoặc ca đêm (kéo dài qua ngày hôm sau)
- Một nhân viên có thể được chỉ định được phép OT hoặc không
- Trong ngày làm họ sẽ được 1h để ăn, nếu không dùng hết 1h đó thì có thể tínhsang OT (nếu được phép)
- Điểm danh vào làm (clock-in) bằng app và sẽ được nhắc nhở điểm danh 5p trước