ssm項目練習-電商平臺後臺管理系統_1

電商平臺後臺管理系統

1.需求與系統分析

畫出用例圖
在這裏插入圖片描述
根據需求分析,管理員擁有如下功能權限

  • 商品管理,包括添加商品、商品下架、修改商品、查詢商品
  • 商品類型管理,包括添加商品類型、修改商品類型
  • 訂單管理,包括創建訂單、查詢訂單、刪除訂單、查看訂單明細
  • 客戶管理,查詢客戶、禁用或啓用客戶

在這裏插入圖片描述

2.數據庫設計

(1)客戶信息表user_info,用於記錄前臺客戶基本信息。
在這裏插入圖片描述
(2)管理員信息表admin_info,用於記錄管理員基本信息。
在這裏插入圖片描述
(3)商品類型表type,用於記錄各種商品類型。
在這裏插入圖片描述
(4)商品信息表product_info,用於記錄商品信息。
在這裏插入圖片描述
在這裏插入圖片描述
(5)訂單信息表order_info,用於記錄訂單主要信息。
在這裏插入圖片描述
(6)訂單明細表order_detail,用於記錄訂單詳細信息。
在這裏插入圖片描述
在這裏插入圖片描述
(7)系統功能表functions,用於記錄系統功能信息。
在這裏插入圖片描述
(8)權限表powers,用於記錄管理員權限。
在這裏插入圖片描述

3.環境搭建與配置文件

Spring整合MyBatis配置相同,有一點不同,在修改pom.xml文件是多填了幾個依賴

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.5</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.5</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.9.5</version>
		</dependency>

web.xml的配置與那一章一樣
dispatcherServlet.xml與上一張相比,多了文件上傳的bean

<!-- 文件上傳 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 設置上傳文件的最大尺寸爲1MB -->
		<property name="maxUploadSize" value="1048576" />
		<!-- 字符編碼 -->
		<property name="defaultEncoding" value="UTF-8" />
	</bean>

編寫Spring配置文件與上一張一致,記得改一個配置的包名
在這裏插入圖片描述
db.properties與上一張一樣
創建目錄結構:
在這裏插入圖片描述
com.ecpbm.dao.provider包用於存放DynaSqlProvider類,也就是動態SQL那一章裏對應的mapper包。其他的包上一章有說明

4.創建實體類

實體類放com.ecpbm.pojo包下
UserInfo用於封裝客戶信息

public class UserInfo {
	private int id;
	private String userName;
	private String password;
	private String realName;
	private String sex;
	private String address;
	private String email;
	private String regDate;
	private int status;
	//這裏省略getter,setter方法
}

實體類AdminInfo用於封裝管理員信息

import java.util.List;

public class AdminInfo {
	private int id;
	private String name;
	private String pwd;
	// 關聯屬性
	private List<Functions> fs;
	//這裏省略getter,setter方法
}

實體類Functions用於封裝系統功能信息

import java.util.HashSet;
import java.util.Set;

public class Functions implements Comparable<Functions> {
	private int id;
	private String name;
	private int parentid;
	private boolean isleaf;
	//關聯屬性
	private Set ais = new HashSet();
	//這裏省略getter,setter方法
	//重寫compareTo(Functions arg0)方法,
	//該方法用於在排序時將兩個Functions對象的id進行比較
	//根據比較的結果是小於,等於或者大於而返回一個負數,零或者正數
	@Override
	public int compareTo(Functions arg0) {
		return ((Integer) this.getId()).compareTo((Integer) (arg0.getId()));
	}
}

實體類Powers用於封裝權限信息

public class Powers {
	private AdminInfo ai;
	private Functions f;
	//這裏省略getter,setter,toString方法
	}

實體類ProductInfo用於封裝商品信息

public class ProductInfo {
	// 商品基本信息(部分)
	private int id; // 商品編號
	private String code; // 商品編碼
	private String name; // 商品名稱
	// 關聯屬性
	private Type type;    // 商品類型
	private String brand; // 商品品牌
	private String pic; // 商品小圖
	private int num; // 商品數量
	private double price; // 商品價格
	private String intro; // 商品介紹
	private int status; // 商品狀態	

	private double priceFrom;
	private double priceTo;
	//這裏省略getter,setter方法
}

實體類Type用於封裝商品類型信息

