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