金華網站建設哪里好seo排名培訓學校
背景:
????????針對某些業(yè)務場景下,存在逆流程。 比如場景的場景? 正向流程如,發(fā)起某項申請->對某項申請進行審批。(審批為通過/駁回)。這樣這個工作流程就算到最終態(tài)。
常見的狀態(tài)機如,
申請未提交(保存草稿)、
申請?zhí)峤淮龑徟?#xff08;提交操作)、
審批通過/審批駁回。
但是更多的場景 是允許進行“逆流程”,比如重新發(fā)起、撤回等 臨時態(tài)改變。駁回后能再次申請。撤回后能再次提交等等。
????????上面只是簡單的狀態(tài)機變化,如果再涉及到 比如二級狀態(tài)機變化。狀態(tài)機級聯(lián)變化,比如 對申請通過的數(shù)據(jù)記錄可以進行 下一階段的 反饋流程。而同樣反饋流程 同樣涉及到審批,對反饋的審批又反向影響到申請的狀態(tài)。舉個例子,比如申請通過的數(shù)據(jù) 可以進行 反饋。反饋審批駁回后,對于該條申請的數(shù)據(jù)狀態(tài) 由原來的申請通過,調整為 反饋駁回。亦或者調整為 可以再次發(fā)起申請等狀態(tài)。
基于此 逆流程的 狀態(tài)機變化處理方案,思路:就是記錄當時的 申請單的狀態(tài)快照。
????????比如我們對某條記錄進行再次申請的時候,我們可以利用old_id 字段 保存當時的數(shù)據(jù)的狀態(tài),同時新增一條新記錄?;蛘咄瑫r增加額外的字段 比如is_recommited 記錄是否重復提交等行為。
????????通過這種方式 我們可以回溯到當時的數(shù)據(jù)的狀態(tài) 進行逆向操作。
????????而對于我剛剛說的 狀態(tài)級聯(lián)的場景,可以再新的 申請單上 記錄 原申請單id。比如在反饋的申請單中記錄 申請的申請單id。 在發(fā)起反饋 進行創(chuàng)建反饋申請單時,把申請的申請單id也同步記錄下來。保證后續(xù)操作反饋申請的狀態(tài)時,可以同步更新申請的申請單的申請信息。
Dome 舉例 數(shù)據(jù)表sql參考如:
活動申請表:
CREATE TABLE `dg_slf_activity_apply` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`code` varchar(20) DEFAULT NULL COMMENT '申請編號',`start_time` date DEFAULT NULL COMMENT '預計活動開始時間',`end_time` date DEFAULT NULL COMMENT '預計活動結束時間',`activity_days` int(11) DEFAULT NULL COMMENT '活動天數(shù)',`total_budget` decimal(20,2) DEFAULT NULL COMMENT '活動總預算',`online_total_budget` decimal(20,2) DEFAULT NULL COMMENT '線上預算合計',`offline_total_budget` decimal(20,2) DEFAULT NULL COMMENT '線下預算合計',`apply_submit_date` datetime DEFAULT NULL COMMENT '申請?zhí)峤蝗掌?#39;,`re_application_status` int(11) NOT NULL DEFAULT '0' COMMENT '重新申請狀態(tài),0未申請,1已申請',`approval_status` int(11) NOT NULL COMMENT '審批狀態(tài):0:申請未提交,1:申請已提交,2:申請已通過,-2:申請已駁回,3:反饋未提交,4:反饋待審批,5:反饋已通過,-5:反饋已駁回',`approval_comments` varchar(255) DEFAULT NULL COMMENT '審批意見',`old_apply_id` bigint(20) DEFAULT NULL COMMENT '審批駁回重新提交,提交之前的申請id,為空則不是重復提交',`deleted` int(11) NOT NULL DEFAULT '0' COMMENT '邏輯刪除,0:未刪除,1:已刪除',`create_by` varchar(64) NOT NULL COMMENT '創(chuàng)建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',`update_by` varchar(64) NOT NULL COMMENT '修改者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8mb4 COMMENT='活動申請表';
活動反饋表:
CREATE TABLE `dg_slf_activity_feedback_apply` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`activity_apply_id` bigint(20) DEFAULT NULL COMMENT '活動申請id',`code` varchar(255) DEFAULT NULL COMMENT '申請編號',`start_time` date DEFAULT NULL COMMENT '預計活動開始時間',`end_time` date DEFAULT NULL COMMENT '預計活動結束時間',`activity_days` int(11) DEFAULT NULL COMMENT '活動天數(shù)',`total_amount` decimal(20,2) DEFAULT NULL COMMENT '實際總花費',`online_total_amount` decimal(20,2) DEFAULT NULL COMMENT '線上實際花費合計',`offline_total_amount` decimal(20,2) DEFAULT NULL COMMENT '線下實際花費合計',`apply_submit_date` datetime DEFAULT NULL COMMENT '申請?zhí)峤蝗掌?#39;,`re_application_status` int(11) NOT NULL DEFAULT '0' COMMENT '重新申請狀態(tài),0未申請,1已申請',`approval_status` int(11) NOT NULL COMMENT '審批狀態(tài):0:申請未提交,1:申請已提交,2:申請已通過,-2:申請已駁回,3:反饋未提交,4:反饋待審批,5:反饋已通過,-5:反饋已駁回',`approval_comments` varchar(255) DEFAULT NULL COMMENT '審批意見',`approver_id` bigint(20) DEFAULT NULL COMMENT '審批人id',`approver_name` varchar(100) DEFAULT NULL COMMENT '審批人',`approval_date` date DEFAULT NULL COMMENT '審批日期',`old_apply_id` bigint(20) DEFAULT NULL COMMENT '審批駁回重新提交,提交之前的申請id,為空則不是重復提交',`deleted` int(11) NOT NULL DEFAULT '0' COMMENT '邏輯刪除,0:未刪除,1:已刪除',`applicant_id` bigint(20) NOT NULL COMMENT '申請人id',`create_by` varchar(64) NOT NULL COMMENT '創(chuàng)建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',`update_by` varchar(64) NOT NULL COMMENT '修改者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COMMENT='活動反饋表';
說明:
????????如在活動反饋表中 利用activity_apply_id 記錄活動申請表信息。利用old_apply_id記錄逆流程快照信息?;顒由暾埍眍愃?#xff0c;同時re_application_status字段 用于記錄某種快照狀態(tài)。