public class Type {
	private int id; // 產品類型編號
	private String name; // 產品類型名稱
	//這裏省略getter,setter方法
}

實體類OrderInfo用於封裝訂單信息

public class OrderInfo {
	private Integer id;
	private int uid;
	private UserInfo ui;
	private String status;
	private String ordertime;
	private double orderprice;
	private String orderTimeFrom;
	private String orderTimeTo;
	//這裏省略getter,setter方法
}

實體類OrderDetail用於封裝訂單明細信息

public class OrderInfo {
	private Integer id;
	private int uid;
	private UserInfo ui;
	private String status;
	private String ordertime;
	private double orderprice;
	private String orderTimeFrom;
	private String orderTimeTo;
	//這裏省略getter,setter方法
}

輔助類Pager用於封裝分頁信息

public class Pager {
	private int curPage;// 待顯示頁
	private int perPageRows;// 每頁顯示的記錄數
	private int rowCount; // 記錄總數
	private int pageCount; // 總頁數
	// 根據rowCount和perPageRows計算總頁數
	public int getPageCount() {
		return (rowCount + perPageRows - 1) / perPageRows;
	}
	// 分頁顯示時,獲取當前頁的第一條記錄的索引
	public int getFirstLimitParam() {
		return (this.curPage - 1) * this.perPageRows;
	}
	//這裏省略getter,setter方法
}

輔助類SearchProductInfo用於封裝商品查詢條件

public class SearchProductInfo {
	// 產品基本信息(部分)
	private int id; // 產品編號
	private String code; // 產品編碼
	private String name; // 產品名稱
	private String brand; // 產品品牌
	private double priceFrom;
	private double priceTo;
	private int tid;
	//這裏省略getter,setter方法
}

會使用到Easy UI提供的Tree控件來顯示菜單,TreeNode輔助類用於封裝樹形控件的節點信息

import java.util.List;

public class TreeNode {
	private int id;  // 節點id
	private String text;  // 節點名稱
	private int fid;   // 父節點id
	private List<TreeNode> children; // 包含的子節點
	//這裏省略getter,setter方法
}

5.創建Dao接口及動態提供類

在Dao接口中,使用MyBatis註解完成數據表的操作
UserInfoDao

package com.ecpbm.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;

import com.ecpbm.dao.provider.UserInfoDynaSqlProvider;
import com.ecpbm.pojo.UserInfo;

public interface UserInfoDao {
	//獲取系統合法用戶,即數據表user_info中status字段爲1的用戶列表
	@Select("select * from user_info where status=1")
	public List<UserInfo> getValidUser();
	// 根據用戶id號獲取客戶對象
	@Select("select * from user_info where id=#{id}")
	public UserInfo getUserInfoById(int id);
	// 分頁獲取客戶信息
	@SelectProvider(type = UserInfoDynaSqlProvider.class, method = "selectWithParam")
	List<UserInfo> selectByPage(Map<String, Object> params);
	// 根據條件查詢客戶總數
	@SelectProvider(type = UserInfoDynaSqlProvider.class, method = "count")
	Integer count(Map<String, Object> params);
	// 更新客戶狀態
	@Update("update user_info set status=#{flag} where id in (${ids})")
	void updateState(@Param("ids") String ids, @Param("flag") int flag);
}

同時完成類中提到的動態提供類,寫在provider裏
UserInfoDynaSqlProvider

package com.ecpbm.dao.provider;

import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
import com.ecpbm.pojo.UserInfo;

public class UserInfoDynaSqlProvider {
	// 分頁動態查詢
	public String selectWithParam(Map<String, Object> params) {
		String sql = new SQL() {
			{
				SELECT("*");
				FROM("user_info");
				if (params.get("userInfo") != null) {
					UserInfo userInfo = (UserInfo) params.get("userInfo");
					if (userInfo.getUserName() != null && !userInfo.getUserName().equals("")) {
						WHERE("  userName LIKE CONCAT ('%',#{userInfo.userName},'%') ");
					}
				}
			}
		}.toString();
		if (params.get("pager") != null) {
			sql += " limit #{pager.firstLimitParam} , #{pager.perPageRows}  ";
		}
		return sql;
	}

