Skip to content

Thiết kế backend xử lý ngầm

Tạ Tuấn Anh edited this page May 26, 2016 · 13 revisions

Các kênh SerialDestination được tạo ra với id như sau

  • opencps/frontoffice/out/destination
  • opencps/backoffice/out/destination
  • opencps/backoffice/engine/destination
  • opencps/backoffice/engine/callback

Các listener được tạo ra với id tương ứng như sau

  • opencps.listener.SyncFromFrontOffice
  • opencps.listener.SyncFromBackOffice
  • opencps.listener.BackOfficeProcessEngine
  • opencps.listener.BackOfficeProcessCallback
  • opencps.listener.MsgOutFrontOffice
  • opencps.listener.MsgOutBackOffice

Cấu trúc message gửi đến kênh opencps/frontoffice/out/destination

  • Trường "dossierId": chứa mã số hồ sơ mục tiêu thực hiện action
  • Trường "fileGroupId": chứa thông tin cho phần hồ sơ riêng nào (ngầm định = 0 là cho hồ sơ chính)
  • Trường "action": submit - gửi hồ sơ lần đầu, change - gửi hồ sơ bổ sung, pay - gửi thông tin thanh toán, cancel - rút hồ sơ, repair - yêu cầu sửa đổi hồ sơ
  • Trường "messageInfo": nội dung ghi chú kèm theo của người dùng cho thao tác thực hiện

Trình tự xử lý trong opencps.listener.SyncFromFrontOffice

  • Kiểm tra serviceMode của hồ sơ, chỉ xử lý khi có giá trị là 3; nếu không thì bỏ qua
  • Kiểm tra trạng thái (lấy theo dossierId, fileGroupId) cho phép hồ sơ để thực hiện action. Nếu ko phù hợp thì bỏ qua, ví dụ chỉ submit khi ở trạng thái new,...
  • Chuyển trạng thái hồ sơ thành system;
  • Trường hợp submit lần đầu, thiết lập govAgencyOrganizationId với giá trị tổ chức tương ứng lấy qua serviceConfigId. Kiểm tra tất cả các filegroup và dossierfile (không bị xóa) thuộc hồ sơ để thiết lập govAgencyOrganizationId cơ quan thực hiện thủ tục và đặt cờ syncStatus = 2 đánh dấu việc đồng bộ thành công.
  • Sau khi cập nhật trạng thái thành công hồ sơ cho submit lần đầu, gửi một msg tới kênh opencps/backoffice/engine/destination để kích hoạt quy trình với action: submit và mã hồ sơ tương ứng.
  • Trường hợp change (govAgencyOrganizationId <> 0), kiểm tra các dossierfile nằm trong filegroup tương ứng (nếu có) để cập nhật govAgencyOrganizationId + syncStatus = 2.
  • Sau khi cập nhật trạng thái cho change thì gửi một msg tới kênh opencps/backoffice/engine/destination với action là change, dossierId và fileGroupId tương ứng.
  • Cập nhật log xử lý hồ sơ theo các action tương ứng.

Cấu trúc message gửi đến kênh opencps/backoffice/out/destination

  • Trường processOrderId: phiếu được xử lý
  • Trường dossierId: hồ sơ được xử lý
  • Trường fileGroupId: xử lý cho thành phần hồ sơ riêng
  • Trường dossierStatus: trạng thái mới của hồ sơ
  • Trường actionInfo: hành động thay đổi trạng thái
  • Trường messageInfo: thông điệp gửi kèm theo
  • Trường sendResult: cờ đánh dấu có trả kết quả
  • Trường requestPayment: cờ đánh dấu có yêu cầu thanh toán cần đồng bộ
  • Trường updateDatetime: thời gian được cập nhật trạng thái hồ sơ
  • Trường receptionNo: mã tiếp nhận hồ sơ đã lựa chọn
  • Trường receiveDatetime: ngày tiếp nhận hồ sơ
  • Trường estimateDatetime: ngày hẹn trả hồ sơ đã lựa chọn
  • Trường finishDatetime: ngày kết thúc hồ sơ

Trình tự xử lý trong opencps.listener.SyncFromBackOffice

  • Cập nhật các giá trị của hồ sơ gồm receptionNo, estimateDatetime, receiveDatetime, finishDatetime (nếu có giá trị)
  • Đồng bộ trạng thái mới của hồ sơ (theo như yêu cầu), cập nhật log hồ sơ
  • Riêng đối với hồ sơ có serviceMode = 3 (hồ sơ được tạo bởi frontoffice) thì đồng bộ các kết quả và yêu cầu thanh toán có syncStatus = 1 bằng cách cập nhật ownerUserId và ownerOrganizationId
  • Gửi kết quả xử lý đồng bộ hồ sơ (trạng thái ok) về kênh opencps/backoffice/engine/callback

