<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

    18.12  物資處理模塊

    18.12.1  物資處理模塊總體架構(gòu)

    物資處理模塊主要包括以下功能。

      ●   庫存盤點:用于分頁打印庫存盤點表;

      ●   部門報損:用于對部門報損信息進行登記。

    18.12.2  創(chuàng)建物資處理模塊的持久化類及映射文件

    1.創(chuàng)建持久化類和映射文件

    物資處理模塊涉及到的數(shù)據(jù)表的持久化類和映射文件如表18.20所示。持久化類及映射文件的具體實現(xiàn)方法請參見18.8.2節(jié)。

    表18.20                        物資處理模塊涉及到的數(shù)據(jù)表的持久化類和映射文件

    數(shù)據(jù)表名稱

    持久化類名稱

    映射文件名稱

    tb_damage

    DamageForm

    DamageForm.hbm.xml

    tb_branch

    BranchForm

    BranchForm.hbm.xml

    tb_goods

    GoodsForm

    GoodsForm.hbm.xml

    tb_storage

    StorageForm

    StorageForm.hbm.xml

    2.映射關(guān)聯(lián)關(guān)系

    在物資出庫模塊中,涉及到兩對關(guān)聯(lián)關(guān)系,如表18.21所示。

    表18.21                                                 物資出庫模塊的表間關(guān)系

    主  鍵  表

    外  鍵  表

    名    稱

    字  段  名

    名    稱

    字  段  名

    tb_goods

    id

    tb_damage

    goodsid

    tb_branch

    id

    tb_damage

    branchid

    說明:在Hibernate中映射關(guān)聯(lián)關(guān)系的具體方法請參見18.10.2節(jié)。

    3.修改Hibernate配置文件

    在創(chuàng)建持久化類、映射文件和關(guān)聯(lián)關(guān)系后,還需要在Hibernate配置文件hibernate.cfg.xml中指定持久化類映射文件,關(guān)鍵代碼如下:

    <mapping resource="com/actionForm/DamageForm.hbm.xml"/>

    說明:由于物資信息表、部門信息表和物資借出信息表的持久化類及映射文件在前面的章節(jié)中已經(jīng)配置了,所以此時不需要再進行配置。

    18.12.3  創(chuàng)建物資處理模塊的Action實現(xiàn)類

    物資處理模塊的Action實現(xiàn)類繼承了Action類,在該類中首先需要在構(gòu)造方法中實例化物資管理模塊的OutStorageDAO類(該類用于實現(xiàn)業(yè)務(wù)邏輯操作),然后通過Action實現(xiàn)類的主要方法execute()執(zhí)行相應(yīng)的業(yè)務(wù)邏輯操作。Action實現(xiàn)類的execute()方法會被自動執(zhí)行,這個方法本身沒有具體的事務(wù),它是根據(jù)HttpServletRequest的getParameter()方法獲取的action參數(shù)值執(zhí)行相應(yīng)方法的。

    物資處理模塊的Action實現(xiàn)類的關(guān)鍵代碼如下。

    例程18-108:光盤\mr\18\MaterialManage\src\com\action\Damage.java

    public class Damage extends Action {

        ……     //此處省略了在構(gòu)造方法中實例化OutStorageDAO類的方法

        public ActionForward execute(ActionMapping mapping, ActionForm form,

                                     HttpServletRequest request,HttpServletResponse response) {

            String action = request.getParameter("action");

            if (action.equals("") || action == null) {

                request.setAttribute("error", "您的操作有誤!");

                return mapping.findForward("error");

            } else if (action.equals("damageaddquery")) {     //查詢部門領(lǐng)用物資信息

                return damageadd_request(mapping, form, request, response);

            } else if (action.equals("damageadd")) {     //添加部門報損信息

                return damageadd(mapping, form, request, response);

            }else{

                request.setAttribute("error", "您的操作有誤!");

                return mapping.findForward("error");

            }

        }

        ……  //此處省略了該類中其他方法,這些方法將在后面的具體過程中給出

    }

    18.12.4  庫存盤點設(shè)計

    使用的數(shù)據(jù)表:tb_goods、tb_storage     主要技術(shù):通過Hibernate 的本地SQL查詢查詢多表數(shù)據(jù)

    用戶登錄后,選擇“物資處理”→“庫存盤點”菜單項,進入到庫存盤點頁面,在該頁面中將顯示庫存信息列表及庫存總金額,單擊“打印盤點報表”超級鏈接可以分頁打印庫存盤點表。庫存盤點頁面運行結(jié)果如圖18.25所示,打印預(yù)覽效果如圖18.26所示。

    圖18.25  庫存盤點頁面運行結(jié)果

    圖18.26  庫存盤點頁面打印預(yù)覽效果

    在庫存盤點頁面中調(diào)用OutStorageDAO類中的storage_query()方法查詢庫存中的物資信息,關(guān)鍵代碼如下。

    例程18-109:光盤\mr\18\MaterialManage\defaultroot\storageCheck.jsp

    <%

        List listgoods = null;

        OutStorageDAO outStorageDAO = new OutStorageDAO();

        listgoods = outStorageDAO.storage_query();     //查詢庫存中的物資信息

        java.util.Date date=new java.util.Date();

    %>

    說明:OutStorageDAO類中storage_query()方法的詳細代碼請參見例程18-96。

    在庫存盤點頁面中添加用于顯示庫存盤點報表內(nèi)容的表格,并設(shè)置好表頭、表尾及打印分頁。需要注意的是:由于盤點數(shù)量需要手工填寫,所以在打印時需要留出相應(yīng)的位置,關(guān)鍵代碼如下。

    例程18-110:光盤\mr\18\MaterialManage\defaultroot\storageCheck.jsp

    <table width="90%" border="1" cellpadding="0" cellspacing="0" bgcolor="#000000" id="pay"

    bordercolor="#00000" bordercolordark="#000000" bordercolorlight="#FFFFFF" >

    <thead style="display:table-header-group;">

    <tr>

      <td width="7%" align="center" bgcolor="#FFFFFF">編號</td>

      ……     //此處省略了部分HTML代碼

      <td width="9%" align="center" bgcolor="#FFFFFF">盤點數(shù)量</td>

    </tr>

    </thead>

    <%if (listgoods.size() <= 0) {%>

    <tr> <td colspan="7" align="center" bgcolor="#FFFFFF">&nbsp;暫無庫存信息!</td></tr>

    <%}else {

    String Producer="";     //生產(chǎn)廠家

    String Unit="";     //單位

    float Price=0.0f;     //單價

    float amount=0.0f;     //總金額

    int storagenumber=0;     //庫存數(shù)量

    String goodsname="";     //物資名稱

    int goodsId=0;     //物資ID

    String spec="";     //規(guī)格

    for(int i=0;i<listgoods.size();i++){

        Object obj[]=(Object[])listgoods.get(i);

        GoodsForm goodsF=(GoodsForm)obj[0];

        StorageForm storageF=(StorageForm)obj[1];

        goodsId=goodsF.getId();

        goodsname=goodsF.getName();

        spec=goodsF.getSpec();

        Producer=goodsF.getProducer();

        Unit=goodsF.getUnit();

        Price=goodsF.getPrice();

        storagenumber=storageF.getNumber();

        amount=amount+Price*storagenumber;

    %>

    <tr<%if((i+1)%18==0){%> style="page-break-after:always;"<%}%>>

      <td align="center" bgcolor="#FFFFFF">&nbsp;<%=i+1%></td>

      ……     //此處省略了部分HTML代碼

      <td bgcolor="#FFFFFF">&nbsp;</td>

    </tr>

    <%}%>

    <tfoot style="display:table-footer-group;"><tr><td class="tableBorder_B1"></td></tr></tfoot>

    </table>

    ……     //此處省略了部分HTML代碼

    <%}%>

    </table>

    控制頁面背景、系統(tǒng)導(dǎo)航信息、版權(quán)信息及“打印”超級鏈接,在打印時不顯示,關(guān)鍵代碼如下。

    例程18-111:光盤\mr\18\MaterialManage\defaultroot\storageCheck.jsp

    <style>

    @media print{

    div{display:none}

    .bgnoprint{

        background:display:none;

    }

    .noprint{

        display:none

    }

    }

    </style>

    <body onLoad="clockon(bgclock)" class="bgnoprint">

    <table width="757" height="174" border="0" align="center"cellpadding="0" cellspacing="0">

      <tr class="noprint">

        <td height="133" align="center" valign="top"><%@include file="top.jsp"%>

        </td>

      </tr>

    ……     //此處省略了部分HTML代碼

    <div>庫存總金額:<%=amount%>

    &nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onClick="window.print();">打印盤點報表</a></div>

    ……     //此處省略了部分HTML代碼

      <tr class="noprint">

        <td height="55" valign="top" background="images/bottom.jpg"><%@include file="copyright.jsp"%>

        </td>

      </tr>

    18.12.5  部門報損設(shè)計

    使用的數(shù)據(jù)表:tb_damage、tb_branch、tb_goods  主要技術(shù):通過Hibernate API操作數(shù)據(jù)庫

    用戶登錄后,選擇“物資處理”→“部門報損”菜單項,進入到部門報損頁面。在部門報損頁面中,首先從“物資名稱”下拉列表框中選擇要報損的物資(系統(tǒng)將自動檢索出該物資的生產(chǎn)廠家、單價和計量單位等信息),然后選擇部門名稱并輸入報損數(shù)量、負責(zé)人名稱及報損原因,單擊【保存】按鈕,保存部門報損信息,運行結(jié)果如圖18.27所示。

    1.設(shè)計部門報損頁面

    從系統(tǒng)主菜單中選擇“物資處理”→“部門報損”菜單項或是在部門報損頁面中改變“物資名稱”下拉列表框的值時都會觸發(fā)一個URL地址,這個URL地址是“damage.do?action=damageaddquery”。從這個URL地址中可以知道部門報損頁面所涉及到的action的參數(shù)值為“damageaddquery”,當(dāng)action=damageaddquery時,會調(diào)用查詢已領(lǐng)用物資信息的方法damageadd_request(),具體代碼如下。

    例程18-112:光盤\mr\18\MaterialManage\src\com\action\Damage.java

    if (action.equals("damageaddquery")) {

        return damageadd_request(mapping, form, request, response);

    }

    在查詢已領(lǐng)用物資信息的方法damageadd_request()中,首先需要獲取從頁面中傳遞的參數(shù)id的值并保存到HttpServletRequest的對象id中,然后調(diào)用OutStorageDAO類中的getuseGoods_query()方法查詢出已領(lǐng)用物資信息,再將返回的查詢結(jié)果保存到HttpServletRequest的對象getuse中。查詢已領(lǐng)用物資信息的方法damageadd_request()的具體代碼如下。

    圖18.27  部門報損頁面運行結(jié)果

    例程18-113:光盤\mr\18\MaterialManage\src\com\action\Damage.java

    public ActionForward damageadd_request(ActionMapping mapping,ActionForm form,

                                        HttpServletRequest request,HttpServletResponse response) {

        int goodsid = 0;

        if (request.getParameter("id") != null) {

            goodsid = Integer.parseInt(request.getParameter("id"));

        }

        request.setAttribute("id", goodsid);

        request.setAttribute("getuse", outStorageDAO.getuseGoods_query()); //獲取部門已領(lǐng)用物資信息

        return mapping.findForward("selGetuseGoods");

    }

    從上面的代碼中可以知道查詢已領(lǐng)用物資信息使用的OutStorageDAO類的方法是getuseGoods_query(),在該方法中首先需要利用Hibernate的本地SQL查詢獲取已領(lǐng)用物資的詳細信息,然后將查詢結(jié)果保存到List集合list中,并返回list。getuseGoods_query()方法的具體代碼如下。

    例程18-114:光盤\mr\18\MaterialManage\src\com\action\OutStorageDAO.java

    public List getuseGoods_query() {

        session = MySession.openSession();

        List list = null;

        String sql = "select * from tb_goods where id in (select goodsid from tb_getuse group by goodsid)";

        try {

            SQLQuery query = session.createSQLQuery(sql);

            query.addEntity("goods", GoodsForm.class); //將數(shù)據(jù)表與持久化類關(guān)聯(lián)在一起

            list = query.list();

        } catch (Exception e) {

            System.out.println("查詢時的錯誤信息:" + e.getMessage());

        }

        return list;

    }

    在struts-config.xml文件中配置查詢已領(lǐng)用物資信息所涉及的<forward>元素,代碼如下:

    <forward name="selGetuseGoods" path="/damageAdd.jsp" />

    接下來的工作是將getuseGoods_query()方法返回的查詢結(jié)果顯示在部門報損頁面damageAdd.jsp中。在damageAdd.jsp中首先通過request.getAttribute()方法獲取查詢結(jié)果并將其顯示在相應(yīng)的位置或表單元素中。

    2.保存部門報損信息

    在部門報損頁面中錄入部門報損信息后,單擊【保存】按鈕,系統(tǒng)會訪問一個URL,這個URL是“damage.do?action=damageadd”。從該URL地址中可以知道保存部門報損信息涉及到的action的參數(shù)值為“damageadd”,也就是當(dāng)action=damageadd時,會調(diào)用保存部門報損信息的方法damageadd(),具體代碼如下。

    例程18-115:光盤\mr\18\MaterialManage\src\com\action\Damage.java

    if (action.equals("damageadd")) {

        return damageadd(mapping, form, request, response);

    }

    在保存部門報損信息的方法damageadd()中,首先需要將接收到的表單信息強制轉(zhuǎn)換成ActionForm類型,然后調(diào)用OutStorageDAO類中的damageAdd()方法保存部門報損信息到相應(yīng)的數(shù)據(jù)表中,并將返回值保存到變量rtn中。如果返回值為1,表示信息修改成功,將頁面重定向到部門報損頁面,否則將錯誤提示信息“部門報損信息添加失??!”保存到HttpServletRequest的對象error中,然后將頁面重定向到錯誤提示信息頁面。保存部門報損信息的方法getuseadd()的關(guān)鍵代碼如下。

    例程18-116:光盤\mr\18\MaterialManage\src\com\action\Damage.java

    public ActionForward damageadd(ActionMapping mapping,ActionForm form,

                                        HttpServletRequest request,HttpServletResponse response) {

        DamageForm getUseForm = (DamageForm) form;

        int rtn = outStorageDAO.damageAdd(getUseForm);

        ……    //此處省略了根據(jù)返回值重定向頁面的代碼

    }

    3.編寫保存部門報損信息的OutStorageDAO類的方法

    從上面的代碼中可以知道保存部門報損信息時使用的OutStorageDAO類的方法是damageAdd(),在該方法中首先需要建立“GoodsForm和DamageForm的關(guān)聯(lián)關(guān)系”以及“BranchForm和DamageForm的關(guān)聯(lián)關(guān)系”,再保存部門報損信息。damageAdd()方法的具體代碼如下。

    例程18-117:光盤\mr\18\MaterialManage\src\com\dao\OutStorageDAO.java

    public int damageAdd(DamageForm damageForm) {

        session = MySession.openSession();     //打開Session

        Transaction tx = null;

        int rtn = 0;

        try {

            //保存物資借出信息

            tx = session.beginTransaction();

            int goodsid = damageForm.getGoodsid();

            GoodsForm goodsForm = (GoodsForm) session.get(GoodsForm.class,goodsid);

            damageForm.setGoods(goodsForm);

            int branchid = damageForm.getBranchid();

            BranchForm branchForm = (BranchForm) session.get(BranchForm.class,branchid);

            damageForm.setBranch(branchForm);

            damageForm.setCreatetime(new Date());

            session.save(damageForm);

            tx.commit();

            rtn = 1;

        } catch (Exception e) {

            if (tx != null) {

                tx.rollback();

            }

            System.out.println("添加部門報損信息時的錯誤信息:" + e.getMessage());

            rtn = 0;

        } finally {

            MySession.closeSession(session); //關(guān)閉Session

        }

        return rtn;

    }

    4.struts-config.xml文件配置

    在struts-config.xml文件中配置保存部門報損信息所涉及的<forward>元素,代碼如下:

    <forward name="damageAddok" path="/damageAddok_ok.jsp?para=1" />

    posted on 2009-01-07 10:43 rogerfan 閱讀(247) 評論(0)  編輯  收藏 所屬分類: 【開源技術(shù)】
    主站蜘蛛池模板: 久艹视频在线免费观看| 好紧我太爽了视频免费国产| 美女被免费喷白浆视频| 日韩亚洲Av人人夜夜澡人人爽| 美女被免费网站91色| 亚洲色精品vr一区二区三区 | 国产精品嫩草影院免费| 亚洲久热无码av中文字幕| 成人免费福利电影| 亚洲AV无码AV男人的天堂不卡| 在线观着免费观看国产黄| 亚洲日韩在线中文字幕综合| 免费在线观看一级毛片| 国产精品永久免费| 亚洲国产精品一区二区久久| 18女人毛片水真多免费| 色在线亚洲视频www| 女人张开腿等男人桶免费视频| 精品国产日韩亚洲一区91| 亚洲第一视频在线观看免费| 91国内免费在线视频| 久久精品国产亚洲精品2020| 久久久久国色AV免费观看性色 | 99蜜桃在线观看免费视频网站| 精品亚洲aⅴ在线观看| 毛片a级毛片免费播放下载| 日韩在线视精品在亚洲| 亚洲中文字幕第一页在线| 国产精品免费无遮挡无码永久视频| 亚洲精品视频在线观看视频| 女人18毛片水最多免费观看| 国产特黄一级一片免费| 亚洲春色在线观看| yy6080久久亚洲精品| 亚洲一区免费观看| 亚洲乱色伦图片区小说 | 妞干网免费视频观看| 亚洲视频在线免费| 久久精品国产亚洲av麻豆图片 | 亚洲AV一宅男色影视| 成人黄18免费视频|