	// 根據條件動態查詢總記錄數
	public String count(Map<String, Object> params) {
		return new SQL() {
			{
				SELECT("count(*)");
				FROM("user_info");
				if (params.get("userInfo") != null) {
					UserInfo userInfo = (UserInfo) params.get("userInfo");
					if (userInfo.getUserName() != null && !userInfo.getUserName().equals("")) {
						WHERE("  userName LIKE CONCAT ('%',#{userInfo.userName},'%') ");
					}
				}
			}
		}.toString();
	}

}

FunctionDao

package com.ecpbm.dao;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.ecpbm.pojo.Functions;
public interface FunctionDao {
	// 根據管理員id,獲取功能權限
	@Select("select * from functions where id in (select fid from powers where aid = #{aid} )")
	public List<Functions> selectByAdminId(Integer aid);
}

AdminInfoDao

package com.ecpbm.dao;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
import com.ecpbm.pojo.AdminInfo;

public interface AdminInfoDao {

	// 根據登錄名和密碼查詢管理員
	@Select("select * from admin_info where name = #{name} and pwd = #{pwd}")
	public AdminInfo selectByNameAndPwd(AdminInfo ai);

	// 根據管理員id獲取管理員對象及關聯的功能集合
	@Select("select * from admin_info where id = #{id}")
	@Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "name", property = "name"),
			@Result(column = "pwd", property = "pwd"),
			@Result(column = "id", property = "fs", many = @Many(select = "com.ecpbm.dao.FunctionDao.selectByAdminId", fetchType = FetchType.EAGER)) })
	AdminInfo selectById(Integer id);
}

TypeDao

package com.ecpbm.dao;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.ecpbm.pojo.Type;

public interface TypeDao {
	// 查詢所有商品類型
	@Select("select * from type")
	public List<Type> selectAll();

	// 根據類型編號查詢商品類型
	@Select("select * from type where id = #{id}")
	Type selectById(int id);
	
	// 添加商品類型
	@Insert("insert into type(name) values(#{name})")
	@Options(useGeneratedKeys = true, keyProperty = "id")
	public int add(Type type);
	
	// 更新商品類型
	@Update("update type set name = #{name} where  id = #{id}")
	public int update(Type type);	
}

ProductInfoDao

package com.ecpbm.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.FetchType;

import com.ecpbm.dao.provider.ProductInfoDynaSqlProvider;
import com.ecpbm.pojo.ProductInfo;

public interface ProductInfoDao {
	// 分頁獲取商品
	@Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "code", property = "code"),
			@Result(column = "name", property = "name"), @Result(column = "brand", property = "brand"),
			@Result(column = "pic", property = "pic"), @Result(column = "num", property = "num"),
			@Result(column = "price", property = "price"), @Result(column = "intro", property = "intro"),
			@Result(column = "status", property = "status"),
			@Result(column = "tid", property = "type", one = @One(select = "com.ecpbm.dao.TypeDao.selectById", fetchType = FetchType.EAGER)) })
	@SelectProvider(type = ProductInfoDynaSqlProvider.class, method = "selectWithParam")
	List<ProductInfo> selectByPage(Map<String, Object> params);

	// 根據條件查詢商品總數
	@SelectProvider(type = ProductInfoDynaSqlProvider.class, method = "count")
	Integer count(Map<String, Object> params);

	// 添加商品
	@Insert("insert into product_info(code,name,tid,brand,pic,num,price,intro,status) "
			+ "values(#{code},#{name},#{type.id},#{brand},#{pic},#{num},#{price},#{intro},#{status})")
	@Options(useGeneratedKeys = true, keyProperty = "id")
	void save(ProductInfo pi);

	// 修改商品
	@Update("update product_info set code=#{code},name=#{name},tid=#{type.id},"
			+ "brand=#{brand},pic=#{pic},num=#{num},price=#{price},intro=#{intro}," + "status=#{status} where id=#{id}")
	void edit(ProductInfo pi);

	// 更新商品狀態
	@Update("update product_info set status=#{flag} where id in (${ids})")
	void updateState(@Param("ids") String ids, @Param("flag") int flag);

	// 獲取在售商品列表
	@Select("select * from product_info where status=1")
	List<ProductInfo> getOnSaleProduct();

	// 根據產品id獲取商品對象
	@Select("select * from product_info where id=#{id}")
	ProductInfo getProductInfoById(int id);

}

ProductInfoDynaSqlProvider SQL提供類

package com.ecpbm.dao.provider;

