物流管理系統(tǒng)_第1頁
物流管理系統(tǒng)_第2頁
物流管理系統(tǒng)_第3頁
物流管理系統(tǒng)_第4頁
物流管理系統(tǒng)_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第一天國際物流杰信商貿(mào)+搭建環(huán)境項目背景杰信商貿(mào)是國際物流行業(yè)一家專門從事進出口玻璃器皿貿(mào)易的公司。公司總部位于十一個朝代的帝王之都西安,業(yè)務(wù)遍及歐美。隨著公司不斷發(fā)展壯大,舊的信息系統(tǒng)已無法滿足公司的快速發(fā)展需求,妨礙公司成長,在此背景下,公司領(lǐng)導(dǎo)決定研發(fā)《杰信商貿(mào)綜合管理平臺》。《杰信商貿(mào)綜合管理平臺》分三期完畢。一期完畢倉儲管理(涉及:采購單、倉庫、貨品、條形碼、入庫、出庫、退貨、盤點、庫存、庫存上限報警、記錄查詢)和展會管理(涉及:展會管理、出單管理),形成貨品統(tǒng)一數(shù)字化管理。二期完畢貨運全流程管理,涉及購銷協(xié)議、出貨表記錄、出口報運單、HOME裝箱單、裝箱單、委托書、發(fā)票、財務(wù)記錄等。三期完畢決策分析(涉及:成本分析圖、銷售情況記錄、重點客戶、經(jīng)營情況同期比對記錄、工作績效),為公司經(jīng)營決策提供數(shù)據(jù)支持。用例圖了解系統(tǒng)是所有功能模塊運用visio畫系統(tǒng)功能結(jié)構(gòu)圖,目的讓開發(fā)人員了解都有哪些業(yè)務(wù)模塊,方便分工合作,根據(jù)每個頁面模塊的難度,復(fù)雜,投入的人力情況來衡量每個模塊多少錢。驗收標(biāo)準(zhǔn)。數(shù)據(jù)庫建模,業(yè)界都使用PowerDesinger建模系統(tǒng)架構(gòu)業(yè)務(wù):生產(chǎn)廠家功能在貨品模塊和附近模塊,它們都有個生產(chǎn)廠家,講生產(chǎn)廠家信息提出,成為一個單獨的表。需求調(diào)研《需求說明書》生產(chǎn)廠家表FACTORY_C(_C業(yè)務(wù)后綴)序號名稱代碼是否主鍵類型(長度)說明編號FACTORY_ID是VARCHAR2(40)UUID全稱FULL_NAME否VARCHAR2(200)相應(yīng)客戶比較模糊,翻倍2到4倍簡稱FACTORY_NAME否VARCHAR2(50)聯(lián)系人CONTACTS否VARCHAR2(30)人名20/30電話PHONE否VARCHAR2(20)手機MOBILE否VARCHAR2(20)傳真FAX否VARCHAR220)驗貨員INSPECTOR否VARCHAR2(30)排序號ORDER_NO否INT備注CNOTE否VARCHAR2(500)假如感覺它也許和關(guān)鍵字沖突,給它加個C前綴創(chuàng)建人CREATE_BY否VARCHAR2(40)權(quán)限字段,登陸人ID創(chuàng)建部門CREATE_DEPT否VARCHAR2(40)登陸人所在部門的ID創(chuàng)建時間CREATE_TIME否TIMESTAMP第二天生產(chǎn)廠家CRUD+購銷協(xié)議業(yè)務(wù):啟用,停用功能:和杰信合作生產(chǎn)廠家忽然有一天它以次品冒充優(yōu)質(zhì)品,杰信不跟這個廠家進行合作。在貨品中生產(chǎn)廠家選擇框,不能選擇這個不再合作的廠家。在系統(tǒng)中不能直接刪除這個廠家,由于我們的歷史數(shù)據(jù)中具有對這個生產(chǎn)廠家的引用。軟件是采用“偽刪除”方式來解決。實際是在數(shù)據(jù)庫表中加入列,作為標(biāo)記,標(biāo)記廠家是否可以被引用。0停用1啟用。新增廠家默認(rèn)1,可以修改某個廠家為停用。在貨品中選擇廠家的下拉列表,只顯示為啟用。加“啟用”“停用”功能,修改狀態(tài)。貨運管理核心流程:購銷協(xié)議需求調(diào)研過程軟件公司就會到杰信去需求調(diào)研,項目經(jīng)理,他面對客戶的高層中層領(lǐng)導(dǎo),目的跟客戶安排好調(diào)研日程。設(shè)計人員,帶領(lǐng)初級程序員到具體的業(yè)務(wù)部門調(diào)研。聊天,圍繞項目的目的,設(shè)計人員會自己記錄談話內(nèi)容,(主干),初級程序員(所有內(nèi)容)。回來整理筆記,整理《需求調(diào)研報告》報告中怎么體現(xiàn)紙質(zhì)報表?初級程序員將紙質(zhì)報表轉(zhuǎn)化成電子的。購銷協(xié)議業(yè)務(wù)分析需求過程杰信和生產(chǎn)廠家簽到的協(xié)議,稱為購銷協(xié)議。一個購銷協(xié)議中包含多個貨品信息,一個貨品信息涉及多個附件信息。報表打印時,同一個生產(chǎn)廠家的貨品信息才干放在同一個頁上,不同生產(chǎn)廠家的貨品信息不能放在同一個頁上。分析階段,摳每個字段出貨表設(shè)計方案一(傳統(tǒng)設(shè)計)協(xié)議表,貨品表,附件表多次左連接,SQL極其復(fù)雜,由于附件值特殊,SQL不能直接完畢,還需要代碼去實現(xiàn)。設(shè)計方案二(冗余設(shè)計)通過冗余,都在貨品表中,只需要協(xié)議表和貨品表左連接即可。分析過程將用戶的需求(大白話)轉(zhuǎn)化為開發(fā)人員看得懂的數(shù)據(jù)庫表,表之間的關(guān)系,業(yè)務(wù)邏輯。給我們的開發(fā)人員看,開發(fā)人員依據(jù)設(shè)計來寫代碼。復(fù)雜,大型項目畫類圖,序列圖輔助開發(fā)人員開發(fā)。在實際開發(fā)中,架構(gòu)師搭建項目框架,框架的基類都有,基礎(chǔ)工具類,統(tǒng)同樣式表,統(tǒng)一的公用的js,圖片。公司提供一個CVS/SVN賬號,配置環(huán)境,從中檢出你負(fù)責(zé)的項目的代碼。代碼一般以項目結(jié)構(gòu)。導(dǎo)入工程,在其上面開發(fā)新的業(yè)務(wù)模塊。業(yè)務(wù)需求銷售人員錄入?yún)f(xié)議時,它為草稿狀態(tài),這時只能銷售人員自己看到。只有當(dāng)銷售人員檢查協(xié)議無誤,提交,狀態(tài)變成“已上報”。這時候,其別人員才可以看到。銷售的領(lǐng)導(dǎo)和船務(wù)專責(zé)才干看到。運用這個狀態(tài)字段來控制對當(dāng)前用戶是否可見。(細(xì)粒度的權(quán)限控制-數(shù)據(jù)權(quán)限)重點知識回顧貨運管理核心業(yè)務(wù)流程:購銷協(xié)議1.定義購銷協(xié)議是杰信和生產(chǎn)廠家簽訂的協(xié)議。2.業(yè)務(wù)復(fù)雜度購銷協(xié)議業(yè)務(wù)比較復(fù)雜,它是貨運管理的一個流程,它涉及三部分內(nèi)容,協(xié)議的主信息和多個貨品信息和多個附件信息。協(xié)議主信息和貨品是一對多,貨品和附件信息是一對多。3.從業(yè)務(wù)中遷出技術(shù)亮點前期我參與了業(yè)務(wù)調(diào)研,重點負(fù)責(zé)購銷協(xié)議。給客戶交流后,我編寫了《需求說明書》,然后參數(shù)購銷協(xié)議的表設(shè)計。從需求說明書結(jié)合客戶給的電子表格,我抽取出數(shù)據(jù)庫表,運用PD進行建模。設(shè)計:跟客戶聊天,要引導(dǎo)性和他們聊天。業(yè)務(wù)基礎(chǔ)術(shù)語,了解業(yè)務(wù)流程進一步內(nèi)容,拿到客戶手中現(xiàn)有某個模塊表單,電子表格,填寫的內(nèi)容,每個內(nèi)容要注意的事項。來源:手填,從其他模塊來獲取。摳每個字段,電子表格中每個內(nèi)容?!毒唧w說明書》功能的細(xì)化,業(yè)務(wù)邏輯說清楚,畫圖輔助開發(fā),UML(類圖、序列圖、狀態(tài)圖)數(shù)據(jù)庫建模細(xì)化。目的:開發(fā)人員可以依照具體設(shè)計開始開發(fā)。具體設(shè)計本意能達(dá)成開發(fā)人員無需和客戶溝通,就可以在設(shè)計人員的指導(dǎo)下就可以直接開發(fā)出客戶滿意的代碼。但實際中做不到。設(shè)計不到位。實際中開發(fā)往復(fù)比較多。第三天購銷協(xié)議+貨品信息+附件信息業(yè)務(wù)需求:上報、取消功能:上報實現(xiàn)銷售人員擬定購銷協(xié)議錄入完畢,檢查無誤后,上報給領(lǐng)導(dǎo),領(lǐng)導(dǎo)審核無誤后,提交給船運部。取消實現(xiàn)當(dāng)船務(wù)專責(zé)未解決此相關(guān)的協(xié)議時,可以取消這個協(xié)議,重新修改協(xié)議內(nèi)容,然后再次上報。假如船運專責(zé)已經(jīng)開始解決報運的業(yè)務(wù),不能取消,必須走貨品增補流程。設(shè)計實現(xiàn):在表中增長狀態(tài)字段,新增時默認(rèn)狀態(tài)為0草稿,當(dāng)銷售專責(zé)確認(rèn)無誤后,點擊“上報”狀態(tài)變?yōu)?已上報。當(dāng)船運專責(zé)未解決報運時,銷售專責(zé)點擊“取消”狀態(tài)變?yōu)?,草稿。狀態(tài)為0時,只能銷售專責(zé)自己看到,當(dāng)狀態(tài)為1時,他的領(lǐng)導(dǎo)和報運專責(zé)都可以看到。 第四天購銷協(xié)議查看,SQL語句的Power附件業(yè)務(wù)實現(xiàn)隨時攜帶主表的ID購銷協(xié)議查看協(xié)議下貨品,貨品下面附件,在購銷協(xié)議中所有瀏覽,體現(xiàn)貨品和附件的關(guān)系。構(gòu)建對象關(guān)系*細(xì)粒度權(quán)限控制主菜單,左側(cè)菜單,按鈕,URL,方法,業(yè)界都稱為粗粒度的權(quán)限控制。平常的小系統(tǒng),基于用戶,角色,權(quán)限架構(gòu)足夠用。在實際大型項目中,光有上面的用戶角色,URL這樣的控制粒度不夠細(xì)致,尚有數(shù)據(jù)訪問權(quán)限。對數(shù)據(jù)的訪問列是可以自己定制的。例如:訪問一個人員工資信息表,這個表中具有人員的工資。對數(shù)據(jù)的訪問行可以受權(quán)限控制。例如:工資表中有銷售部人員的工資信息,尚有船運部人員的工資信息。當(dāng)銷售部領(lǐng)導(dǎo)登錄時,他只能看到銷售人員的工資信息,他不能看到船運部人員的工資信息。直接瀏覽數(shù)據(jù)庫表,工資列不能直接看到其值。對這個數(shù)據(jù)庫列進行加密。上面統(tǒng)稱為數(shù)據(jù)訪問權(quán)限,這個權(quán)限加上角色用戶這樣這個系統(tǒng)才比較安全。也稱為細(xì)粒度的權(quán)限控制。列訪問控制:單獨建立表,權(quán)限分派某個角色能訪問哪些列;行訪問控制:只能看自己創(chuàng)建的記錄,不能看到別人創(chuàng)建的記錄Wherecreate_by=當(dāng)前登陸人ID部門領(lǐng)導(dǎo)看到,他能看到本部門人員創(chuàng)建的記錄,不能看到其他部門人員創(chuàng)建的記錄Wherecreate_dept=當(dāng)前登陸人部門IDanduser_level<4跨部門訪問權(quán)限,分管領(lǐng)導(dǎo)跨部門,跨人員再加一個配置表,分管領(lǐng)導(dǎo)可以管理的人和部門; 第七天異構(gòu)數(shù)據(jù)庫支持+出口報運核心業(yè)務(wù)核心業(yè)務(wù):貨運管理第二個流程,出口報運定義:做國際物流,貨品要運往國外之前,向海關(guān)申報。向海關(guān)申報符合國家標(biāo)準(zhǔn)的貨品,和貨品的體積和重量信息。除了在協(xié)議中貨品的基本信息外,在報運時新增7個字段,長,寬,高,毛重,凈重,出口單價,含稅。分次報運一個可以可以分多次來報運,體現(xiàn)在運送的貨品數(shù)上。例如:10000貨品,第一次報運運送6000,第二次報運運送4000.可以多次報運,這種情況很少。平常大多是一次報運。分析設(shè)計一個出口報運單來自多個購銷協(xié)議(一對多);給貨品信息新增的7個字段的內(nèi)容。創(chuàng)建一個出口報運單表冗余設(shè)計將貨品信息冗余到報運單下的貨品信息中。一個實現(xiàn)讀取數(shù)據(jù)快速,減小業(yè)務(wù)的復(fù)雜度,業(yè)務(wù)邏輯簡樸。打斷設(shè)計實現(xiàn)跳躍查詢避免關(guān)聯(lián)層級過多,數(shù)據(jù)量大了后,訪問奇慢。打斷設(shè)計。(表設(shè)計不成為文規(guī)定,表之間的關(guān)聯(lián)關(guān)系不超過4層)在設(shè)計時使用一個虛線箭頭來表達(dá)表之間是存在關(guān)聯(lián)關(guān)系,在設(shè)計時,不是往常的外鍵關(guān)系。運用一個字段來存儲主表和子表之間的關(guān)系。X,YWherecontract_idin(‘x’,’y’)。通過打斷設(shè)計,表之間的關(guān)系不存在,跳躍查詢。無需查詢協(xié)議表,直接查詢協(xié)議下的貨品表。(新增)通過上面的設(shè)計,后續(xù)業(yè)務(wù)變的更加簡樸。業(yè)務(wù),勞保報表領(lǐng)用周期不同鞋帽子手套毛巾軍大衣洗衣粉飯盒…班組110105班組2202036000個單元格哪個單元格的內(nèi)容進行修改,代碼只修改修改的框。給每個文本框增長一個隱藏域。12023個信息要提交。本來目的是優(yōu)化,結(jié)果速度更慢。最終每行添加一個隱藏域,當(dāng)這行的數(shù)據(jù)進行了修改,在文本框的失去焦點事件onBlur,動態(tài)設(shè)立這個隱藏域為1。在修改代碼時根據(jù)這個值判斷,只有1的時候,數(shù)據(jù)才進行修改。不是1跳過。批量新增,增長一個新增按鈕,點一次調(diào)研一次addRecord方法,它的屬性值,都為空串。批量刪除,表格dhtml提供刪除行操作,remove,它把行從table中刪除。數(shù)據(jù)庫并沒有刪除,刪除多個框時,記錄下它們的id值,拼成一個串,用逗號隔開。后臺代碼判斷這個隱藏域提交值不為空,刪除這幾個數(shù)據(jù)。知識回顧打斷設(shè)計:1.數(shù)據(jù)庫設(shè)計先按照三范式,之后對一些需要優(yōu)化的地方,使用反三范式設(shè)計(冗余)(以空間換設(shè)計)2.實際業(yè)務(wù)非常復(fù)雜,關(guān)聯(lián)層級過多,隨著系統(tǒng)上線運營,用戶的數(shù)據(jù)隨著使用的時間,線性增長。不成文規(guī)定:關(guān)聯(lián)層級在設(shè)計不超過4層。打斷設(shè)計,在主表中加一個字段,字段來存儲兩個表之間的關(guān)系。多個的時候,之間用逗號隔開。一般情況下都是一次報運,就是一個協(xié)議一次報運,個別情況下多個協(xié)議一次報運,極端情況下3個協(xié)議一次報運。由于打斷設(shè)計,實現(xiàn)“跳躍查詢”。報運需要協(xié)議下的貨品信息時,無需通過多個協(xié)議對象,就可以直接查詢貨品的信息,通過這個打斷設(shè)計的字段,運用SQL的in子查詢。核心業(yè)務(wù):貨運管理,出口報運業(yè)務(wù),杰信獲得訂單后,安排多個生產(chǎn)廠家生產(chǎn)貨品,與此同時杰信準(zhǔn)備報關(guān)的材料,除了海關(guān)規(guī)定的一些制式文檔和杰信系統(tǒng)打印的《出口商品報運單》,交給海關(guān)進行審核。頁面控制報運單新增,暗度陳倉。用戶選擇報運關(guān)聯(lián)的多個協(xié)議,代碼直接進行數(shù)據(jù)的保存。保存相關(guān)協(xié)議的id集合,協(xié)議號集合,保存冗余的貨品信息,保存冗余的附件信息。批量修改Mrecord自定義控件,來信息補錄。批量,在頁面上運用DHTML動態(tài)表格技術(shù),實現(xiàn)表格元素的動態(tài)增長,動態(tài)創(chuàng)建行,動態(tài)創(chuàng)建單元格,運用innerHTML動態(tài)向單元格插入文本框,帶數(shù)據(jù)的。在后臺準(zhǔn)備數(shù)據(jù),拼接成js串,將它寫入一個變量中,在頁面的jQuery的ready事件中,調(diào)用這個變量,形成多個js串,依次執(zhí)行。動態(tài)添加到表格中。由于js運營不久,用戶感覺不到添加的過程,認(rèn)為直接展示。這樣為用戶提供一個非常方便的操作??梢耘縼硇薷呢浧沸畔?。每行運用一個隱藏域,來存放是否修改標(biāo)記,這樣在記錄行數(shù)過多時,修改的效應(yīng)也非常高。Mrecord控件它可以實現(xiàn)動態(tài)新增,還可以實現(xiàn)批量刪除,自動排序。第八天裝箱、委托、發(fā)票、財務(wù)業(yè)務(wù)+協(xié)議歸檔貨運管理涉及:購銷協(xié)議、出口報運、裝箱、委托、發(fā)票、財務(wù)記錄。裝箱海關(guān)批準(zhǔn)杰信的申請,像船東申請集裝箱,杰信找貨代公司請他幫著訂箱。杰信找拖車公司,訂拖車,拖車公司到碼頭拉空箱。拉著空箱到生產(chǎn)廠家的倉庫。生產(chǎn)廠家在杰信的驗貨員的監(jiān)督下,先將貨品裝到紙箱子中,然后在將紙箱子裝入集裝箱。拖車?yán)鴿M箱到海關(guān)指定的碼頭指定的地方卸貨。這幾個箱子風(fēng)吹雨淋。海關(guān)進行抽檢。直到船來了。將集裝箱放到船上。開船從裝運港出發(fā),到目的港。裝箱時,產(chǎn)生發(fā)票號。同時產(chǎn)生發(fā)票日期。一個裝箱單來自多個報運單(一對多)發(fā)票,委托在貨品裝船的同時,杰信就開具發(fā)票,這個發(fā)票只是一個告知單,它的內(nèi)容就是告訴客戶貨品已經(jīng)發(fā)出,請支付剩余款項。同時快遞客戶一個提單。客戶收到發(fā)票告知后,支付剩余款項,同時當(dāng)貨品到達(dá)目的港后,客戶拿著提單去提貨??蛻袈?lián)系貨代公司,聯(lián)系拖車公司,拖車?yán)鴿M箱到客戶指定的倉庫,卸貨。客戶驗貨,整個貨運流程完畢,杰信和客戶的協(xié)議完畢。財務(wù)財務(wù)模塊不屬于貨運的業(yè)務(wù)流程。它是杰信自己內(nèi)部進行財務(wù)核算的模塊。記錄這單協(xié)議有無賺取利潤。形成記錄報表給領(lǐng)導(dǎo)展示。一對一特殊設(shè)計一個委托來自一個發(fā)票,一個發(fā)票來自一個委托,一個財務(wù)來自一個委托。(一對一)一對一的所有表內(nèi)容可以合成一張表,結(jié)構(gòu)不清楚,業(yè)務(wù)不清楚。發(fā)票,委托,財務(wù)表的主鍵就是裝箱單的ID。上面三張表,它們的主鍵既外鍵。主外鍵一個值。舉例,假定拿到ID,不管是裝箱、委托、發(fā)票、財務(wù),都可以查詢它們其中任何一個數(shù)據(jù)。實現(xiàn)跳躍查詢。財務(wù)需要貨品信息和附件信息,通過打斷設(shè)計,可以直接跳過發(fā)票、委托,直接找到裝箱,通過裝箱的打斷設(shè)計字段,直接去搜索報運下的貨品和附件信息。由于之前進行了冗余設(shè)計,財務(wù)所需的貨品信息和附件信息,在報運中都有。查詢效率提高數(shù)倍。出口報運的狀態(tài)0-草稿1-已上報2-裝箱3-委托4-發(fā)票5-財務(wù)體現(xiàn)流程,客戶隨時想了解訂單進展情況,流程的跟蹤。在報運的列表頁面隨時了解某個協(xié)議進行到哪里。數(shù)據(jù)庫優(yōu)化數(shù)據(jù)庫表設(shè)計由本來重視節(jié)省空間,變?yōu)橹匾曅阅?。運用冗余,實現(xiàn)性能數(shù)倍提高。表的優(yōu)化,監(jiān)測數(shù)據(jù)執(zhí)行時間。分表1)分字段(縱向分表)精簡完核心查詢它只需要近30個字段。本來需要1分多的查詢,現(xiàn)在只1秒多展現(xiàn)頁面。2)數(shù)據(jù)(橫向分表)一個表數(shù)據(jù)量過大。業(yè)務(wù)中有些數(shù)據(jù)不常用,將這些不常用的數(shù)據(jù)放到此外一張表中,稱這個表為歷史表。專門做一個歷史查詢的模塊,提供用戶還可以查詢。表之間的關(guān)聯(lián)關(guān)系不要太復(fù)雜。打斷設(shè)計SQL優(yōu)化,在做復(fù)雜關(guān)聯(lián)關(guān)系,SQL優(yōu)化極其重要。Select*fromcontract_c,contract_product_c,ext_cproduct_c,factory_cWherecontract_id,contract_product_id,factory_id…先找最小的結(jié)果集,只查詢某個協(xié)議下的貨品,只查詢某個貨品下的附件,只要查看這個協(xié)議數(shù)據(jù)庫的選型單個數(shù)據(jù)庫優(yōu)先選擇Oracle,DB2集群mysql,讀寫分離,單獨讀數(shù)據(jù)數(shù)據(jù)庫,單獨寫的數(shù)據(jù)庫Web應(yīng)用服務(wù)增長,可以增大訪問量,同時分擔(dān)數(shù)據(jù)庫服務(wù)器壓力。分表,購銷協(xié)議歷史當(dāng)前的活動表,它和歷史表的結(jié)構(gòu)同樣。主模塊中的所有表,歷史中都有有。例如:購銷協(xié)議,協(xié)議、貨品、附件都需要相應(yīng)的歷史表。創(chuàng)建domain批量新增SQL,JDBCjdbcTemplespring在一個系統(tǒng)架構(gòu)中一般訪問數(shù)據(jù)兩種方式hiberntate/mybatis完畢數(shù)據(jù)的持久化:新增,修改,刪除,簡樸查詢jdbc/jdbcTemlpate/dbutil批量操作,批量新增,批量修改,級聯(lián)刪除,記錄查詢重要框架來完畢平常業(yè)務(wù),一般批量查詢使用jdbc,對于這些模塊,緩存就要注意使用。有時不要配置緩存。購銷協(xié)議歸檔,取消歸檔--協(xié)議表數(shù)據(jù)進行歸檔INSERTINTOcontract_his_cSELECT*FROMcontract_cWHEREcontract_idIN('x','y')--貨品的數(shù)據(jù)進行歸檔INSERTINTOcontract_product_his_cSELECT*FROMcontract_product_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))--附件的數(shù)據(jù)進行歸檔INSERTINTOext_cproduct_his_cSELECT*FROMext_cproduct_cWHEREext_cproduct_idIN(SELECText_cproduct_idFROMext_cproduct_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))--刪除協(xié)議DELETEFROMcontract_cWHEREcontract_idIN('x','y')--刪除貨品DELETEFROMcontract_product_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))--刪除附件DELETEFROMext_cproduct_cWHEREext_cproduct_idIN(SELECText_cproduct_idFROMext_cproduct_cWHEREcontract_product_idIN(SELECTcontract_product_idFROMcontract_product_cWHEREcontract_idIN('x','y'))知識回顧業(yè)務(wù):貨運管理,購銷協(xié)議,出口報運,home裝箱單(預(yù)裝箱),裝箱,委托,發(fā)票(告知),財務(wù)記錄。【面試】工作流實現(xiàn)有什么好處?杰信系統(tǒng)實現(xiàn)狀態(tài)控制流程。瀏覽每步流程開始時間,操作人,結(jié)束時間,審核人忽然在流程環(huán)節(jié)中增長一步工作流擴充流程時,非常方便,修改一下流程圖,工作流自動記錄所有操作的人和操作時間,操作意見。狀態(tài)的代碼配合工作流來實現(xiàn)。狀態(tài)采用常量來定義,只有新增長的狀態(tài),才需要編碼。表設(shè)計委托,發(fā)票,財務(wù)它們的表的主鍵既外鍵,它們的ID值都是裝箱ID。由于它們4個的關(guān)系都是一對一。關(guān)聯(lián)時最近配置,需要前面業(yè)務(wù)數(shù)據(jù)時,可以實現(xiàn)跳躍查詢。這樣查詢的效率高。頁面設(shè)計裝箱新增,它需要在新增頁面表現(xiàn)裝箱和報運的關(guān)系。DivURL鏈接。攜帶的信息ID,checkbox中;no也放到checkbox,用豎杠隔開,一個checkbox傳遞了兩個值,無需再次查詢數(shù)據(jù)庫,提高性能,手工解串。(大量(超過10個字段)或者信息比較敏感,不推薦使用這種方法,推薦還使用通過id查找其他內(nèi)容) 第九天圖形報表~讓微軟都羨慕的報表Java要實現(xiàn)圖形報表都有什么方式?jFreeChart純javaAPI,運用生成一張圖片。excel圖形報表,poi不能直接操作圖形報表控件。變相解決,先做一個excel模板,插入好圖表控件,然后運用poi動態(tài)設(shè)立它的數(shù)據(jù)。用戶打開excel,圖表直接展現(xiàn)。第三方的報表軟件,可視化開發(fā)。開發(fā)效率極高。可視化布局界面,配置數(shù)據(jù)源即可。(SQL的結(jié)果集)。收費。數(shù)巨報表(10w,每年服務(wù)費1w)。做一個應(yīng)用程序,(C/S程序),IE上安裝插件。兼容性。amChartsFLASH,只需要構(gòu)建數(shù)據(jù)xml。需要swf控件,例如餅形通用setting.xml不通用的data.xml、data.txt,xml格式更加直觀,不通用的sqlDao查詢結(jié)果集的封裝,通用,工作原理amCharts只需要一次配置,公用flash,改造index.html,訪問公用的swfobject.js和公用的flashswf本來文獻(xiàn)。樣式文獻(xiàn)訪問本地的,這樣可以方便修改配置顏色,坐標(biāo),顯示樣式等。數(shù)據(jù)data.xml文獻(xiàn)。將從數(shù)據(jù)庫中讀取的數(shù)據(jù)拼接成xml節(jié)點,寫入到這個文本的文獻(xiàn)中。轉(zhuǎn)向jStat.jsp統(tǒng)一轉(zhuǎn)向相應(yīng)的forward參數(shù)目錄下的index.html。(注意:html瀏覽器默認(rèn)都有緩存,在做index.html要去掉緩存)<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"/><metahttp-equiv="pragma"content="no-cache"><metahttp-equiv="Cache-Control"content="no-cache,must-revalidate"><metahttp-equiv="expires"content="Wed,26Feb199708:21:57GMT">jFreeChart、excel、amChartsPK比較jFreeChart純javaapi,缺陷:圖形非常粗糙,它實際是運用jFreeChartapi生成的圖片,表現(xiàn)力差,專門的api需要記憶。生產(chǎn)廠家銷售情況-餅形圖需求:生產(chǎn)廠家銷售情況,廠家+銷售SELECT f.factory_name,cp.sumnumFROM(SELECTfactory_id,factory_nameFROMfactory_cWHEREstate=1)fLEFTJOIN(SELECTfactory_id,SUM(cnumber)ASsumnumFROMcontract_product_cGROUPBYfactory_id)cpONf.factory_id=cp.factory_idWHEREcp.sumnumISNOTnull產(chǎn)品銷售排行-柱狀圖需求:產(chǎn)品銷售情況,暢銷的產(chǎn)品的前10名,產(chǎn)品+銷售SELECTproduct_no,SUM(cnumber)ASsumnumFROMcontract_product_cGROUPBYproduct_noORDERBYsumnumDESCLIMIT10系統(tǒng)訪問壓力圖-曲線圖需求:系統(tǒng)訪問壓力圖記錄用戶登陸系統(tǒng),就記錄一條記錄天天登陸系統(tǒng)的次數(shù)SELECTSUBSTRING(login_time,1,10),COUNT(login_time)FROMlogin_log_pGROUPBYSUBSTRING(login_time,1,10)記錄24小時系統(tǒng)訪問的次數(shù)當(dāng)數(shù)據(jù)不夠時,運用臨時表湊數(shù)據(jù)SELECT t.a1,IFNULL(p.countnum,0)AScountnumFROM(SELECTa1FROMonline_t)tLEFTJOIN(SELECTSUBSTRING(login_time,12,2)ASa1,COUNT(login_time)AScountnumFROMlogin_log_pGROUPBYSUBSTRING(login_time,12,2))pONt.a1=p.a1總結(jié):圖形報表業(yè)界已經(jīng)相稱成熟,提出公用,稱作報表引擎。系統(tǒng)的監(jiān)控,系統(tǒng)想知道系統(tǒng)的訪問瓶頸在哪里?需求系統(tǒng)瓶頸是指,訪問最長時間,寫數(shù)據(jù)操作,寫磁盤文獻(xiàn)操作。都比較耗時,用戶體驗不好。找出系統(tǒng)這些操作慢的地方,分析因素優(yōu)化,用戶使用頻繁模塊,對其優(yōu)化實現(xiàn)一個性能監(jiān)控的程序初期使用繼承方式記錄開始時間,記錄結(jié)束時間,結(jié)束時間-開始時間=耗時寫到日記文獻(xiàn)中,寫到數(shù)據(jù)庫中攔截器配置springmvc攔截器,記錄開始時間,結(jié)束時間,打日記。開發(fā)環(huán)節(jié)寫一個攔截器,實現(xiàn)一個接口HandlerInterceptor實現(xiàn)共用的變量,安全性配置springmvc攔截器配置,springmvc-servlet.xmlpackageerceptor;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.springframework.core.NamedThreadLocal;importorg.springframework.web.servlet.HandlerInterceptor;importorg.springframework.web.servlet.ModelAndView;importcommon.Logger;//功能:實現(xiàn)對所有類方法執(zhí)行時間的監(jiān)控publicclassTimeInterceptorimplementsHandlerInterceptor{ //引入log4j日記 privatestaticLoggerlog=Logger.getLogger(TimeInterceptor.class); //運用ThreadLocal綁定一個變量,完畢線程安全 NamedThreadLocal<Long>startTimeThreadLocal=newNamedThreadLocal<Long>("startTimeThreadLocal"); //解決類之前,執(zhí)行preHandle方法 @Override publicbooleanpreHandle(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler)throwsException{ longstartTime=System.currentTimeMillis(); //記錄當(dāng)前時間 startTimeThreadLocal.set(startTime); //綁定變量 returntrue; } //解決類之后,執(zhí)行postHandler方法 @Override publicvoidpostHandle(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler, ModelAndViewmodelAndView)throwsException{ longstopTime=System.currentTimeMillis(); //記錄結(jié)束時間 (String.format("%sexecute%dms." ,request.getRequestURI() ,stopTime-startTimeThreadLocal.get())); } //所有的動作完畢,執(zhí)行一些方法 @Override publicvoidafterCompletion(HttpServletRequestrequest, HttpServletResponseresponse,Objecthandler,Exceptionex) throwsException{ //TODOAuto-generatedmethodstub }}sprimgmvc-servlet.xml中配置 <!--3.攔截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mappingpath="/**"/><!--攔截所有請求--> <beanclass="erceptor.TimeInterceptor"/> </mvc:interceptor> </mvc:interceptors>項目中使用Log4j導(dǎo)入jar包配置pertieslog4j.rootLogger=DEBUG,stdout 配置日記級別OFF,FANIL,ERROR,WARN,INFO,DEBUG,TRACE,ALL提供8個級別,log4j推薦開發(fā)者使用4個級別:ERROR:錯誤信息,try,catch拋出異常,log.error(“”),WARN:警告信息INFO:提醒DEBUG:BUG很多時候,監(jiān)控過程變量,調(diào)試順序級別,級別由低到高,高級別的信息會包含打印低檔別的信息。Stout輸出地點,涉及:控制臺,文獻(xiàn),數(shù)據(jù)庫log4j.rootLogger=DEBUG,stdout#Consolelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%-5p-%m%n#LogFilelog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=../logs/jklog.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:%L-%m%.apache=INFO.itcast.jk=DEBUG調(diào)用方法:publicclassTimeInterceptorimplementsHandlerInterceptor{ //引入log4j日記 privatestaticLoggerlog=Logger.getLogger(TimeInterceptor.class);類中類似System.out.println() (String.format("%sexecute%dms." ,request.getRequestURI() ,stopTime-startTimeThreadLocal.get()));POI導(dǎo)入直接讀取文獻(xiàn)內(nèi)容,形成SQL語句,批量插入數(shù)據(jù)庫。導(dǎo)入時,excel文檔它單元格有類型。 類型,根據(jù)不同的類型拼接不同的sql模板,自己定義一個模板,讓用戶將數(shù)據(jù)導(dǎo)入。模板要設(shè)立將所有的單元格設(shè)立為文本類型,導(dǎo)入的數(shù)據(jù)就都是文本。沒有通用性,要根據(jù)具體業(yè)務(wù)做一個這樣類。插入SQL語句。知識回顧項目記錄分析核心模塊軟件的核心價值:舉例:了解杰信有哪些現(xiàn)有的產(chǎn)品暢銷,VIP客戶,什么產(chǎn)品滯銷。指導(dǎo)公司經(jīng)營。為公司經(jīng)營決策提供數(shù)據(jù)支持。在基礎(chǔ)數(shù)據(jù)中挖掘有價值的信息。再次提煉。~數(shù)據(jù)挖掘。圖表報表第三方報表,用戶展現(xiàn)效果最佳,功能齊全,開發(fā)效果。收費jFreeChart古老,api繁雜,開發(fā)效率不高,生成圖片jReport復(fù)雜excel(公司中常采用)javascriptamCharts(收費)amChartsFlashamChartsFlash表現(xiàn)力酷炫,使用最簡樸,SQL的數(shù)據(jù)源動態(tài)生成data.xml圖形報表常見餅形圖柱狀圖曲線圖第十天整合ApacheCXF實現(xiàn)WebService服務(wù)CXFapachewebservice簡樸快捷的開發(fā)一個webservice程序需求:杰信系統(tǒng)是一個內(nèi)部使用的業(yè)務(wù)系統(tǒng),VPN公司向電信申請在inter網(wǎng)上的內(nèi)部網(wǎng)??蛻魧崟r了解訂單情況,了解訂單走到貨運流程的哪一步。原先:客戶給銷售打電話,銷售人員詢問公司同事,問船務(wù)。船務(wù)回饋信息。給客戶系統(tǒng)提供一個webservice服務(wù),讓他能實時查詢訂單的狀態(tài),實現(xiàn)上面的規(guī)定,在出口報運中提供這個webservice服務(wù)。將出口報運查看發(fā)布成WebService服務(wù),在這里客戶可以隨時查看出口報運單,查看訂單的流程。開發(fā)環(huán)節(jié):引入apachecxfjar <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.0-milestone2</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.0-milestone2</version> </dependency> <!--Jettyisneededifyou'reusingtheCXFServlet--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.0.0-milestone2</version> </dependency>改造出口報運單Service為WebServiceWebService公開方法中的參數(shù)不能使接口,必須實現(xiàn)類。類改造為:@WebServicepublicclassContractServiceImplimplementsContractService{將不需要公開的方法設(shè)立為@WebMethod(exclude=true)實體po對象,必須序列化publicclassExportimplementsSerializable配置cxf-servlet.xml配置文獻(xiàn)<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="" xmlns:xsi="" xmlns:jaxws="" xsi:schemaLocation=" :///schemas/jaxws.xsd"><importresource="classpath:META-INF/cxf/cxf.xml"/><importresource="classpath:META-INF/cxf/cxf-servlet.xml"/><!--將cxf和spring進行整合--><!--聲明服務(wù)--><beanid="exportService"class="cn.itcast.jk.service.impl.ExportServiceImpl"> <!--注入spring容器中dao--> <propertyname="exportDao"ref="exportDaoImpl"/></bean><!--發(fā)布服務(wù)implementor實現(xiàn)類,address發(fā)布訪問地址--><jaxws:endpointimplementor="#exportService"address="/ExportServiceImpl"/></beans>Web.xml配置 <!--ApacheCXFservlet--> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <init-param> <param-name>config-location</param-name> <param-value>classpath:cxf-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/cxf/*</url-pattern> </servlet-mapping>發(fā)布服務(wù)wsdlWebService說明書http://localhost/jk/cxf/ExportServiceImpl?wsdl模擬調(diào)用這個webService服務(wù)ajaxSOAPxml <scripttype="text/javascript"> varxmlHttpRequest=newActiveXObject("Microsoft.XMLHTTP"); functionsendMsg(){ /* 1.創(chuàng)建ajax對象XMLHTTP 2.打開一個鏈接open("POST",url,true) 3.soapxmlrequest 4.設(shè)立requestHeader請求頭 5.回調(diào)函數(shù),解決返回的xml,將信息展現(xiàn)到頁面 6.send(xml) */ varfindId=document.getElementById("findId").value; findId="%"+findId+"%"; if(findId==null){ alert("請輸入編號"); returnfalse; } varrequestBody="<soapenv:Envelopexmlns:soapenv=\"\"xmlns:q0=\"\"xmlns:xsd=\"\"xmlns:xsi=\"\">" +"<soapenv:Body><q0:wsview><arg0>"+findId+"</arg0></q0:wsview></soapenv:Body></soapenv:Envelope>" varurl="${ctx}/cxf/ExportServiceImpl"; xmlHttpRequest.open("POST",url,true); xmlHttpRequest.setRequestHeader("Content-Type","text/xml;charset=utf-8;"); xmlHttpRequest.onreadystatechange=_back; xmlHttpRequest.send(requestBody); } function_back(){ if(xmlHttpRequest.readyState==4){ //解決完畢 if(xmlHttpRequest.status==200){ varretxml=xmlHttpRequest.responseXML; //返回的XML內(nèi)容 varret=retxml.getElementsByTagName("return")[0]; if(ret==null){ alert("查詢不到記錄!"); returnfalse; } //將數(shù)據(jù)插入到相應(yīng)的td document.getElementById("customerContract").innerHTML=ret.getElementsByTagName("customerContract")[0].text; if(ret.getElementsByTagName("inputDate")[0]!=null){ document.getElementById("inputDate").innerHTML=ret.getElementsByTagName("inputDate")[0].text.substring(0,10); } if(ret.getElementsByTagName("consignee")[0]!=null){ document.getElementById("consignee").innerHTML=ret.getElementsByTagName("consignee")[0].text; } if(ret.getElementsByTagName("lcno")[0]!=null){ document.getElementById("lcno").innerHTML=ret.getElementsByTagName("lcno")[0].text; } if(ret.getElementsByTagName("shipmentPort")[0]!=null){ document.getElementById("shipmentPort").innerHTML=ret.getElementsByTagName("shipmentPort")[0].text; } if(ret.getElementsByTagName("transportMode")[0]!=null){ document.getElementById("transportMode").innerHTML=ret.getElementsByTagName("transportMode")[0].text; } if(ret.getElementsByTagName("priceCondition")[0]!=null){ document.getElementById("priceCondition").innerHTML=ret.getElementsByTagName("priceCondition")[0].text; } if(ret.getElementsByTagName("marks")[0]!=null){ document.getElementById("marks").innerHTML="<pre>"+ret.getElementsByTagName("marks")[0].text+"</pre>"; } if(ret.getElementsByTagName("remark")[0]!=null){ document.getElementById("remark").innerHTML="<pre>"+ret.getElementsByTagName("remark")[0].text+"</pre>"; } }else{ //犯錯信息 alert("你犯錯了!") } } }國際物流杰信項目面試總結(jié)面試時如何講解項目?講出三個層次,講項目的背景,講特色的業(yè)務(wù)講業(yè)務(wù)的復(fù)雜度從業(yè)務(wù)角度牽扯出技術(shù)亮點每一層都要挖陷阱,讓面試官問問題。從面試題中找出十個重點,把它們自己總結(jié)一段話,300~500字。綜合所學(xué)的所有知識業(yè)務(wù)購銷協(xié)議杰信和生產(chǎn)廠家要簽訂一個購銷協(xié)議,購銷協(xié)議涉及三部分內(nèi)容,涉及協(xié)議主信息和多個貨品信息和多個附件信息。協(xié)議和貨品是一對多,貨品和附件是一對多。貨品和附件都有指定的生產(chǎn)廠家,附件尚有一個分類需要取自基礎(chǔ)表。大約字段有近90個。在購銷協(xié)議中尚有一個復(fù)雜的報表打印,這個表單內(nèi)容非常復(fù)雜,它打印出協(xié)議的主信息,尚有多個貨品信息,一頁紙假如是一個生產(chǎn)廠家,必須另起一頁打印。一個頁用戶可以選擇打印一款貨品,也可以選擇打印兩款貨品。購銷協(xié)議協(xié)議數(shù)量比較多,積累2023多的數(shù)據(jù),客戶規(guī)定,將這些數(shù)據(jù)導(dǎo)出到excel中備份這些數(shù)據(jù)。我就研究實現(xiàn)了一個數(shù)百萬海量數(shù)據(jù)的導(dǎo)出。出口報運杰信和客戶簽訂協(xié)議后,找到生產(chǎn)廠家開始生產(chǎn)貨品,于此同時向海關(guān)申報準(zhǔn)備運送的貨品,貨品的信息和重量信息和體積信息,為裝箱做準(zhǔn)備。出口報運時貨品信息來自協(xié)議下的貨品信息,自身環(huán)境新增了部分貨品的信息涉及重量信息和體積信息。一個報運來自多個協(xié)議。在出口報運時,它其他業(yè)務(wù)的集中體現(xiàn),在這里建立一個流程狀態(tài),它能反饋后續(xù)流程流轉(zhuǎn)到哪里。在后續(xù)流程流轉(zhuǎn)時,都要回執(zhí)這個狀態(tài)。我們系統(tǒng)給客戶系統(tǒng)也提供了這個貨運流程的跟蹤,讓可以可以在他的系統(tǒng)中實時查詢出他下的訂單的當(dāng)前訂單流轉(zhuǎn)到哪里,是裝箱,是委托,還是走到發(fā)票等等。我們的系統(tǒng)采用的是J2EEE技術(shù)實現(xiàn),客戶的系統(tǒng)采用.net技術(shù)實現(xiàn)。我們系統(tǒng)給它們的系統(tǒng)提供了一個WebService服務(wù),使用ApacheCXF實現(xiàn),它可以異構(gòu)系統(tǒng)來直接訪問我們的系統(tǒng),進行訂單的流程查詢。貨運管理流程貨運管理是杰信項目的二期的核心內(nèi)容,它涉及:購銷協(xié)議、出口報運單、裝箱單、委托書、發(fā)票告知、財務(wù)記錄這幾步。購銷協(xié)議是客戶和杰信簽訂協(xié)議后,向生產(chǎn)廠家簽訂的協(xié)議稱為購銷協(xié)議。然后杰信向海關(guān)進行出口報運的申請,海關(guān)批準(zhǔn)后,杰信找貨代公司訂箱子,杰信找拖車公司訂拖車,拖車?yán)障涞缴a(chǎn)廠家指定的倉庫在驗貨員的監(jiān)督下裝貨,拖車?yán)鴿M箱到海關(guān)指定的碼頭指定的區(qū)域卸貨。等待裝船。在裝船前,海關(guān)進行抽檢。船來后進行轉(zhuǎn)船。然后船離開裝運港,我們杰信的這單訂單就順利完畢。船離開前,杰信向客戶快遞一個發(fā)票告知,同時附上提單??蛻羰盏桨l(fā)票,支付剩余尾款,收到提單,等船到目的港,卸貨后,客戶拿著提單提貨。杰信最終進行內(nèi)部財務(wù)核算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論