Chú ý khi khai báo các listener trên kênh opencps/backoffice/out/destination thì phải luôn khai báo SyncFromBackOffice là listener được xử lý đầu tiên (dùng SerialDestination)

Cấu trúc message gửi đến kênh opencps/backoffice/engine/destination

  • Trường "dossierId": chứa mã số hồ sơ mục tiêu thực hiện action
  • Trường "fileGroupId": chứa thông tin thành phần hồ sơ riêng cần xử lý
  • Trường "event": sự kiện kích hoạt, vd: submit, change,...
  • Trường "processOrderId": phiếu xử lý hồ sơ (nếu có)
  • Trường "processWorkflowId": thao tác được lựa chọn (nếu có)
  • Trường "actionUserId": người thực hiện action
  • Trường "actionNote": thông tin xử lý
  • Trường "assignToUserId": người được lựa chọn tiếp theo (nếu có)
  • Trường "receptionNo": mã tiếp nhận hồ sơ đã lựa chọn
  • Trường "estimateDatetime": ngày hẹn trả hồ sơ đã lựa chọn
  • Trường "paymentValue": phí thanh toán được yêu cầu
  • Trường "signature": chữ kí điện tử (để dành nghiên cứu sau)

Trình tự xử lý trong opencps.listener.BackOfficeProcessEngine

  • Nếu processOrderId ko xác định thì tìm phiếu xử lý dựa trên dossierId, fileGroupId;
  • Kiểm tra trạng thái hiện tại của phiếu xử lý, nếu là trạng thái system thì kết thúc không xử lý nữa
  • Xác định bước hiện tại trên cơ sở processOrderId, nếu ko có phiếu thì bước hiện tại = 0
  • Nếu processWorkflowId ko xác định thì tìm flow theo bước hiện tại với event đưa ra thuộc process gắn với hồ sơ
  • Nếu ko có processWorkflowId tương ứng và căn cứ vào các event khác nhau gửi thông điệp thông báo lỗi về hệ thống frontoffice thông qua kênh opencps/backoffice/out/destination (giữ nguyên trạng thái hồ sơ hiện tại nhưng có thông báo mới)
  • Căn cứ processWorkflowId thực hiện, tạo phiếu xử lý chính trong trường hợp bước trước đó là 0, hoặc phiếu xử lý phụ nếu bước trước là áp dụng cho hồ sơ chính còn bước sau là áp dụng cho thành phần hồ sơ riêng.
  • Nếu tạo phiếu xử lý phụ mới, thì gửi thông báo cập nhật trạng thái cho phần hồ sơ chính qua kênh opencps/backoffice/out/destination (giữ nguyên trạng thái hồ sơ hiện tại nhưng có thông báo mới)
  • Cập nhật trạng thái phiếu xử lý là system
  • Cập nhật các thông tin của phiếu xử lý theo quy trình gồm: processStepId, actionUserId, actionDatetime, actionNote, assignToUserId
  • Thực hiện kí điện tử hồ sơ, tạo phiếu thanh toán, đánh dấu hồ sơ cần trả về theo cấu hình của workflow
  • Gửi yêu cầu update trạng thái của hồ sơ tương ứng phiếu xử lý tới opencps/backoffice/out/destination. Cập nhật receiveDatetime nếu hồ sơ chính được cấp mã số tiếp nhận, cập nhật finishDatetime lần đầu nếu hồ sơ chính có trả kết quả hoặc chuyển sang một trong các trạng thái: canceled, done, archived. actionInfo được lấy theo actionName, messageInfo được lấy giá trị là actionNote.

Cấu trúc message gửi đến kênh opencps/backoffice/engine/callback

  • Trường "processOrderId": phiếu xử lý hồ sơ
  • Trường "syncStatus": kết quả đồng bộ hồ sơ, ok hoặc error

Trình tự xử lý trong opencps.listener.BackOfficeProcessCallback

  • Cập nhật trạng thái của phiếu xử lý theo kết quả đồng bộ. Nếu ok thì chuyển trạng thái đúng trạng thái theo bước xử lý. Nếu là bước kết thúc thì trạng thái là "ended". Nếu kết quả error thì chuyển trạng thái phiếu xử lý là error.

Khi phiếu xử lý có trạng thái error (do không đồng bộ được dữ liệu) thì người quản trị phải có trách nhiệm thực hiện khôi phục lỗi bằng công cụ chuyên dụng

Clone this wiki locally