import java.util.Map;
import org.apache.ibatis.jdbc.SQL;

import com.ecpbm.pojo.ProductInfo;

public class ProductInfoDynaSqlProvider {
	// 分頁動態查詢
	public String selectWithParam(Map<String, Object> params) {
		String sql = new SQL() {
			{
				SELECT("*");
				FROM("product_info");
				if (params.get("productInfo") != null) {
					ProductInfo productInfo = (ProductInfo) params.get("productInfo");
					if (productInfo.getCode() != null && !"".equals(productInfo.getCode())) {
						WHERE(" code = #{productInfo.code} ");
					}
					if (productInfo.getName() != null && !productInfo.getName().equals("")) {
						WHERE("  name LIKE CONCAT ('%',#{productInfo.name},'%') ");
					}
					if (productInfo.getBrand() != null && !productInfo.getBrand().equals("")) {
						WHERE("  brand LIKE CONCAT ('%',#{productInfo.brand},'%') ");
					}
					if (productInfo.getType() != null && productInfo.getType().getId() > 0) {
						WHERE(" tid = #{productInfo.type.id} ");
					}
					if (productInfo.getPriceFrom() > 0) {
						WHERE(" price > #{productInfo.priceFrom} ");
					}
					if (productInfo.getPriceTo() > 0) {
						WHERE(" price <= #{productInfo.priceTo} ");
					}
				}
			}
		}.toString();
		if (params.get("pager") != null) {
			sql += " limit #{pager.firstLimitParam} , #{pager.perPageRows}  ";
		}
		return sql;
	}

	// 根據條件動態查詢商品總記錄數
	public String count(Map<String, Object> params) {
		return new SQL() {
			{
				SELECT("count(*)");
				FROM("product_info");
				if (params.get("productInfo") != null) {
					ProductInfo productInfo = (ProductInfo) params.get("productInfo");
					if (productInfo.getCode() != null && !"".equals(productInfo.getCode())) {
						WHERE(" code = #{productInfo.code} ");
					}
					if (productInfo.getName() != null && !productInfo.getName().equals("")) {
						WHERE("  name LIKE CONCAT ('%',#{productInfo.name},'%') ");
					}
					if (productInfo.getBrand() != null && !productInfo.getBrand().equals("")) {
						WHERE("  brand LIKE CONCAT ('%',#{productInfo.brand},'%') ");
					}
					if (productInfo.getType() != null && productInfo.getType().getId() > 0) {
						WHERE(" tid = #{productInfo.type.id} ");
					}
					if (productInfo.getPriceFrom() > 0) {
						WHERE(" price > #{productInfo.priceFrom} ");
					}
					if (productInfo.getPriceTo() > 0) {
						WHERE(" price <= #{productInfo.priceTo} ");
					}
				}
			}
		}.toString();
	}

}

OrderInfo

package com.ecpbm.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.mapping.FetchType;

import com.ecpbm.dao.provider.OrderInfoDynaSqlProvider;
import com.ecpbm.pojo.OrderDetail;
import com.ecpbm.pojo.OrderInfo;

public interface OrderInfoDao {
	//分頁獲取訂單信息
	@Results({
			@Result(column = "uid", property = "ui", one = @One(select = "com.ecpbm.dao.UserInfoDao.getUserInfoById", fetchType = FetchType.EAGER)) })
	@SelectProvider(type = OrderInfoDynaSqlProvider.class, method = "selectWithParam")
	List<OrderInfo> selectByPage(Map<String, Object> params);

	// 根據條件查詢訂單總數
	@SelectProvider(type = OrderInfoDynaSqlProvider.class, method = "count")
	Integer count(Map<String, Object> params);

	// 保存訂單主表
	@Insert("insert into order_info(uid,status,ordertime,orderprice) "
			+ "values(#{uid},#{status},#{ordertime},#{orderprice})")
	@Options(useGeneratedKeys = true, keyProperty = "id")
	int saveOrderInfo(OrderInfo oi);

	// 保存訂單明細
	@Insert("insert into order_detail(oid,pid,num) values(#{oid},#{pid},#{num})")
	@Options(useGeneratedKeys = true, keyProperty = "id")
	int saveOrderDetail(OrderDetail od);

