電商平臺後臺管理系統
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