zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然--SPRING BOOT--电子商务平台的设计与实现(THYMELEAF+MYBATIS)-- 后台代码实现部分

    <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();
            }
        }
    }
  • 相关阅读:
    Android -- DiskLruCache
    Android -- EventBus解析
    Android -- Annotation
    Ubuntu 1604 安装配置 kafka,并配置开机自启(systemctl)
    zookeeper/kafka的部署
    pdf 中内容的坐标系
    C# 获取Windows 设备信息
    C#读取Word指定页的内容
    再看C# ThreadPool与Task的认识总结
    同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
  • 原文地址:https://www.cnblogs.com/tszr/p/15382559.html
Copyright © 2011-2022 走看看