	// 根據訂單編號獲取訂單對象
	@Results({
			@Result(column = "uid", property = "ui", one = @One(select = "com.ecpbm.dao.UserInfoDao.getUserInfoById", fetchType = FetchType.EAGER)) })
	@Select("select * from order_info where id = #{id}")
	public OrderInfo getOrderInfoById(int id);

	// 根據訂單編號獲取訂單明細
	@Results({
			@Result(column = "pid", property = "pi", one = @One(select = "com.ecpbm.dao.ProductInfoDao.getProductInfoById", fetchType = FetchType.EAGER)) })
	@Select("select * from order_detail where oid = #{oid}")
	public List<OrderDetail> getOrderDetailByOid(int oid);

	// 刪除訂單主表記錄
	@Delete("delete from order_info where id=#{id}")
	public int deleteOrderInfo(int id);

	// 根據訂單編號,刪除訂單明細記錄
	@Delete("delete from order_detail where oid=#{id}")
	public int deleteOrderDetail(int id);

}

OrderInfoDynaSqlProvider SQL提供類

package com.ecpbm.dao.provider;

import java.util.Map;

import org.apache.ibatis.jdbc.SQL;

import com.ecpbm.pojo.OrderInfo;

public class OrderInfoDynaSqlProvider {
	// 分頁動態查詢
	public String selectWithParam(Map<String, Object> params) {
		String sql = new SQL() {
			{
				SELECT("*");
				FROM("order_info");
				if (params.get("orderInfo") != null) {
					OrderInfo orderInfo = (OrderInfo) params.get("orderInfo");
					if (orderInfo.getId() != null && orderInfo.getId() > 0) {
						WHERE(" id = #{orderInfo.id} ");
					} else {
						if (orderInfo.getStatus() != null && !"請選擇".equals(orderInfo.getStatus())) {
							WHERE(" status = #{orderInfo.status} ");
						}
						if (orderInfo.getOrderTimeFrom() != null && !"".equals(orderInfo.getOrderTimeFrom())) {
							WHERE(" ordertime >= #{orderInfo.orderTimeFrom} ");
						}
						if (orderInfo.getOrderTimeTo() != null && !"".equals(orderInfo.getOrderTimeTo())) {
							WHERE(" ordertime < #{orderInfo.orderTimeTo} ");
						}
						if (orderInfo.getUid() > 0) {
							WHERE(" uid = #{orderInfo.uid} ");
						}
					}
				}
			}
		}.toString();
		if (params.get("pager") != null) {
			sql += " limit #{pager.firstLimitParam} , #{pager.perPageRows}  ";
		}
		return sql;
	}

	// 根據條件動態查詢訂單總記錄數
	public String count(Map<String, Object> params) {
		return new SQL() {
			{
				SELECT("count(*)");
				FROM("order_info");
				if (params.get("orderInfo") != null) {
					OrderInfo orderInfo = (OrderInfo) params.get("orderInfo");
					if (orderInfo.getId() != null && orderInfo.getId() > 0) {
						WHERE(" id = #{orderInfo.id} ");
					} else {
						if (orderInfo.getStatus() != null && !"請選擇".equals(orderInfo.getStatus())) {
							WHERE(" status = #{orderInfo.status} ");
						}
						if (orderInfo.getOrderTimeFrom() != null && !"".equals(orderInfo.getOrderTimeFrom())) {
							WHERE(" ordertime >= #{orderInfo.orderTimeFrom} ");
						}
						if (orderInfo.getOrderTimeTo() != null && !"".equals(orderInfo.getOrderTimeTo())) {
							WHERE(" ordertime < #{orderInfo.orderTimeTo} ");
						}
						if (orderInfo.getUid() > 0) {
							WHERE(" uid = #{orderInfo.uid} ");
						}
					}
				}
			}
		}.toString();
	}
}

6.創建Service接口及實現類

UserInfoService

package com.ecpbm.service;

import java.util.List;
import java.util.Map;

import com.ecpbm.pojo.Pager;
import com.ecpbm.pojo.UserInfo;

public interface UserInfoService {
	//獲取合法客戶
	public List<UserInfo> getValidUser();

	// 根據用戶編號查詢客戶
	public UserInfo getUserInfoById(int id);

	// 分頁顯示客戶
	List<UserInfo> findUserInfo(UserInfo userInfo, Pager pager);

	// 客戶計數
	Integer count(Map<String, Object> params);
	
	// 修改指定編號的客戶狀態
	void modifyStatus(String ids, int flag);
}

