SSM框架重構達內NETCTOSS項目——(5)資費列表

實現NETCTOSS項目中資費列表功能

  1. 在數據訪問層增加查詢全部資費的方法
    • 創建資費表,並插入預置數據:
      • DROP TABLE IF EXISTS `cost`;
        
        create table cost(
        	cost_id			int(4) auto_increment,
        	name			varchar(50)	not null,
        	base_duration		int(11),
        	base_cost		double(7,2),
        	unit_cost		double(7,4),
        	status			char(1),
        	descr			varchar(100),
        	creatime		datetime default now(),
        	startime		datetime,
        	cost_type		char(1),
        	constraint cost_id_pk primary key(cost_id)
        );
        
        insert into cost values (null,'5.9元套餐',20,5.9,0.4,0,'5.9元20小時/月,超出部分0.4元/時',default,default,null);
        insert into cost values (null,'6.9元套餐',40,6.9,0.3,0,'6.9元40小時/月,超出部分0.3元/時',default,default,null);
        insert into cost values (null,'8.5元套餐',100,8.5,0.2,0,'8.5元100小時/月,超出部分0.2元/時',default,default,null);
        insert into cost values (null,'10.5元套餐',200,10.5,0.1,0,'10.5元200小時/月,超出部分0.1元/時',default,default,null);
        insert into cost values (null,'計時收費',null,null,0.5,0,'0.5元/時,不使用不收費',default,default,null);
        insert into cost values (null,'包月',null,20,null,0,'每月20元,不限制使用時間',default,default,null);
        insert into cost values (null,'mm',10,5,null,0,'',default,default,null);
        insert into cost values (null,'nn',10,7,null,0,'',default,default,null);
        insert into cost values (null,'qq',10,4,null,0,'',default,default,null);

    • 創建資費實體類Cost:
      • package entity;
        public class Cost implements Serializable {
        	
            private Integer costId;
            private String name;
            private Integer baseDuration;
            private Double baseCost;
            private Double unitCost;
            private String status;
            private String descr;
            private Timestamp creatime;
            private Timestamp startime;
            private String costType;
        }
      • Generate Getters and Setters
      • Generate hashCode() and equals()
      • Generate toString()
  2. (添加Mapper接口)資費數據訪問接口:CostDao:
    • package dao;
      
      import java.util.List;
      
      import entity.Cost;
      
      public interface CostDao {
      	
      	List<Cost> findAll();
      	
      }

    • 在Mapper(映射文件)配置添加SQL, CostMapper.xml:
      • <mapper namespace="dao.CostDao">
        	
        	<select id="findAll" resultType="entity.Cost">
        		select 
        			cost_id	 as costId,
        			name as name,
        			base_duration as baseDuration,
        			base_cost as baseCost,
        			unit_cost as unitCost,
        			status as status,
        			descr as descr,
        			creatime as creatime,
        			startime as startime,
        			cost_type as costType
        		from 
        			cost
        		order by 
        			#{costId}
        	</select>

  3. 在業務層增加查詢資費的業務方法:
    • 定義業務接口:CostService:定義查詢資費方法:
      • public interface CostService {
        	
        	List<Cost> findAll();
        	
        }

    • 創建資費業務組件CostServiceImpl:
      • @Service("CostService")
        public class CostServiceImpl implements CostService {
        
        	@Resource
        	private CostDao costDao;
        	
        	public List<Cost> findAll() {
        		
        		return costDao.findAll();
        		
        	}
        
        }
        

  4. 在控制器增加處理查詢請求的方法
    • 創建資費模塊處理器CostController:
      • @Controller
        @RequestMapping("/cost")
        public class CostController {
        	
        	@Resource
            private CostService costService;
        	
        	@RequestMapping("/find.do")
        	public String find(ModelMap model){
        		List<Cost> list = costService.findAll();
        		model.addAttribute("costs",list);
        		return "cost/cost_list";
        	}
        	
        }

  5. 在頁面上使用JSTL+EL循環輸出數據
    • 在WEB-INF/jsp/cost下創建資費列表頁面cost_list.jsp:
      • <%@page pageEncoding="utf-8"%>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>達內-NetCTOSS</title>
        <link type="text/css" rel="stylesheet" media="all" href="../styles/global.css" />
        <link type="text/css" rel="stylesheet" media="all" href="../styles/global_color.css" />
        <script language="javascript" type="text/javascript">
                    //排序按鈕的點擊事件
        function sort(btnObj) {
        if (btnObj.className == "sort_desc")
                            btnObj.className = "sort_asc";
        else
                            btnObj.className = "sort_desc";
                    }
                    //啓用
        function startFee() {
                        var r = window.confirm("確定要啓用此資費嗎?資費啓用後將不能修改和刪除。");
        document.getElementById("operate_result_info").style.display = "block";
                    }
                    //刪除
        function deleteFee() {
                        var r = window.confirm("確定要刪除此資費嗎?");
        document.getElementById("operate_result_info").style.display = "block";
                    }
        </script>
        </head>
        <body>
        <!--Logo區域開始-->
        <div id="header">
        <img src="../images/logo.png" alt="logo" class="left"/>
        <a href="#">[退出]</a>
        </div>
        <!--Logo區域結束-->
        <!--導航區域開始-->
        <div id="navi">
        <ul id="menu">
        <li><a href="../index.html" class="index_off"></a></li>
        <li><a href="../role/role_list.html" class="role_off"></a></li>
        <li><a href="../admin/admin_list.html" class="admin_off"></a></li>
        <li><a href="../fee/fee_list.html" class="fee_on"></a></li>
        <li><a href="../account/account_list.html" class="account_off"></a></li>
        <li><a href="../service/service_list.html" class="service_off"></a></li>
        <li><a href="../bill/bill_list.html" class="bill_off"></a></li>
        <li><a href="../report/report_list.html" class="report_off"></a></li>
        <li><a href="../user/user_info.html" class="information_off"></a></li>
        <li><a href="../user/user_modi_pwd.html" class="password_off"></a></li>
        </ul>
        </div>
        <!--導航區域結束-->
        <!--主要區域開始-->
        <div id="main">
        <form action="" method="">
        <!--排序-->
        <div class="search_add">
        <div>
        <!--<input type="button" value="月租" class="sort_asc" οnclick="sort(this);" />-->
        <input type="button" value="基費" class="sort_asc" οnclick="sort(this);" />
        <input type="button" value="時長" class="sort_asc" οnclick="sort(this);" />
        </div>
        <input type="button" value="增加" class="btn_add" οnclick="location.href='fee_add.html';" />
        </div>
        <!--啓用操作的操作提示-->
        <div id="operate_result_info" class="operate_success">
        <img src="../images/close.png" οnclick="this.parentNode.style.display='none';" />
        刪除成功!
        </div>
        <!--數據區域:用表格展示數據-->
        <div id="data">
        <table id="datalist">
        <tr>
        <th>資費ID</th>
        <th class="width100">資費名稱</th>
        <th>基本時長</th>
        <th>基本費用</th>
        <th>單位費用</th>
        <th>創建時間</th>
        <th>開通時間</th>
        <th class="width50">狀態</th>
        <th class="width200"></th>
        </tr>
        <c:forEach items="${costs}" var="c">
        <tr>
        <td>${c.costId}</td>
        <td><a href="fee_detail.html">${c.name}</a></td>
        <td>${c.baseDuration}</td>
        <td>${c.baseCost}</td>
        <td>${c.unitCost}</td>
        <td>${c.creatime}</td>
        <td>${c.startime}</td>
        <td>
            <c:if test="${c.status==0}">開通</c:if>
           <c:if test="${c.status==1}">暫停</c:if>
        </td>
        <td>
        <input type="button" value="啓用" class="btn_start" οnclick="startFee();" />
        <input type="button" value="修改" class="btn_modify" οnclick="location.href='fee_modi.html';" />
        <input type="button" value="刪除" class="btn_delete" οnclick="deleteFee();" />
        </td>
        </tr>
        </c:forEach>
        </table>
        <p>業務說明:<br />
                            1、創建資費時,狀態爲暫停,記載創建時間;<br />
                            2、暫停狀態下,可修改,可刪除;<br />
                            3、開通後,記載開通時間,且開通後不能修改、不能再停用、也不能刪除;<br />
                            4、業務賬號修改資費時,在下月底統一觸發,修改其關聯的資費ID(此觸發動作由程序處理)
        </p>
        </div>
        <!--分頁-->
        <div id="pages">
            <a href="#">上一頁</a>
        <a href="#" class="current_page">1</a>
        <a href="#">2</a>
        <a href="#">3</a>
        <a href="#">4</a>
        <a href="#">5</a>
        <a href="#">下一頁</a>
        </div>
        </form>
        </div>
        <!--主要區域結束-->
        <div id="footer">
        <p>[源自北美的技術,最優秀的師資,最真實的企業環境,最適用的實戰項目]</p>
        <p>版權所有(C)加拿大達內IT培訓集團公司</p>
        </div>
        </body>
        </html>

  6. 測試:

    • 此處NULL值沒有顯示爲0,故在SQL語句中加入IFNULL()函數:
      • IFNULL(base_duration,0) as baseDuration,
        IFNULL(base_cost,0) as baseCost,
        IFNULL(unit_cost,0) as unitCost,

    • 瀏覽器訪問http://localhost:8080/netctoss-trySSM/cost/find.do,瀏覽器顯示結果如下圖:

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章