SSH實現進銷存(ERP)專案之訂單管理模組解析(附原始碼地址)
專案清單:
1,struts2、hibernate、spring
2,前後臺傳值使用json
3,資料庫使用了Oracle
4,對員工表及採購單表採用了後端分頁
5,使用了時間控制元件
專案結構,MVC模式,比較常見的專案結構:
程式碼較多,把關鍵的部分介紹一下,對於採購單,他的查詢及顯示流程。
這裡貼出BuyAction.java中的這部分程式碼:
/**
* @return
* 查詢顯示列表
*/
public String findAll() {
int count = this.services.findCountById(buyId,username); //根據訂單編號,採購員查詢採購單數量
List<Buy> list = this.services.findById(buyId,username, currentPage, pageSize);//查詢,列表顯示所有采購單資訊
jsonA = new JSONArray();
JSONObject jsonObject = new JSONObject();
jsonObject.put("count", count);//這裡json將訂單數量傳遞前臺
jsonA.add(jsonObject);
for (int i = 0; i < list.size(); i++) {
Buy pojo = list.get(i);
JSONObject jsonO = new JSONObject();
jsonO.put("buyId", pojo.getBuyId());
jsonO.put("userid",pojo.getUserinfo().getUserName());
jsonO.put("buyDate",DataConverter.dataToString(pojo.getBuyDate(),"yyyy-MM-dd"));
jsonA.add(jsonO);
}
return "succ";
}
首先查詢採購單的數量,findCountById(),這步為分頁做準備。
接著開始查詢方法,傳入的引數有:
buyId-----用來根據id查詢
username------根據採購人查詢
currentPage, pageSize------分頁使用,當前頁和頁數
那麼findById()這個方法具體如何實現?
/* (non-Javadoc)
* @see org.erp.dao.BuyDAO#findById(Integer, int, int)
* 根據採購單編號查詢,輸入內容為空時查詢所有采購單列表顯示
* 有輸入編號時按編號查詢,也進行了分頁
*/
@Override
public List<Buy> findById(Integer bId,String username, int currentPage, int pageSize) {
List<Buy> list = null;
String hql = null;
if(bId==null||bId==0){
hql = "from Buy b where isDelete=1 and b.userinfo.userName like '%" + username + "%'";
}
else{
hql = "from Buy b where b.buyId='"+bId+"' and isDelete=1 and b.userinfo.userName like '%" + username + "%'";
}
try {
Query query = this.sessionFactoy.getCurrentSession().createQuery(
hql);
query.setFirstResult((currentPage - 1) * pageSize);
query.setMaxResults(pageSize);
list = query.list();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
使用hql語句前進行了判斷,首先看使用者是否輸入了編號和名字,輸入就按編號,名字或者編號和名字一起查詢,如果沒有,就按編號全部查出來,用於展示。
後臺資料通過action傳送到前臺,那麼jsp如何接收和顯示?
<%@page contentType="text/html; charset=utf-8" %>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="<%=path %>/js/jquery-1.7.2.js"></script>
<link type="text/css" href="<%=path %>/css/css.css" rel="stylesheet"/>
<link rel="stylesheet" href="<%=path %>/css/pintuer.css">
<link rel="stylesheet" href="<%=path %>/css/admin.css">
</head>
<body>
<span>採購管理</span>
<center>
<form action="" method="post" name="form1">
編號:<input type="text" name="bid" id="bid" class="input" style="width:250px; line-height:17px;display:inline-block" placeholder="請輸入搜尋關鍵字">
採購員:<input type="text" name="username" id="username" class="input" style="width:250px; line-height:17px;display:inline-block" placeholder="請輸入搜尋關鍵字">
<input type="button" value="查詢" onclick="query(1)" class="button border-main icon-search">
<a class="button border-main icon-plus-square-o" onclick="goIns()">新增</a>
</form>
<hr/>
<div class="table_con"><div id="showTable"></div></div>
<hr/>
<span id="page_message"></span>
<input class='button border-main' type="button" value="首頁" id="first" onclick="query(5)">
<input class='button border-main' type="button" value="上一頁" id="up" onclick="query(2)">
<input class='button border-main' type="button" value="下一頁" id="end" onclick="query(3)">
<input class='button border-main' type="button" value="尾頁" id="down" onclick="query(4)">
</center>
</body>
<script type="text/javascript">
var bid = "";//查詢條件
var username = "";//查詢條件
var count = 0;//總共有多少筆資料
var page_count = 0;//總共多少頁
var pagesize = 5;//一頁顯示多少比
var pagecur = 1;//當前第幾頁
query(1);
/*
查詢
*/
function query(a) {
bid = form1.bid.value;
username = form1.username.value;
if(a==1){
pagecur = 1;
}else if(a==2){//查詢上一頁
pagecur = pagecur-1;
}else if(a==3){//查詢下一頁
pagecur = pagecur+1;
}else if(a==4){//最後一頁
pagecur = page_count;
}else if(a==5){//首頁
pagecur = 1;
}
$(document).ready(function (){
$.post("<%=path%>/buy_findAll",{buyId:bid,username:username,currentPage:pagecur,pageSize:pagesize},
function(data){//Servlet執行完之後執行方法,data表示的servlet返回資料內容
var object = eval(data);//將字串轉換成json型別
var showT = "<table class='table table-hover text-center'> <tr> <th width='15%'>採購單編號</th> <th width='15%'>採購員</th> <th width='30%'>採購時間</th> <th width='40%'>操作</th> </tr>";
for(var i = 1;i<object.length;i++){
var item = object[i];
showT = showT+"<tr class='table table-hover text-center'><td width='10%'>"+item.buyId+"</td><td width='10%'>"+item.userid+"</td><td width='30%'>"+item.buyDate+
"</td><td width='50%'><input class='button border-main' type='button' value='修改' onclick='goUpd(" + item.buyId + ")'><input class='button border-red' type='button' value='刪除' onclick='goDel("
+ item.buyId + ")'><input class='button border-main' type='button' value='檢視採購明細' onclick='showDetail(" + item.buyId + ")'></td></tr>";
}
showT = showT + "</table>";
$("#showTable").html(showT);
count=object[0].count;
calc();//計算總頁數,控制按鈕是否可用
});
});
}
/*
按鈕控制
*/
function calc(){
if(count%pagesize==0){
page_count = count/pagesize;
}else{
var v = count%pagesize;
page_count = (count-v)/pagesize + 1;
}
if(pagecur == 1&&page_count!=1){
document.getElementById("first").disabled = true;//按鈕不可用
document.getElementById("up").disabled = true;
document.getElementById("end").disabled = false;
document.getElementById("down").disabled = false;
}else if(pagecur == page_count&&page_count!=1){
document.getElementById("first").disabled = false;
document.getElementById("up").disabled = false;
document.getElementById("end").disabled = true;
document.getElementById("down").disabled = true;
}else if(page_count==1){
document.getElementById("first").disabled = true;
document.getElementById("up").disabled = true;
document.getElementById("end").disabled = true;
document.getElementById("down").disabled = true;
}else if(pagecur<page_count&&pagecur>1){
document.getElementById("first").disabled = false;
document.getElementById("up").disabled = false;
document.getElementById("end").disabled = false;
document.getElementById("down").disabled = false;
}
document.getElementById("page_message").innerHTML="<font color='blue'>當前第"+pagecur+"頁 總共"+count+"筆,共"+page_count+"頁</font>";
}
/*
新增
*/
function goIns(){
var width = window.screen.width ;
var height = window.screen.height ;
window.open("add.jsp","新增採購單",'height=400,width=600,top='+(height-450)/2+',left='+(width-300)/2+',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
/*
修改
*/
function goUpd(id_key){
var width = window.screen.width ;
var height = window.screen.height ;
window.open("<%=path%>/buy_findById?bid="+id_key,"修改採購單",'height=400,width=600,top='+(height-450)/2+',left='+(width-300)/2+',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
/* 顯示採購明細 */
function showDetail(id_key){
var width = window.screen.width ;
var height = window.screen.height ;
window.open("<%=path%>/jsp/buydetail/query.jsp?buyId="+id_key,"採購單明細",'height=400,width=600,top='+(height-450)/2+',left='+(width-300)/2+',toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no');
}
/*
刪除
*/
function goDel(id_key){
if(confirm("確認刪除?")){
$(document).ready(function (){
$.post("<%=path%>/buy_doDel",{bid:id_key},function(data){
if(data.indexOf("true")!=-1){
alert("刪除成功");
query(0);
}else{
alert("刪除失敗");
}
});
});
}
}
</script>
</html>
這個就是基本的流程了,實現的效果圖:
其他大體相同,只是對於銷售明細,我們涉及到了職工表,商品表,商品明細表,以及需要自動計算出採購商品的價格,這個如何實現呢?
方法有很多,但使用檢視對映過來,操作檢視貌似簡單一些
建立檢視程式碼:
--檢視:採購明細單資訊
create or replace view detail_buy_view as
select bd.buy_detail_id,--明細單id
bd.buy_id,--訂單id
pro.pro_id,--商品id
pro.pro_name,--商品名
bd.buy_num,--購買數量
bd.buy_price,--購買單價
b.total_price,--該商品總價
bd.is_delete--是否刪除了
from buy_detail bd,pro,
(select buy_detail_id,sum(buy_num*buy_price) total_price --這裡計算商品總價
from buy_detail group by buy_detail_id) b
where
bd.buy_detail_id=b.buy_detail_id and bd.pro_id=pro.pro_id and bd.is_delete=1 and pro.is_delete=1;
建立檢視後,逆向對映到工程中,會有一個XML對映檔案,兩個POJO類(因為檢視沒有主鍵),對映之後,對檢視的操作基本和表類似,檢視僅用來展示資料。
時間選擇器使用了datePicker,效果如下:
實現方法,匯入時間選擇器控制元件所需的js檔案,程式碼中這樣寫:
採購日期:
<input type="text" name="buyDate" class="input" onclick="javascript:WdatePicker()"/>
最後附上專案地址:
https://github.com/guodalin8/SSHERP
相關文章
- Myth原始碼解析系列之七- 訂單下單流程原始碼解析(參與者)原始碼
- Myth原始碼解析系列之六- 訂單下單流程原始碼解析(發起者)原始碼
- ssh+mysql實現的Java web線上訂電影票系統專案原始碼附帶視訊指導教程MySqlJavaWeb原始碼
- erp 專案訂單重構--修改訂單狀態部分
- 基於Java的SSH的超市進銷存管理系統(原始碼+資料庫+論文)Java原始碼資料庫
- 菜鳥學SSH(一)——Struts實現簡單登入(附原始碼)原始碼
- 超市管理系統原始碼 超市進銷存管理系統原始碼 (CS架構)原始碼架構
- 進銷存軟體|雲ERP倉庫管理系統軟體原始碼開源可掃碼原始碼
- java 進銷存 銷售報表 庫存管理 商戶管理 springmvc SSM crm 專案JavaSpringMVCSSM
- 專案管理之——Git SSH配置專案管理Git
- ERP進銷存原始碼帶手機版APP免費授權原始碼APP
- Spark原始碼解析之Storage模組Spark原始碼
- STC訂單專案風險管理(轉)
- Java SSM 商戶 管理系統 客戶管理 庫存管理 銷售報表 專案原始碼JavaSSM原始碼
- 進銷存軟體ERP管理系統開發搭建
- Maven 搭建spring boot多模組專案(附原始碼)MavenSpring Boot原始碼
- delphi成功進銷存 原始碼500元原始碼
- java工程管理系統原始碼 工程專案各模組及其功能點清單Java原始碼
- STC訂單的多專案管理(轉)專案管理
- 探索 vue-spa 全家桶專案,解析配置,目錄結構,路由以及狀態管理的實現,附原始碼Vue路由原始碼
- okhttp 原始碼解析 - 網路協議的實現 - HTTP 之 cookie 管理HTTP原始碼協議Cookie
- 專案管理-原始碼管理薦專案管理原始碼
- 9.Flink實時專案之訂單寬表
- ERP專案管理實戰談(轉)專案管理
- ERP實施的專案管理(轉)專案管理
- 傢俱ERP-進銷存軟體
- tcc分散式事務框架原始碼解析系列(四)之專案實戰分散式框架原始碼
- tcc分散式事務框架原始碼解析系列(五)之專案實戰分散式框架原始碼
- gulp原始碼解析之任務管理原始碼
- Android 開源專案原始碼解析 -->PhotoView 原始碼解析(七)Android原始碼View
- 中小企業如何有效管理進銷存?ERP系統有何作用?
- java crm 進銷存 模組設計方案Java
- 「從零單排canal 07」 parser模組原始碼解析原始碼
- 「從零單排canal 05」 server模組原始碼解析Server原始碼
- ERP專案之實施計劃
- 進銷存管理系統 官方
- ERP實施的專案管理(上)(轉)專案管理
- ERP實施的專案管理(下)(轉)專案管理