UserInfoServiceImpl

package com.ecpbm.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ecpbm.dao.UserInfoDao;
import com.ecpbm.pojo.Pager;
import com.ecpbm.pojo.UserInfo;
import com.ecpbm.service.UserInfoService;

@Service("userInfoService")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class UserInfoServiceImpl implements UserInfoService {

	@Autowired
	UserInfoDao userInfoDao;

	@Override
	public List<UserInfo> getValidUser() {
		return userInfoDao.getValidUser();
	}

	@Override
	public UserInfo getUserInfoById(int id) {
		return userInfoDao.getUserInfoById(id);
	}

	@Override
	public List<UserInfo> findUserInfo(UserInfo userInfo, Pager pager) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("userInfo", userInfo);
		int recordCount = userInfoDao.count(params);
		pager.setRowCount(recordCount);
		if (recordCount > 0) {
			params.put("pager", pager);
		}
		return userInfoDao.selectByPage(params);
	}

	@Override
	public Integer count(Map<String, Object> params) {
		return userInfoDao.count(params);
	}

	@Override
	public void modifyStatus(String ids, int flag) {
		userInfoDao.updateState(ids, flag);
	}

}

AdminInfoService

package com.ecpbm.service;

import com.ecpbm.pojo.AdminInfo;

public interface AdminInfoService {
	// 登錄驗證
	public AdminInfo login(AdminInfo ai);

	// 根據管理員編號獲取管理員對象及關聯的功能權限
	public AdminInfo getAdminInfoAndFunctions(Integer id);
}

AdminInfoServiceImpl

package com.ecpbm.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ecpbm.dao.AdminInfoDao;
import com.ecpbm.pojo.AdminInfo;
import com.ecpbm.service.AdminInfoService;

@Service("adminInfoService")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class AdminInfoServiceImpl implements AdminInfoService {

	@Autowired
	private AdminInfoDao adminInfoDao;

	@Override
	public AdminInfo login(AdminInfo ai) {
		return adminInfoDao.selectByNameAndPwd(ai);
	}

	@Override
	public AdminInfo getAdminInfoAndFunctions(Integer id) {
		return adminInfoDao.selectById(id);
	}

}

TypeService

package com.ecpbm.service;

import java.util.List;

import com.ecpbm.pojo.Type;

public interface TypeService {
	// 獲取所示商品類型
	public List<Type> getAll();
	
	// 添加商品類型
	public int addType(Type type); 
	
	// 更新商品類型
	public void updateType(Type type);
}

TypeServiceImpl

package com.ecpbm.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.ecpbm.dao.TypeDao;
import com.ecpbm.pojo.Type;
import com.ecpbm.service.TypeService;

@Service("typeService")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class TypeServiceImpl implements TypeService {

	@Autowired
	private TypeDao typeDao;

	@Override
	public List<Type> getAll() {
		return typeDao.selectAll();
	}

	@Override
	public int addType(Type type) {
		return typeDao.add(type);
	}

	@Override
	public void updateType(Type type) {
		typeDao.update(type);
	}

}

ProductInfoService

package com.ecpbm.service;

import java.util.List;
import java.util.Map;

import com.ecpbm.pojo.Pager;
import com.ecpbm.pojo.ProductInfo;

public interface ProductInfoService {
	// 分頁顯示商品
	List<ProductInfo> findProductInfo(ProductInfo productInfo, Pager pager);

	// 商品計數
	Integer count(Map<String, Object> params);

	// 添加商品
	public void addProductInfo(ProductInfo pi);
	
	// 修改商品
	public void modifyProductInfo(ProductInfo pi);
	
	// 更新商品狀態
	void modifyStatus(String ids, int flag);

	// 獲取在售商品列表
	List<ProductInfo> getOnSaleProduct(); 
	
	// 根據產品id獲取產品對象
	ProductInfo getProductInfoById(int id);
}

ProductInfoServiceImpl

package com.ecpbm.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ecpbm.dao.ProductInfoDao;
import com.ecpbm.pojo.Pager;
import com.ecpbm.pojo.ProductInfo;
import com.ecpbm.service.ProductInfoService;

