- 論壇徽章:
- 0
|
近期,因工作需要,在行領(lǐng)導(dǎo)和處長的主持下,開發(fā)了SCO平臺(tái)下的通用代工代扣接口系統(tǒng),該系統(tǒng)采用bsh編程,利用awk中正則表達(dá)式的強(qiáng)大模式匹配功能來處理代工單位的工資文件(當(dāng)然啦,必須先將工資文件轉(zhuǎn)換為文本文件),取得了良好的效果,大大降低了銀行網(wǎng)點(diǎn)業(yè)務(wù)員的勞動(dòng)強(qiáng)度,提高了代工代扣業(yè)務(wù)的辦理效率,現(xiàn)將源代碼共享,以表示對(duì)chinaunix論壇的感謝和支持。如果您覺得很有實(shí)用價(jià)值,不必感謝我啦,請(qǐng)致電0792-8223568(熊行長)8110751(施處長)表示感謝。
代工單位的工資文件大致有三種類型:文本文件、excel文件、dbf文件,銀行方前端系統(tǒng)只能識(shí)別文本文件,且只需要工資文件中的“姓名”、“銀行帳號(hào)或企業(yè)人員編號(hào)”、“實(shí)發(fā)或?qū)嵖劢痤~”三個(gè)字段,因此需要將excel文件、dbf文件轉(zhuǎn)換為文本文件后提交給銀行方,轉(zhuǎn)換工作很簡單,既可由代工單位方來做,也可由銀行方來做,步驟如下:
1、對(duì)于excel文件,直接在excel中將其“另存為”保存類型為“文本文件(制表符分隔)”的文件即可。
2、對(duì)于dbf文件,直接在“visual foxpro”中將其“導(dǎo)出”為類型為“Delimited Text”的文件,即以“逗號(hào)”作為字段分隔符的文本文件。
然后將文本文件拷貝到DOS格式的軟盤上提供給銀行網(wǎng)點(diǎn),由網(wǎng)點(diǎn)業(yè)務(wù)員通過接口系統(tǒng)來操作。
通用代工代扣接口系統(tǒng)能識(shí)別以三種字符作為字段分隔符的文本文件:制表符、逗號(hào)、豎線。為什么不采用“空格”作為分隔符呢?因?yàn)楣べY文件中,“姓名”中可能包含了空格符,不便于分析和處理。如果有其他特定格式的,如:各字段定長的文本文件,工資文件中含有不需要的其他銀行的銀行帳號(hào)的,或采用其他字符作為字段分隔符的,這時(shí)需要編制特定的bsh小程序來進(jìn)行預(yù)處理,若代工單位在銀行方的單位編號(hào)為203,則該預(yù)處理的bsh小程序名為$HOME/bin/cpdisk203,在后面會(huì)舉例說明。因此,通用代工代扣接口系統(tǒng)的適應(yīng)性很廣,具有良好的通用性。
功能模塊如下:
1、單位管理(過程名為dwdzgl,在$HOME/bin/dgprog中定義,下面的功能模塊也是如此)
定義單位編號(hào)、磁盤文件名、字段分隔符、銀行帳號(hào)方向、銀行帳號(hào)前綴。
單位編號(hào):代工單位在銀行方的代工單位編號(hào),唯一索引。
磁盤文件名:代工單位提供的工資文件的文件名稱(含后綴名),如:“713gz.txt”(不含雙引號(hào))。
字段分隔符:工資文件中列與列之間的分隔符,有三種:1.制表符、2.逗號(hào)、3.豎線,一般情況下為制表符。
銀行帳號(hào)方向:指銀行帳號(hào)的存放地點(diǎn),有兩種:1.在代工單位,2.在銀行網(wǎng)點(diǎn),一般情況下在代工單位。在銀行網(wǎng)點(diǎn)時(shí),工資文件中沒有銀行帳號(hào),只有企業(yè)人員編號(hào),需要在下面的功能模塊“2、人員管理”中建立企業(yè)人員編號(hào)和銀行帳號(hào)的對(duì)應(yīng)關(guān)系。
銀行帳號(hào)前綴:指代工單位將其員工的儲(chǔ)蓄存折帳號(hào)錄入到代工單位的工資管理系統(tǒng)時(shí), 省去的儲(chǔ)蓄存折帳號(hào)的前面部分,這部分省去的帳號(hào)針對(duì)該代工單位的所有儲(chǔ)蓄存折帳號(hào)來說必須是相同的。一般情況下為空。
形成的文件為$HOME/qydg/dwdzb。
2、人員管理(過程名為djdzgl,僅當(dāng)銀行帳號(hào)方向在銀行網(wǎng)點(diǎn)時(shí)有效)
代工單位的工資管理系統(tǒng)中,無法錄入銀行帳號(hào),但可以提供企業(yè)員工的唯一編號(hào)或身份證號(hào),這時(shí)需要銀行網(wǎng)點(diǎn)人員在人員管理中建立企業(yè)人員編號(hào)與銀行帳號(hào)的對(duì)應(yīng)關(guān)系(工作量較大),不推薦使用這種模式,即銀行帳號(hào)在銀行網(wǎng)點(diǎn)的模式。
企業(yè)人員編號(hào):長度1~18位,可以為身份證號(hào),唯一索引。是字符串,不是數(shù)字。
銀行帳號(hào):可以為本省內(nèi)的儲(chǔ)蓄存折帳號(hào)、儲(chǔ)蓄卡號(hào)或信用卡號(hào),唯一索引。
對(duì)于每個(gè)銀行帳號(hào)在銀行網(wǎng)點(diǎn)的代工單位,形成一個(gè)文件,名為$HOME/qydg/djdzbXXXX,XXXX為單位編號(hào)。
3、磁盤拷入(過程名為cpdisk)
將代工單位的工資文件從軟盤上拷入到本網(wǎng)點(diǎn)主機(jī)中。若報(bào)錯(cuò),可能是工資文件名不正確或軟盤或軟盤驅(qū)動(dòng)器有問題,程序會(huì)自動(dòng)調(diào)用功能模塊“6.查看磁盤”功能來顯示磁盤的內(nèi)容,并采用中文提示來顯示磁盤上所有文件的文件名、大小、創(chuàng)建日期、創(chuàng)建時(shí)間,工資文件名不正確可以在“1.單位管理”中修改,其他情況下,請(qǐng)聯(lián)系技術(shù)人員解決。
其中,會(huì)判斷是否存在bsh小程序$HOME/bin/cpdiskXXXX,若存在,則調(diào)用它,該bsh小程序的輸入為$HOME/temp/gzXXXX.tmp,輸出也是$HOME/temp/gzXXXX.tmp,最后生成文件$HOME/temp/gzXXXX.1,該文件的字段分隔符必須與“單位管理”中定義的相同。
4、數(shù)據(jù)分析(過程名為sjfx)
根據(jù)單位管理中定義的字段分隔符來分析拷入到網(wǎng)點(diǎn)主機(jī)中的工資文件$HOME/temp/gzXXXX.1,輸入"姓名"、"實(shí)發(fā)或?qū)嵖劢痤~"、"銀行帳號(hào)或企業(yè)人員編號(hào)"所在列的列號(hào),根據(jù)列號(hào)分析出合計(jì)金額和合計(jì)人數(shù),以便核對(duì),銀行帳號(hào)或企業(yè)人員編號(hào)重復(fù)的,會(huì)自動(dòng)合并為一條記錄,"實(shí)發(fā)或?qū)嵖劢痤~"為0的程序不予以處理。若在數(shù)據(jù)分析過程中報(bào)錯(cuò),出錯(cuò)原因可能是:
1)字段分隔符不正確,這種錯(cuò)誤較少出現(xiàn),這時(shí)會(huì)在終端屏幕上顯示工資文件的部分內(nèi)容,可以明顯看到工資文件的字段分隔符,需要在單位管理中修改該單位的字段分隔符,然后重新做數(shù)據(jù)分析。
2)合計(jì)金額與合計(jì)人數(shù)不正確,特別是合計(jì)金額不正確,可能是代工單位提供的工資文件的格式有誤或新增人員無銀行帳號(hào),需要聯(lián)系代工單位解決這個(gè)問題,一般情況下不會(huì)出現(xiàn)這種問題。
其中,工資文件中的"實(shí)發(fā)或?qū)嵖劢痤~"的千分位符(即逗號(hào))會(huì)被替換為空,以方便分析和處理,當(dāng)然啦,工資文件的字段分隔符此時(shí)可不能為“逗號(hào)”喲。還會(huì)將所有的無效的工資記錄顯示在屏幕上,并可選擇是否打印出來。
最后,生成文件$HOME/temp/gzXXXX.2,無效記錄文件$HOME/temp/gzXXXX.2.err。
5、單位處理(過程名為dwcl,目前僅適用于江西建行,你可以修改該模塊以滿足自己的需求)
根據(jù)“4.數(shù)據(jù)分析”的結(jié)果,輸入代工單位編號(hào),選擇代工代扣類型,程序分析處理文件$HOME/temp/gzXXXX.2,先備份和刪除該代工單位所對(duì)應(yīng)的數(shù)據(jù)庫表中的記錄(備份前會(huì)判斷本年本月本日是否做了備份,若有備份則不需備份,備份文件為$HOME/djbf/gzXXXX.mmdd,mmdd為月日),然后顯示出成功轉(zhuǎn)入到網(wǎng)點(diǎn)前端系統(tǒng)中(即數(shù)據(jù)庫表中)的金額和人數(shù),并且將錯(cuò)誤部分的工資記錄全部顯示出來,并可以選擇打印出錯(cuò)部分的工資錄。若正確,網(wǎng)點(diǎn)人員可以啟動(dòng)相應(yīng)的工代扣交易。
最后形成文件$HOME/temp/gzXXXX.3(可直接導(dǎo)入到數(shù)據(jù)庫表中),出錯(cuò)文件gzXXXX.3.txt(銀行帳號(hào)在代工單位)或gzXXXX.3.err(銀行帳號(hào)在銀行網(wǎng)點(diǎn)),出錯(cuò)打印文件gzXXXX.3.???.prn,“???”為“txt”或“err”。
6、查看磁盤(過程名為“help f 查看磁盤內(nèi)容 7 35”,在$HOME/bin/dgbar中命名)
查看軟盤上的文件列表。在“3.磁盤拷入”報(bào)錯(cuò)時(shí),用于查看代工單位提供的工資文件的文件名,若顯示不出文件名或顯示出的文件名與“1.單位管理”中的磁盤文件名相符合,則表示軟盤或軟盤驅(qū)動(dòng)器有問題,需聯(lián)系技術(shù)人員解決;若顯示出的文件名與“1.單位管理”中定義的磁盤文件名不符合時(shí),必須在“1.單位管理”中更改磁盤文件名,并重新做“3.磁盤拷入”。
操作說明:
首次使用本系統(tǒng)時(shí),應(yīng)先做“1.單位管理”、“2.人員管理”(僅當(dāng)銀行帳號(hào)在銀行網(wǎng)點(diǎn)時(shí)有效)。在代工單位每次代發(fā)或代扣工資時(shí),依次做“3.磁盤拷入”、“4.數(shù)據(jù)分析”、“5.單位處理”,若在過程中報(bào)錯(cuò),會(huì)有詳細(xì)的出錯(cuò)提示,請(qǐng)根據(jù)出錯(cuò)提示做相應(yīng)的處理。
安裝說明:
在sco系統(tǒng)下,建立一用戶,用戶名和密碼自定,將安裝包在$HOME目錄下解壓縮并炸開,賦予$HOME/bin/dgmain文件以可執(zhí)行的權(quán)限,在命令提示符下,輸入dgmain并回車,即可體驗(yàn)到它的功能了。
重要提示:
對(duì)于特殊格式的工資文件,需要編制bsh小程序$HOME/bin/cpdiskXXXX,其中XXXX為單位編號(hào),舉例如下:
例1、 工資文件內(nèi)容如下(以制表符為字段分隔符):
……
胡望 1507210601000417923 905.99
查驚乾 2030089980100134263 306.47
黃細(xì)文 1507210601000368567 658.92
楊進(jìn)軍 2030089980110000314 605.01
……
其中以203打頭的長度至少為16位的才是我們需要的銀行帳號(hào),其余的為其他銀行的帳號(hào),在“1.單位管理”中定義該單位的字段分隔符為“制表符”,則cpdiskXXXX的內(nèi)容如下:
cd $HOME/temp
fn=`basename $0`
fn=`echo $fn|cut -c7-`
fn=gz$fn.tmp
awk '{
clbz=0
for(i=1;i<=NF;i++)
{
if($i~/^[0-9]+$/&&length($i)>=16)
{
if($i~/^203/||$i~/^436742/||$i~/^53242/||$i~/^453242/)
{clbz=1;break}
else
{clbz=0;break}
}
}
if(clbz==1)
print $0
}' $fn >$fn.tmp
cp $fn.tmp $fn
例2、 工資文件內(nèi)容如下(定長字段的文本文件):
……
劉少華 2030279980101044263 3,354.27
柯傳發(fā) 2030279980101039057 2,603.94
陳衛(wèi)健 2030279980101035220 2,598.74
蔡 平 2030279980100160722 2,603.86
……
其中,姓名所在列從第1-10列,帳號(hào)列從第11-29列,金額列從第35-44列,在“1.單位管理”中定義該單位的字段分隔符為“制表符”,則cpdiskXXXX的內(nèi)容如下:
cd $HOME/temp
fn=`basename $0`
fn=`echo $fn|cut -c7-`
fn=gz$fn.tmp
awk '{
printf "%s\t%s\t%sn",substr($0,1,10),substr($0,11,21),substr($0,35,10)
}' $fn >$fn.tmp
cp $fn.tmp $fn
源碼見附件,請(qǐng)將其下載后,用winrar解開,傳到SCO平臺(tái)上解壓縮并炸包即可。
[ 本帖最后由 hlm5097 于 2006-5-18 11:58 編輯 ] |
-
-
TYDFGZ.tar.rar
2006-05-18 11:56 上傳
點(diǎn)擊文件名下載附件
19.41 KB, 下載次數(shù): 198
通用代工代扣接口系統(tǒng)
|