<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.business</groupId> <artifactId>SpringBootMyBusiness</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <!-- 声明项目配置依赖编码格式为 utf-8 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <fastjson.version>1.2.24</fastjson.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 添加MySQL依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> <version>8.0.13</version><!--$NO-MVN-MAN-VER$ --> </dependency> <!-- MyBatis-Spring,Spring Boot应用整合MyBatis框架的核心依赖配置 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <!-- 由于commons-fileupload组件不属于Spring Boot,所以需要加上版本 --> <version>1.3.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
server.servlet.context-path=/eBusiness spring.datasource.url=jdbc:mysql://localhost:3306/springbootjpa?serverTimezone=UTC&autoReconnect=true spring.datasource.username=root spring.datasource.password=admin spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.database=MYSQL spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jackson.serialization.indent-output=true mybatis.type-aliases-package=com.ch.ebusiness.entity mybatis.mapperLocations=classpath:mappers/*.xml logging.level.com.ch.ebusiness.repository=debug spring.thymeleaf.cache=false spring.servlet.multipart.max-file-size=50MB spring.servlet.multipart.max-request-size=500MB
package com.ch.ebusiness.entity; public class AUser { private String aname; private String apwd; public String getAname() { return aname; } public void setAname(String aname) { this.aname = aname; } public String getApwd() { return apwd; } public void setApwd(String apwd) { this.apwd = apwd; } }
package com.ch.ebusiness.entity; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import org.hibernate.validator.constraints.Length; public class BUser { private Integer id; @NotBlank(message = "邮箱必须输入!") @Email(message = "邮箱格式不正确!") private String bemail; @NotBlank(message = "密码必须输入!") @Length(min = 6, max = 20, message = "密码长度在6到20之间!") private String bpwd; private String rebpwd; private String code; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getBemail() { return bemail; } public void setBemail(String bemail) { this.bemail = bemail; } public String getBpwd() { return bpwd; } public void setBpwd(String bpwd) { this.bpwd = bpwd; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getRebpwd() { return rebpwd; } public void setRebpwd(String rebpwd) { this.rebpwd = rebpwd; } }
package com.ch.ebusiness.entity; import org.springframework.web.multipart.MultipartFile; public class Goods { private int id; private String gname; private double goprice; private double grprice; private int gstore; private String gpicture; private MultipartFile fileName; private int goodstype_id; private String typename; private int buyNumber;// 加入购物车使用 private int isAdvertisement; private int isRecommend; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getGname() { return gname; } public void setGname(String gname) { this.gname = gname; } public double getGoprice() { return goprice; } public void setGoprice(double goprice) { this.goprice = goprice; } public double getGrprice() { return grprice; } public void setGrprice(double grprice) { this.grprice = grprice; } public int getGstore() { return gstore; } public void setGstore(int gstore) { this.gstore = gstore; } public String getGpicture() { return gpicture; } public void setGpicture(String gpicture) { this.gpicture = gpicture; } public int getGoodstype_id() { return goodstype_id; } public void setGoodstype_id(int goodstype_id) { this.goodstype_id = goodstype_id; } public String getTypename() { return typename; } public void setTypename(String typename) { this.typename = typename; } public int getBuyNumber() { return buyNumber; } public void setBuyNumber(int buyNumber) { this.buyNumber = buyNumber; } public int getIsAdvertisement() { return isAdvertisement; } public void setIsAdvertisement(int isAdvertisement) { this.isAdvertisement = isAdvertisement; } public int getIsRecommend() { return isRecommend; } public void setIsRecommend(int isRecommend) { this.isRecommend = isRecommend; } public MultipartFile getFileName() { return fileName; } public void setFileName(MultipartFile fileName) { this.fileName = fileName; } }
package com.ch.ebusiness.entity; public class GoodsType { private int id; private String typename; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTypename() { return typename; } public void setTypename(String typename) { this.typename = typename; } }
package com.ch.ebusiness.entity; public class Order { private Integer id; private Integer busertable_id; private Double amount; private Integer status; private String orderdate; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getBusertable_id() { return busertable_id; } public void setBusertable_id(Integer busertable_id) { this.busertable_id = busertable_id; } public Double getAmount() { return amount; } public void setAmount(Double amount) { this.amount = amount; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public String getOrderdate() { return orderdate; } public void setOrderdate(String orderdate) { this.orderdate = orderdate; } }
package com.ch.ebusiness.repository.admin; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ch.ebusiness.entity.AUser; @Mapper public interface AdminRepository { List<AUser> login(AUser aUser); }
package com.ch.ebusiness.repository.admin; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.GoodsType; @Mapper public interface GoodsRepository { int addGoods(Goods goods); int updateGoods(Goods goods); Goods selectAGoods(Integer id); int selectAllGoods(); List<GoodsType> selectAllGoodsType(); List<Goods> selectAllGoodsByPage(@Param("startIndex") int startIndex, @Param("perPageSize") int perPageSize); int deleteAGoods(Integer id); List<Map<String, Object>> selectFocusGoods(Integer id); List<Map<String, Object>> selectCartGoods(Integer id); List<Map<String, Object>> selectOrderGoods(Integer id); }
package com.ch.ebusiness.repository.admin; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.GoodsType; @Mapper public interface TypeRepository { int selectAll(); List<GoodsType> selectAllTypeByPage(@Param("startIndex") int startIndex, @Param("perPageSize") int perPageSize); int deleteType(int id); List<Goods> selectGoods(int goodstype_id); int addType(GoodsType goodsType); }
package com.ch.ebusiness.repository.admin; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ch.ebusiness.entity.BUser; @Mapper public interface UserAndOrderAndOutRepository { List<BUser> selectUserByPage(@Param("startIndex") int startIndex, @Param("perPageSize") int perPageSize); int selectAllUser(); List<Map<String, Object>> selectCartUser(int id); List<Map<String, Object>> selectOrderUser(int id); int deleteUser(int id); int selectAllOrder(); List<Map<String, Object>> selectOrderByPage(@Param("startIndex") int startIndex, @Param("perPageSize") int perPageSize); }
package com.ch.ebusiness.repository.before; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ch.ebusiness.entity.Order; @Mapper public interface CartRepository { public List<Map<String, Object>> isFocus(@Param("uid") Integer uid, @Param("gid") Integer gid); public int focus(@Param("uid") Integer uid, @Param("gid") Integer gid); public int putCart(@Param("uid") Integer uid, @Param("gid") Integer gid, @Param("bnum") Integer bnum); public List<Map<String, Object>> isPutCart(@Param("uid") Integer uid, @Param("gid") Integer gid); public int updateCart(@Param("uid") Integer uid, @Param("gid") Integer gid, @Param("bnum") Integer bnum); public List<Map<String, Object>> selectCart(Integer uid); public int deleteAgoods(@Param("uid") Integer uid, @Param("gid") Integer gid); public int clear(Integer uid); public int addOrder(Order order); public int addOrderDetail(@Param("ordersn") Integer ordersn, @Param("uid") Integer uid); public List<Map<String, Object>> selectGoodsShop(Integer uid); public int updateStore(Map<String, Object> map); public int pay(Integer ordersn); public List<Map<String, Object>> myFocus(Integer uid); public List<Map<String, Object>> myOrder(Integer uid); public List<Map<String, Object>> orderDetail(Integer id); public int updateUpwd(@Param("uid") Integer uid, @Param("bpwd") String bpwd); }
package com.ch.ebusiness.repository.before; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.GoodsType; @Mapper public interface IndexRepository { public List<Goods> selectAdvertisementGoods(); public List<GoodsType> selectGoodsType(); public List<Goods> selectRecommendGoods(Integer tid); public List<Goods> selectLastedGoods(Integer tid); public Goods selectAGoods(Integer id); public List<Goods> search(String mykey); }
package com.ch.ebusiness.repository.before; import java.util.List; import org.apache.ibatis.annotations.Mapper; import com.ch.ebusiness.entity.BUser; @Mapper public interface UserRepository { public List<BUser> isUse(BUser bUser); public int register(BUser bUser); public List<BUser> login(BUser bUser); }
package com.ch.ebusiness.service.admin; import javax.servlet.http.HttpSession; import org.springframework.ui.Model; import com.ch.ebusiness.entity.AUser; public interface AdminService { public String login(AUser aUser, HttpSession session, Model model); }
package com.ch.ebusiness.service.admin; import java.util.List; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import com.ch.ebusiness.entity.AUser; import com.ch.ebusiness.repository.admin.AdminRepository; @Service public class AdminServiceImpl implements AdminService { @Autowired private AdminRepository adminRepository; @Override public String login(AUser aUser, HttpSession session, Model model) { List<AUser> list = adminRepository.login(aUser); if (list.size() > 0) {// 登录成功 session.setAttribute("auser", aUser); return "forward:/goods/selectAllGoodsByPage?currentPage=1&act=select"; } else {// 登录失败 model.addAttribute("errorMessage", "用户名或密码错误!"); return "admin/login"; } } }
package com.ch.ebusiness.service.admin; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springframework.ui.Model; import com.ch.ebusiness.entity.Goods; public interface GoodsService { public String selectAllGoodsByPage(Model model, int currentPage, String act); public String addGoods(Goods goods, HttpServletRequest request, String act) throws IllegalStateException, IOException; public String toAddGoods(Goods goods, Model model); public String detail(Model model, Integer id, String act); public String delete(Integer id); }
package com.ch.ebusiness.util; import java.security.MessageDigest; public class MD5Util { /*** * MD5加码生成32位md5码 */ public static String string2MD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } /*** * 自己规则加密 * * @param inStr * @return */ public static String MD5(String inStr) { String xy = "abc"; String finalStr = ""; if (inStr != null) { String fStr = inStr.substring(0, 1); String lStr = inStr.substring(1, inStr.length()); finalStr = string2MD5(fStr + xy + lStr); } else { finalStr = string2MD5(xy); } return finalStr; } }
package com.ch.ebusiness.util; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpSession; import com.ch.ebusiness.entity.BUser; public class MyUtil { /** * 将实际的文件名重命名 */ public static String getNewFileName(String oldFileName) { int lastIndex = oldFileName.lastIndexOf("."); String fileType = oldFileName.substring(lastIndex); Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDDHHmmssSSS"); String time = sdf.format(now); String newFileName = time + fileType; return newFileName; } /** * 获得用户信息 */ public static BUser getUser(HttpSession session) { BUser bUser = (BUser) session.getAttribute("bUser"); return bUser; } }
package com.ch.ebusiness.service.admin; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import org.springframework.web.multipart.MultipartFile; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.repository.admin.GoodsRepository; import com.ch.ebusiness.util.MyUtil; @Service public class GoodsServiceImpl implements GoodsService { @Autowired private GoodsRepository goodsRepository; @Override public String selectAllGoodsByPage(Model model, int currentPage, String act) { // 共多少个商品 int totalCount = goodsRepository.selectAllGoods(); // 计算共多少页 int pageSize = 5; int totalPage = (int) Math.ceil(totalCount * 1.0 / pageSize); List<Goods> typeByPage = goodsRepository.selectAllGoodsByPage((currentPage - 1) * pageSize, pageSize); model.addAttribute("allGoods", typeByPage); model.addAttribute("totalPage", totalPage); model.addAttribute("currentPage", currentPage); model.addAttribute("act", act); return "admin/selectGoods"; } @Override public String addGoods(Goods goods, HttpServletRequest request, String act) throws IllegalStateException, IOException { MultipartFile myfile = goods.getFileName(); // 如果选择了上传文件,将文件上传到指定的目录images if (!myfile.isEmpty()) { // 上传文件路径(生产环境) // String path = request.getServletContext().getRealPath("/images/"); // 获得上传文件原名 // 上传文件路径(开发环境) String path = "C:\workspace-spring-tool-suite-4-4.1.1.RELEASE\eBusiness\src\main\resources\static\images"; // 获得上传文件原名 String fileName = myfile.getOriginalFilename(); // 对文件重命名 String fileNewName = MyUtil.getNewFileName(fileName); File filePath = new File(path + File.separator + fileNewName); // 如果文件目录不存在,创建目录 if (!filePath.getParentFile().exists()) { filePath.getParentFile().mkdirs(); } // 将上传文件保存到一个目标文件中 myfile.transferTo(filePath); // 将重命名后的图片名存到goods对象中,添加时使用 goods.setGpicture(fileNewName); } if ("add".equals(act)) { int n = goodsRepository.addGoods(goods); if (n > 0)// 成功 return "redirect:/goods/selectAllGoodsByPage?currentPage=1&act=select"; // 失败 return "admin/addGoods"; } else {// 修改 int n = goodsRepository.updateGoods(goods); if (n > 0)// 成功 return "redirect:/goods/selectAllGoodsByPage?currentPage=1&act=updateSelect"; // 失败 return "admin/UpdateAGoods"; } } @Override public String toAddGoods(Goods goods, Model model) { model.addAttribute("goodsType", goodsRepository.selectAllGoodsType()); return "admin/addGoods"; } @Override public String detail(Model model, Integer id, String act) { model.addAttribute("goods", goodsRepository.selectAGoods(id)); if ("detail".equals(act)) return "admin/detail"; else { model.addAttribute("goodsType", goodsRepository.selectAllGoodsType()); return "admin/updateAGoods"; } } @Override public String delete(Integer id) { if (goodsRepository.selectCartGoods(id).size() > 0 || goodsRepository.selectFocusGoods(id).size() > 0 || goodsRepository.selectOrderGoods(id).size() > 0) return "no"; else { goodsRepository.deleteAGoods(id); return "/goods/selectAllGoodsByPage?currentPage=1&act=deleteSelect"; } } }
package com.ch.ebusiness.util; import java.security.MessageDigest; public class MD5Util { /*** * MD5加码生成32位md5码 */ public static String string2MD5(String inStr) { MessageDigest md5 = null; try { md5 = MessageDigest.getInstance("MD5"); } catch (Exception e) { System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } /*** * 自己规则加密 * * @param inStr * @return */ public static String MD5(String inStr) { String xy = "abc"; String finalStr = ""; if (inStr != null) { String fStr = inStr.substring(0, 1); String lStr = inStr.substring(1, inStr.length()); finalStr = string2MD5(fStr + xy + lStr); } else { finalStr = string2MD5(xy); } return finalStr; } }
package com.ch.ebusiness.util; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.http.HttpSession; import com.ch.ebusiness.entity.BUser; public class MyUtil { /** * 将实际的文件名重命名 */ public static String getNewFileName(String oldFileName) { int lastIndex = oldFileName.lastIndexOf("."); String fileType = oldFileName.substring(lastIndex); Date now = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("YYYYMMDDHHmmssSSS"); String time = sdf.format(now); String newFileName = time + fileType; return newFileName; } /** * 获得用户信息 */ public static BUser getUser(HttpSession session) { BUser bUser = (BUser) session.getAttribute("bUser"); return bUser; } }
package com.ch.ebusiness.service.admin; import org.springframework.ui.Model; import com.ch.ebusiness.entity.GoodsType; public interface TypeService { public String selectAllTypeByPage(Model model, int currentPage); public String delete(int id); public String addType(GoodsType goodsType); }
package com.ch.ebusiness.service.admin; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.GoodsType; import com.ch.ebusiness.repository.admin.TypeRepository; @Service public class TypeServiceImpl implements TypeService { @Autowired private TypeRepository typeRepository; @Override public String selectAllTypeByPage(Model model, int currentPage) { // 共多少个类型 int totalCount = typeRepository.selectAll(); // 计算共多少页 int pageSize = 2; int totalPage = (int) Math.ceil(totalCount * 1.0 / pageSize); List<GoodsType> typeByPage = typeRepository.selectAllTypeByPage((currentPage - 1) * pageSize, pageSize); model.addAttribute("allTypes", typeByPage); model.addAttribute("totalPage", totalPage); model.addAttribute("currentPage", currentPage); return "admin/selectGoodsType"; } @Override public String delete(int id) { List<Goods> list = typeRepository.selectGoods(id); if (list.size() > 0) { // 该类型下有商品不允许删除 return "no"; } else { typeRepository.deleteType(id); // 删除后回到查询页面 return "/type/selectAllTypeByPage?currentPage=1"; } } @Override public String addType(GoodsType goodsType) { typeRepository.addType(goodsType); return "redirect:/type/selectAllTypeByPage?currentPage=1"; } }
package com.ch.ebusiness.service.admin; import org.springframework.ui.Model; public interface UserAndOrderAndOutService { public String selectUser(Model model, int currentPage); public String deleteUser(Model model, int id); public String selectOrder(Model model, int currentPage); }
package com.ch.ebusiness.service.before; import javax.servlet.http.HttpSession; import org.springframework.ui.Model; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.Order; public interface CartService { public String putCart(Goods goods, Model model, HttpSession session); public String focus(Model model, HttpSession session, Integer gid); public String selectCart(Model model, HttpSession session, String act); public String deleteCart(HttpSession session, Integer gid); public String clearCart(HttpSession session); public String submitOrder(Order order, Model model, HttpSession session); public String pay(Order order); public String myFocus(Model model, HttpSession session); public String myOder(Model model, HttpSession session); public String orderDetail(Model model, Integer id); public String updateUpwd(HttpSession session, String bpwd); }
package com.ch.ebusiness.service.before; import java.util.List; import java.util.Map; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.Order; import com.ch.ebusiness.repository.before.CartRepository; import com.ch.ebusiness.repository.before.IndexRepository; import com.ch.ebusiness.util.MD5Util; import com.ch.ebusiness.util.MyUtil; @Service public class CartServiceImpl implements CartService { @Autowired private CartRepository cartRepository; @Autowired private IndexRepository indexRepository; @Override public String putCart(Goods goods, Model model, HttpSession session) { Integer uid = MyUtil.getUser(session).getId(); // 如果商品已在购物车,只更新购买数量 if (cartRepository.isPutCart(uid, goods.getId()).size() > 0) { cartRepository.updateCart(uid, goods.getId(), goods.getBuyNumber()); } else {// 新增到购物车 cartRepository.putCart(uid, goods.getId(), goods.getBuyNumber()); } // 跳转到查询购物车 return "forward:/cart/selectCart"; } @Override public String selectCart(Model model, HttpSession session, String act) { List<Map<String, Object>> list = cartRepository.selectCart(MyUtil.getUser(session).getId()); double sum = 0; for (Map<String, Object> map : list) { sum = sum + (Double) map.get("smallsum"); } model.addAttribute("total", sum); model.addAttribute("cartlist", list); // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); if ("toCount".equals(act)) {// 去结算页面 return "user/count"; } return "user/cart"; } @Override public String focus(Model model, HttpSession session, Integer gid) { Integer uid = MyUtil.getUser(session).getId(); List<Map<String, Object>> list = cartRepository.isFocus(uid, gid); // 判断是否已收藏 if (list.size() > 0) { return "no"; } else { cartRepository.focus(uid, gid); return "ok"; } } @Override public String deleteCart(HttpSession session, Integer gid) { Integer uid = MyUtil.getUser(session).getId(); cartRepository.deleteAgoods(uid, gid); return "forward:/cart/selectCart"; } @Override public String clearCart(HttpSession session) { cartRepository.clear(MyUtil.getUser(session).getId()); return "forward:/cart/selectCart"; } @Override @Transactional public String submitOrder(Order order, Model model, HttpSession session) { order.setBusertable_id(MyUtil.getUser(session).getId()); // 生成订单 cartRepository.addOrder(order); // 生成订单详情 cartRepository.addOrderDetail(order.getId(), MyUtil.getUser(session).getId()); // 减少商品库存 List<Map<String, Object>> listGoods = cartRepository.selectGoodsShop(MyUtil.getUser(session).getId()); for (Map<String, Object> map : listGoods) { cartRepository.updateStore(map); } // 清空购物车 cartRepository.clear(MyUtil.getUser(session).getId()); model.addAttribute("order", order); return "user/pay"; } @Override public String pay(Order order) { cartRepository.pay(order.getId()); return "ok"; } @Override public String myFocus(Model model, HttpSession session) { // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); model.addAttribute("myFocus", cartRepository.myFocus(MyUtil.getUser(session).getId())); return "user/myFocus"; } @Override public String myOder(Model model, HttpSession session) { // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); model.addAttribute("myOrder", cartRepository.myOrder(MyUtil.getUser(session).getId())); return "user/myOrder"; } @Override public String orderDetail(Model model, Integer id) { model.addAttribute("orderDetail", cartRepository.orderDetail(id)); return "user/orderDetail"; } @Override public String updateUpwd(HttpSession session, String bpwd) { Integer uid = MyUtil.getUser(session).getId(); cartRepository.updateUpwd(uid, MD5Util.MD5(bpwd)); return "forward:/user/toLogin"; } }
package com.ch.ebusiness.service.before; import org.springframework.ui.Model; public interface IndexService { public String index(Model model, Integer tid); public String goodsDetail(Model model, Integer id); public String search(Model model, String mykey); }
package com.ch.ebusiness.service.before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import com.ch.ebusiness.repository.before.IndexRepository; @Service public class IndexServiceImpl implements IndexService { @Autowired private IndexRepository indexRepository; @Override public String index(Model model, Integer tid) { if (tid == null) tid = 0; // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); // 推荐商品 model.addAttribute("recommendGoods", indexRepository.selectRecommendGoods(tid)); // 最新商品 model.addAttribute("lastedGoods", indexRepository.selectLastedGoods(tid)); return "user/index"; } @Override public String goodsDetail(Model model, Integer id) { // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); // 商品详情 model.addAttribute("goods", indexRepository.selectAGoods(id)); return "user/goodsDetail"; } @Override public String search(Model model, String mykey) { // 广告区商品 model.addAttribute("advertisementGoods", indexRepository.selectAdvertisementGoods()); // 导航栏商品类型 model.addAttribute("goodsType", indexRepository.selectGoodsType()); // 商品搜索 model.addAttribute("searchgoods", indexRepository.search(mykey)); return "user/searchResult"; } }
package com.ch.ebusiness.service.before; import javax.servlet.http.HttpSession; import org.springframework.ui.Model; import com.ch.ebusiness.entity.BUser; public interface UserService { public String isUse(BUser bUser); public String register(BUser bUser); public String login(BUser bUser, HttpSession session, Model model); }
package com.ch.ebusiness.service.before; import java.util.List; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import com.ch.ebusiness.entity.BUser; import com.ch.ebusiness.repository.before.UserRepository; import com.ch.ebusiness.util.MD5Util; @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public String isUse(BUser bUser) { if (userRepository.isUse(bUser).size() > 0) { return "no"; } return "ok"; } @Override public String register(BUser bUser) { // 对密码MD5加密 bUser.setBpwd(MD5Util.MD5(bUser.getBpwd())); if (userRepository.register(bUser) > 0) { return "user/login"; } return "user/register"; } @Override public String login(BUser bUser, HttpSession session, Model model) { // 对密码MD5加密 bUser.setBpwd(MD5Util.MD5(bUser.getBpwd())); String rand = (String) session.getAttribute("rand"); if (!rand.equalsIgnoreCase(bUser.getCode())) { model.addAttribute("errorMessage", "验证码错误!"); return "user/login"; } List<BUser> list = userRepository.login(bUser); if (list.size() > 0) { session.setAttribute("bUser", list.get(0)); return "redirect:/";// 到首页 } model.addAttribute("errorMessage", "用户名或密码错误!"); return "user/login"; } }
package com.ch.ebusiness.controller.admin; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import com.ch.ebusiness.NoLoginException; @Controller public class AdminBaseController { /** * 登录权限控制,处理方法执行前执行该方法 */ @ModelAttribute public void isLogin(HttpSession session) throws NoLoginException { if(session.getAttribute("auser") == null){ throw new NoLoginException("没有登录"); } } }
package com.ch.ebusiness.controller.admin; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import com.ch.ebusiness.entity.AUser; import com.ch.ebusiness.service.admin.AdminService; @Controller @RequestMapping("/admin") public class AdminController { @Autowired private AdminService adminService; @RequestMapping("/toLogin") public String toLogin(@ModelAttribute("aUser") AUser aUser) { return "admin/login"; } @RequestMapping("/login") public String login(@ModelAttribute("aUser") AUser aUser, HttpSession session, Model model) { return adminService.login(aUser, session, model); } }
package com.ch.ebusiness.controller.admin; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.service.admin.GoodsService; @Controller @RequestMapping("/goods") public class GoodsController extends AdminBaseController { @Autowired private GoodsService goodsService; @RequestMapping("/selectAllGoodsByPage") public String selectAllGoodsByPage(Model model, int currentPage, String act) { return goodsService.selectAllGoodsByPage(model, currentPage, act); } @RequestMapping("/toAddGoods") public String toAddGoods(@ModelAttribute("goods") Goods goods, Model model) { goods.setIsAdvertisement(0); goods.setIsRecommend(1); return goodsService.toAddGoods(goods, model); } @RequestMapping("/addGoods") public String addGoods(@ModelAttribute("goods") Goods goods, HttpServletRequest request, String act) throws IllegalStateException, IOException { return goodsService.addGoods(goods, request, act); } @RequestMapping("/detail") public String detail(Model model, Integer id, String act) { return goodsService.detail(model, id, act); } @RequestMapping("/delete") @ResponseBody public String delete(Integer id) { return goodsService.delete(id); } }
package com.ch.ebusiness.controller.admin; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ebusiness.entity.GoodsType; import com.ch.ebusiness.service.admin.TypeService; @Controller @RequestMapping("/type") public class TypeController extends AdminBaseController { @Autowired private TypeService typeService; @RequestMapping("/selectAllTypeByPage") public String selectAllTypeByPage(Model model, int currentPage) { return typeService.selectAllTypeByPage(model, currentPage); } @RequestMapping("/deleteType") @ResponseBody // 返回字符串数据而不是视图 public String delete(int id) { return typeService.delete(id); } @RequestMapping("/toAddType") public String toAddType(@ModelAttribute("goodsType") GoodsType goodsType) { return "admin/addType"; } @RequestMapping("/addType") public String addType(@ModelAttribute("goodsType") GoodsType goodsType) { return typeService.addType(goodsType); } }
package com.ch.ebusiness.controller.admin; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ebusiness.entity.AUser; import com.ch.ebusiness.service.admin.UserAndOrderAndOutService; @Controller public class UserAndOrderAndOutController extends AdminBaseController { @Autowired private UserAndOrderAndOutService userAndOrderAndOutService; @RequestMapping("/loginOut") public String loginOut(@ModelAttribute("aUser") AUser aUser, HttpSession session) { session.invalidate(); return "admin/login"; } @RequestMapping("/selectUser") public String selectUser(Model model, int currentPage) { return userAndOrderAndOutService.selectUser(model, currentPage); } @RequestMapping("/deleteUser") @ResponseBody public String deleteUser(Model model, int id) { return userAndOrderAndOutService.deleteUser(model, id); } @RequestMapping("/selectOrder") public String selectOrder(Model model, int currentPage) { return userAndOrderAndOutService.selectOrder(model, currentPage); } }
package com.ch.ebusiness; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //配置扫描MyBatis接口的包路径 @MapperScan(basePackages = { "com.ch.ebusiness.repository" }) public class EBusinessApplication { public static void main(String[] args) { SpringApplication.run(EBusinessApplication.class, args); } }
package com.ch.ebusiness; import java.sql.SQLException; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; /** * 统一异常处理 */ @ControllerAdvice public class GlobalExceptionHandleController { @ExceptionHandler(value = Exception.class) public String exceptionHandler(Exception e, Model model) { String message = ""; // 数据库异常 if (e instanceof SQLException) { message = "数据库异常"; } else if (e instanceof NoLoginException) { message = "未登录异常"; } else {// 未知异常 message = "未知异常"; } model.addAttribute("mymessage", message); return "myError"; } }
package com.ch.ebusiness.controller.before; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import com.ch.ebusiness.NoLoginException; @Controller public class BeforeBaseController { /** * 登录权限控制,处理方法执行前执行该方法 */ @ModelAttribute public void isLogin(HttpSession session) throws NoLoginException { if (session.getAttribute("bUser") == null) { throw new NoLoginException("没有登录"); } } }
package com.ch.ebusiness.controller.before; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ebusiness.entity.Goods; import com.ch.ebusiness.entity.Order; import com.ch.ebusiness.service.before.CartService; @Controller @RequestMapping("/cart") public class CartController extends BeforeBaseController { @Autowired private CartService cartService; @RequestMapping("/putCart") public String putCart(Goods goods, Model model, HttpSession session) { return cartService.putCart(goods, model, session); } @RequestMapping("/focus") @ResponseBody public String focus(@RequestBody Goods goods, Model model, HttpSession session) { return cartService.focus(model, session, goods.getId()); } @RequestMapping("/selectCart") public String selectCart(Model model, HttpSession session, String act) { return cartService.selectCart(model, session, act); } @RequestMapping("/deleteCart") public String deleteCart(HttpSession session, Integer gid) { return cartService.deleteCart(session, gid); } @RequestMapping("/clearCart") public String clearCart(HttpSession session) { return cartService.clearCart(session); } @RequestMapping("/submitOrder") public String submitOrder(Order order, Model model, HttpSession session) { return cartService.submitOrder(order, model, session); } @RequestMapping("/pay") @ResponseBody public String pay(@RequestBody Order order) { return cartService.pay(order); } @RequestMapping("/myFocus") public String myFocus(Model model, HttpSession session) { return cartService.myFocus(model, session); } @RequestMapping("/myOder") public String myOder(Model model, HttpSession session) { return cartService.myOder(model, session); } @RequestMapping("/orderDetail") public String orderDetail(Model model, Integer id) { return cartService.orderDetail(model, id); } @RequestMapping("/userInfo") public String userInfo() { return "user/userInfo"; } @RequestMapping("/updateUpwd") public String updateUpwd(HttpSession session, String bpwd) { return cartService.updateUpwd(session, bpwd); } }
package com.ch.ebusiness.controller.before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.ch.ebusiness.service.before.IndexService; @Controller public class IndexController { @Autowired private IndexService indexService; @RequestMapping("/") public String index(Model model, Integer tid) { return indexService.index(model, tid); } @RequestMapping("/goodsDetail") public String goodsDetail(Model model, Integer id) { return indexService.goodsDetail(model, id); } @RequestMapping("/search") public String search(Model model, String mykey) { return indexService.search(model, mykey); } }
package com.ch.ebusiness.controller.before; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.ch.ebusiness.entity.BUser; import com.ch.ebusiness.service.before.UserService; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/toRegister") public String toRegister(@ModelAttribute("bUser") BUser bUser) { return "user/register"; } @RequestMapping("/toLogin") public String toLogin(@ModelAttribute("bUser") BUser bUser) { // @ModelAttribute("bUser")与th:object="${bUser}"相对应 return "user/login"; } @RequestMapping("/login") public String login(@ModelAttribute("bUser") @Validated BUser bUser, BindingResult rs, HttpSession session, Model model) { if (rs.hasErrors()) {// 验证失败 return "user/login"; } return userService.login(bUser, session, model); } @RequestMapping("/isUse") @ResponseBody public String isUse(@RequestBody BUser bUser) { return userService.isUse(bUser); } @RequestMapping("/register") public String register(@ModelAttribute("bUser") @Validated BUser bUser, BindingResult rs) { if (rs.hasErrors()) {// 验证失败 return "user/register"; } return userService.register(bUser); } }
package com.ch.ebusiness.controller.before; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.OutputStream; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ValidateCodeController { private char code[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7', '8', '9' }; private static final int WIDTH = 50; private static final int HEIGHT = 20; private static final int LENGTH = 4; @RequestMapping("/validateCode") public void validateCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // 设置响应报头信息 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 设置响应的MIME类型 response.setContentType("image/jpeg"); BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Font mFont = new Font("Arial", Font.TRUETYPE_FONT, 18); Graphics g = image.getGraphics(); Random rd = new Random(); // 设置背景颜色 g.setColor(new Color(rd.nextInt(55) + 200, rd.nextInt(55) + 200, rd.nextInt(55) + 200)); g.fillRect(0, 0, WIDTH, HEIGHT); // 设置字体 g.setFont(mFont); // 画边框 g.setColor(Color.black); g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1); // 随机产生的验证码 String result = ""; for (int i = 0; i < LENGTH; ++i) { result += code[rd.nextInt(code.length)]; } HttpSession se = request.getSession(); se.setAttribute("rand", result); // 画验证码 for (int i = 0; i < result.length(); i++) { g.setColor(new Color(rd.nextInt(200), rd.nextInt(200), rd.nextInt(200))); g.drawString(result.charAt(i) + "", 12 * i + 1, 16); } // 随机产生2个干扰线 for (int i = 0; i < 2; i++) { g.setColor(new Color(rd.nextInt(200), rd.nextInt(200), rd.nextInt(200))); int x1 = rd.nextInt(WIDTH); int x2 = rd.nextInt(WIDTH); int y1 = rd.nextInt(HEIGHT); int y2 = rd.nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } // 释放图形资源 g.dispose(); try { OutputStream os = response.getOutputStream(); // 输出图像到页面 ImageIO.write(image, "JPEG", os); } catch (IOException e) { e.printStackTrace(); } } }