@Service("productInfoService")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class ProductInfoServiceImpl implements ProductInfoService {

	@Autowired
	ProductInfoDao productInfoDao;

	@Override
	public List<ProductInfo> findProductInfo(ProductInfo productInfo, Pager pager) {
		// 創建對象params
		Map<String, Object> params = new HashMap<String, Object>();
		// 將封裝有查詢條件的productInfo對象放入params
		params.put("productInfo", productInfo);
		// 根據條件計算商品總數
		int recordCount = productInfoDao.count(params);
		// 給pager對象設置rowCount屬性值(記錄總數)
		pager.setRowCount(recordCount);
		if (recordCount > 0) {
			// 將page對象放入params
			params.put("pager", pager);
		}
		// 分頁獲取商品信息
		return productInfoDao.selectByPage(params);
	}

	@Override
	public Integer count(Map<String, Object> params) {
		return productInfoDao.count(params);
	}

	@Override
	public void addProductInfo(ProductInfo pi) {
		productInfoDao.save(pi);
	}

	@Override
	public void modifyProductInfo(ProductInfo pi) {
		productInfoDao.edit(pi);
	}

	@Override
	public void modifyStatus(String ids, int flag) {
		productInfoDao.updateState(ids, flag);
	}

	@Override
	public List<ProductInfo> getOnSaleProduct() {
		return productInfoDao.getOnSaleProduct();
	}

	@Override
	public ProductInfo getProductInfoById(int id) {
		return productInfoDao.getProductInfoById(id);
	}
}

OrderInfoService

package com.ecpbm.service;

import java.util.List;
import java.util.Map;
import com.ecpbm.pojo.*;

public interface OrderInfoService {
	// 分頁顯示訂單
	List<OrderInfo> findOrderInfo(OrderInfo orderInfo, Pager pager);

	// 訂單計數
	Integer count(Map<String, Object> params);

	// 添加訂單主表
	public int addOrderInfo(OrderInfo oi);

	// 添加訂單明細
	public int addOrderDetail(OrderDetail od);

	// 根據訂單編號獲取訂單信息
	public OrderInfo getOrderInfoById(int id);

	// 更加訂單編號獲取訂單明細信息
	public List<OrderDetail> getOrderDetailByOid(int oid);

	// 刪除訂單
	public int deleteOrder(int id);
}

OrderInfoServiceImpl

package com.ecpbm.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.ecpbm.dao.OrderInfoDao;
import com.ecpbm.pojo.OrderDetail;
import com.ecpbm.pojo.OrderInfo;
import com.ecpbm.pojo.Pager;
import com.ecpbm.service.OrderInfoService;

@Service("orderInfoService")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class OrderInfoServiceImpl implements OrderInfoService {
	@Autowired
	OrderInfoDao orderInfoDao;

	@Override
	public List<OrderInfo> findOrderInfo(OrderInfo orderInfo, Pager pager) {
		Map<String, Object> params = new HashMap<String, Object>();
		params.put("orderInfo", orderInfo);
		int recordCount = orderInfoDao.count(params);
		pager.setRowCount(recordCount);
		if (recordCount > 0) {
			params.put("pager", pager);
		}
		return orderInfoDao.selectByPage(params);
	}

	@Override
	public Integer count(Map<String, Object> params) {
		return orderInfoDao.count(params);
	}

	@Override
	public int addOrderInfo(OrderInfo oi) {
		return orderInfoDao.saveOrderInfo(oi);
	}

	@Override
	public int addOrderDetail(OrderDetail od) {
		return orderInfoDao.saveOrderDetail(od);
	}

	@Override
	public OrderInfo getOrderInfoById(int id) {
		return orderInfoDao.getOrderInfoById(id);
	}

	@Override
	public List<OrderDetail> getOrderDetailByOid(int oid) {
		return orderInfoDao.getOrderDetailByOid(oid);
	}

	@Override
	public int deleteOrder(int id) {
		int result = 1;
		try {
			orderInfoDao.deleteOrderDetail(id);
			orderInfoDao.deleteOrderInfo(id);
		} catch (Exception e) {
			result = 0;
		}
		return result;
	}
}

這都兩萬七千字了,後面的換下一張吧,我看了下,這個EasyUi還是有必要多花點篇幅說明下。

7.後臺登陸與管理首頁面

8.商品管理

9.訂單管理

10.客戶管理

用到的工具

ProcessOn:畫圖
SQLyog:圖形化管理MYSQL數據庫的工具
eclipse

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章