集成手機(jī)平臺(tái)待辦數(shù)據(jù)失敗問(wèn)題跟蹤和處理
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、利辛網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為利辛等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
MongoDB 、 Oracle 、 SQLServer
場(chǎng)景:
公司的集成手機(jī)平臺(tái)后臺(tái)的核心數(shù)據(jù)庫(kù)采用的Mongodb 讀寫(xiě)分離架構(gòu),所有異構(gòu)系統(tǒng)平臺(tái) ( 財(cái)務(wù)、ERP 、計(jì)劃 ......)( 對(duì)應(yīng)的數(shù)據(jù)庫(kù)ORACLE 、 SQLServer 、 MySQL ......) 流程待辦會(huì)實(shí)時(shí)推送到Mongodb 庫(kù)里,實(shí)現(xiàn)所有系統(tǒng)手機(jī)端移動(dòng)審批。
問(wèn)題:
各個(gè)系統(tǒng)供應(yīng)商對(duì)接集成手機(jī)平臺(tái)系統(tǒng)水平參差不齊,經(jīng)常出現(xiàn)個(gè)別系統(tǒng)待辦未推到集成手機(jī)平臺(tái)或待辦轉(zhuǎn)已辦失敗的問(wèn)題;
解決方案:
各個(gè)系統(tǒng)供應(yīng)商優(yōu)化接口周期長(zhǎng),在優(yōu)化完成之前,需要有手動(dòng)處理機(jī)制,即出現(xiàn)待辦未推送或待辦轉(zhuǎn)已辦失敗問(wèn)題,可以及時(shí)知道并及時(shí)手動(dòng)處理。
一:待辦出現(xiàn)問(wèn)題時(shí),第一時(shí)間向相關(guān)系統(tǒng)管理員發(fā)送預(yù)警郵件,及時(shí)手動(dòng)干預(yù),避免問(wèn)題升級(jí);
二:監(jiān)控大屏實(shí)時(shí)展示失敗的待辦信息;
三:當(dāng)失敗的待辦數(shù)量很龐大,批量修復(fù)并定期集中處理歷史失敗的待辦;
一:待辦出現(xiàn)問(wèn)題時(shí),第一時(shí)間向相關(guān)系統(tǒng)管理員發(fā)送預(yù)警郵件,及時(shí)手動(dòng)干預(yù),避免問(wèn)題升級(jí);
由于待辦出現(xiàn)問(wèn)題時(shí)會(huì)在相應(yīng)系統(tǒng)數(shù)據(jù)庫(kù)里生成一條日志記錄,可以通過(guò)觸發(fā)器實(shí)現(xiàn)郵件預(yù)警,以SQLServer 數(shù)據(jù)庫(kù)為例:
二:監(jiān)控大屏實(shí)時(shí)展示失敗的待辦信息
通過(guò)Grafana 監(jiān)控平臺(tái),可以添加 SQLServer 等數(shù)據(jù)源,實(shí)時(shí)展現(xiàn)失敗待辦信息;
三:當(dāng)失敗的待辦數(shù)量很龐大,批量修復(fù)或定期處理歷史失敗的待辦
可以通過(guò)集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù)(Mongodb) 的待辦表和各個(gè)系統(tǒng)數(shù)據(jù)庫(kù) (ORACLE 、 SQLServer 、 Mysql) 待辦表做對(duì)比:
1 集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù) (Mongodb) 的待辦數(shù)據(jù)多于各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)待辦數(shù)據(jù),表示待辦轉(zhuǎn)已辦失敗,需要手動(dòng)刪除多余的待辦信息;
2 集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù) (Mongodb) 的待辦數(shù)據(jù)少于各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)待辦數(shù)據(jù),表示待辦推送失敗,需要手動(dòng)重推;
那么如何批量查出所有系統(tǒng)待辦轉(zhuǎn)已辦失敗的數(shù)據(jù) 呢 ?
(1) 導(dǎo)出集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù)(Mongodb) 的待辦數(shù)據(jù)到 execl
Mongodb 所在服務(wù)器操作系統(tǒng)為 Centos7.5, 可以在自己電腦上安裝一個(gè) Mongodb 客戶端,使用 mongoexport 工具導(dǎo)出數(shù)據(jù);
導(dǎo)出語(yǔ)句:
D:\MongoDB\Server\3.4\bin>
mongoexport.exe --csv --host 192.100.100.100:27017 /d testdb /c TEST_TdUndo /f "_id,userName,account,createTime,content" /q "{"delete": false}" /o C:\Users\Administrator\Desktop\all cjc _Undo1219a.csv
默認(rèn)情況下打開(kāi)CSV 文件中文是亂碼的:
通過(guò)如下方式解決亂碼問(wèn)題:
--- 打開(kāi)方式 ( 記事本 )--- 格式 --- 字體 --- 中文 GB2312--- 保存 ----csv 方式打開(kāi) --- 調(diào)整格式 --- 另存為 execl 格式文件
( 2 ) 導(dǎo)出各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)(ORACLE 、 SQLServer 、 Mysql) 的待辦數(shù)據(jù)到 execl
例如 系統(tǒng)1 :
select Name, Account , Ini Date, content from undoerp
where UnDoStatus=' 待辦 '
and CreateDate>='2019-11- 01 08:00:00.000'
and CreateDate<='2019-12- 01 23:59:00.000';
(3) 對(duì)比數(shù)據(jù)
---1 集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù) (Mongodb) 的待辦數(shù)據(jù)多于各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)待辦數(shù)據(jù),表示待辦轉(zhuǎn)已辦失敗,需要手動(dòng)刪除;
---2 集成手機(jī)平臺(tái)數(shù)據(jù)庫(kù) (Mongodb) 的待辦數(shù)據(jù)少于各個(gè)系統(tǒng)數(shù)據(jù)庫(kù)待辦數(shù)據(jù),表示待辦推送失敗,需要手動(dòng)重推;
數(shù)據(jù)對(duì)比有兩種方式:
1 :通過(guò)execl 函數(shù)對(duì)比各個(gè)系統(tǒng)數(shù)據(jù),找出待辦轉(zhuǎn)已辦失敗的數(shù)據(jù)和待辦未推的數(shù)據(jù);
但是實(shí)際情況可能會(huì)比較復(fù)雜,比如各系統(tǒng)時(shí)間格式不一致、推送待辦有延時(shí)、標(biāo)題不一致等問(wèn)題,通過(guò)execl 很難對(duì)比數(shù)據(jù),可以通過(guò) SQL 語(yǔ)句實(shí)現(xiàn)數(shù)據(jù)對(duì)比;
2 :將所有系統(tǒng)對(duì)應(yīng)的Mongodb 、 Oracle 、 SQLServer 、 Mysql 待辦數(shù)據(jù)導(dǎo)出到execl 中,在將所有系統(tǒng)execl 數(shù)據(jù)通過(guò)plsql 全部導(dǎo)入到 oracle 數(shù)據(jù)庫(kù)中,通過(guò) sql 對(duì)比找出想要的數(shù)據(jù),例如 Mongodb 數(shù)據(jù)表左連接各系統(tǒng)Oracle 、 SQLServer 、 Mysql 數(shù)據(jù)表,匹配不上的數(shù)據(jù),既是待辦轉(zhuǎn)已辦失敗的數(shù)據(jù)。 Oracle 、 SQLServer 、 Mysql 數(shù)據(jù)表左連接 Mongodb 數(shù)據(jù)表,匹配不上的數(shù)據(jù),既是未推待辦的數(shù)據(jù)。
(1)oracle 先創(chuàng)建多張表,并通過(guò)plsql 導(dǎo)入各個(gè)系統(tǒng)數(shù)據(jù);
例如:
create table undo cjc (id varchar2(500),userName varchar2(500),account varchar2(100), updateTime varchar2(100),content nvarchar2(2000));
select * from undo cjc for update;
create table undo erp (userName varchar2(500),account varchar2(100), updateTime varchar2(100),content nvarchar2(2000),isstart varchar2(100));
select * from undo erp for update;
……
(2) 通過(guò)sql 進(jìn)行數(shù)據(jù)對(duì)比
select distinct a.id,a.username cjc 用戶名,
a.account cjc 登錄名,
a.updatetime cjc 到達(dá)時(shí)間,
a.content enanar 標(biāo)題 ,
b.username erp 用戶名 ,
b.account erp 登錄名 ,
b.updatetime erp 到達(dá)時(shí)間 ,
b.content erp 標(biāo)題
from undo cjc a
left JOIN undoerp b
on a.account = b.account
and a.content like '%' || b.content || '%'
where a.content = ‘ xxx 系統(tǒng) ’
order by erp 登錄名 ;
右側(cè)沒(méi)有匹配上的數(shù)據(jù),既是待辦轉(zhuǎn)已辦失敗的數(shù)據(jù);
邏輯刪除有問(wèn)題的待辦:
即通過(guò)主鍵ID 唯一定位到有問(wèn)題的待辦,將 delete 字段值由 false 改成 true ;
單條語(yǔ)句如下:
db.T_ChenUndo.update({"_id":ObjectId("5dd3xxxxx"),"account":"cjc","delete":false},{$set:{delete:true}},{multi:true});
根據(jù)ID 等信息,批量生成刪除錯(cuò)誤待辦的腳本,即可批量修復(fù)待辦轉(zhuǎn)已辦失敗問(wèn)題;
歡迎關(guān)注我的微信公眾號(hào)"IT小Chen",共同學(xué)習(xí),共同成長(zhǎng)?。。?/strong>