基于javaweb+mysql的springboot超市进销存系统设计和实现(java+springboot+ssm+mysql+html+maven)

基于javaweb+mysql的springboot超市进销存系统设计和实现(java+springboot+ssm+mysql+html+maven)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的SpringBoot超市进销存系统设计和实现(java+springboot+ssm+mysql+html+maven)

一、项目简述

本系统主要实现的功能有: 用户管理,商品管理,销售管理,进货退货管理,仓库管 理等等功能。

二、项目运行

环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)

项目技术: Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等

        return "system/outport/outportManager";
    }

    /**
     * 跳转到商品销售管理页面
     * @return
     */
    @RequestMapping("/toSale")
    public String toSale() {
        return "system/sale/saleManager";
    }

    /**
     * 跳转到销售退货管理页面
     * @return
     */
    @RequestMapping("/toOutsale")
    public String toOutsale() {
        return "system/outsale/outsaleManager";
    }

    /**
     * 跳转到销售退货管理页面
     * @return
     */
    @RequestMapping("/toReport")
    public String toReport() {
        return "system/report/reportManager";
    }
}
package com.it.controller;


    /**
     * 添加客户信息
     * @param customer
     * @return
     */
    @SysLog("客户添加操作")
    @PostMapping("/addcustomer")
    public Result addCustomer(Customer customer){
        String id = RandomStringUtils.randomAlphanumeric(10);

        customer.setCustvip(id);
        boolean bool = customerService.save(customer);
        if(bool){
            return Result.success(true,"200","添加成功!");
        }
        return Result.error(false,null,"添加失败!");
    }

    /**
     * 修改客户信息
     * @param customer
     * @return
     */
    @SysLog("客户修改操作")
    @PostMapping("/updatecustomer")
    public Result updateCustomer(Customer customer){

        boolean bool = customerService.updateById(customer);
        if(bool){
            return Result.success(true,"200","修改成功!");
        }
        return Result.error(false,null,"修改失败!");
    }

    /**
     * 删除单条数据
     * @param id
     * @return
     */
    @SysLog("客户删除操作")
    @RequestMapping("/deleteOne")
    public Result deleteOne(int id) {

        boolean bool = customerService.removeById(id);
    /**
     * 登录
     *
     * @param username 用户名
     * @param password 密码
     * @param request
     * @return
     */

    @SysLog("登录操作")
    @PostMapping("/login")
    public Result login(String username, String password, String code,HttpServletRequest request) {
        try {

            if (!(request.getSession().getAttribute("code")+"").equalsIgnoreCase(code+"")) {
                return Result.error(false, "400", "登录失败,验证码错误");
            }

            //获取当前登录主体对象
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            subject.login(token);
            LoginUserVO userDTO = (LoginUserVO) subject.getPrincipal();
            request.getSession().setAttribute("username", userDTO.getUser());
            return Result.success(true, "200", "登录成功");
        } catch (UnknownAccountException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,用户名不存在");
        }catch (IncorrectCredentialsException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,密码错误");
        }catch (AuthenticationException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,账户禁用");
        }
    }

    /**
     * 得到登陆验证码
     * @param response
     * @param session
     * @throws IOException
     */
    @RequestMapping("/getCode")
    public void getCode(HttpServletResponse response, HttpSession session) throws IOException {
        //定义图形验证码的长和宽
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(116, 36,4,5);
        session.setAttribute("code",lineCaptcha.getCode());
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            lineCaptcha.write(outputStream);
            outputStream.close();

    /**
     *
     * 加载下拉框
     * @return
     */
    @RequestMapping("/loadAllCustomer")
    public DataGridViewResult loadAllCustomer(){
        QueryWrapper<Customer> queryWrapper = new QueryWrapper<>();
        List<Customer> list = customerService.list(queryWrapper);
        return new DataGridViewResult(list);

    }

}
package com.it.controller;

@Controller
public class JumpController {

    /**
     * 登录页面跳转到后台首页
     * @return
     */
    @RequestMapping("/index")
    public String toIndex(){
        return "system/home/index";
    }

    /**
     * 登出  用的是shiro默认的logout
     * @param session
     * @return
     */
    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        Subject subject = SecurityUtils.getSubject();
        subject.logout();
        return "redirect:login";
    }

@Aspect
@Component
public class AspectController {

    @Autowired
    private LogsService logsservice;

    @Pointcut("@annotation(com.it.aspect.SysLog)")
    public void logPointCut() {}

   @Around("logPointCut()")
    public Object aroundLog(ProceedingJoinPoint point) throws Throwable {

       Object proceed = point.proceed();
       saveLog(point);
       return proceed;
    }

    /**
     * 保存日志
     * @param joinPoint
     * @param
     */
    private void saveLog(ProceedingJoinPoint joinPoint) {
        Integer gquantity = goods.getGquantity();
        if (gquantity < sale.getBuyquantity()) {
            return Result.error(false, null, "添加失败!库存不足,库存为:" + gquantity);
        }
        User user = (User) session.getAttribute("username");
        String num = RandomStringUtils.randomAlphanumeric(7);
        sale.setNumbering(num);
        sale.setPerson(user.getUsername());
        sale.setBuytime(new Date());
        sale.setRealnumber(sale.getBuyquantity());
        boolean bool = saleService.save(sale);
        if (bool) {
            return Result.success(true, "200", "添加成功!");
        }
        return Result.error(false, null, "添加失败!库存不足");
    }

    /**
     * 修改销售单信息
     *
     * @param sale
     * @return
     */
    @SysLog("销售修改操作")
    @PostMapping("/updatesale")
    public Result updatesale(Sale sale, HttpSession session) {

        User user = (User) session.getAttribute("username");
        sale.setPerson(user.getUsername());
        sale.setBuytime(new Date());
        boolean bool = saleService.updateById(sale);
        if (bool) {
            return Result.success(true, "200", "修改成功!");
        }
        return Result.error(false, null, "修改失败!");
    }

    /**
     * 删除单条数据
     *
     * @param id
     * @return
     */
    @SysLog("销售删除操作")
    @RequestMapping("/deleteOne")
    public Result deleteOne(int id) {

        boolean bool = saleService.removeById(id);
        if (bool) {

   @Around("logPointCut()")
    public Object aroundLog(ProceedingJoinPoint point) throws Throwable {

       Object proceed = point.proceed();
       saveLog(point);
       return proceed;
    }

    /**
     * 保存日志
     * @param joinPoint
     * @param
     */
    private void saveLog(ProceedingJoinPoint joinPoint) {
        // 获取签名
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        SysLog sysLog = method.getAnnotation(SysLog.class);
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String funcName = signature.getName();
        Logs logs = new Logs();
        if(sysLog != null) {
            //注解上的描述
            logs.setType(sysLog.value());
        }
        LoginUserVO user= (LoginUserVO) SecurityUtils.getSubject().getPrincipal();
        if (null!=user) {
            logs.setLtime(new Date());
            logs.setUname(user.getUser().getUsername());
            logs.setIp(request.getRemoteAddr());
            logs.setContent("执行的方法:" + funcName);
            //记录日志(姓名、操作时间、登陆ip、操作、操作类型)
            logsservice.save(logs);
        }
    }

}
package com.it.service.impl;

            if(permissionService.save(permission)){
                //新增成功
                return Result.success(true,null,"添加成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.success(false,null,"添加失败");
    }

    /**
     * 修改权限
     * @param permission
     * @return
     */
    @SysLog("权限修改操作")
    @PostMapping("/updatePermission")
    public Result updatePermission(Permission permission){
        try {
            if(permissionService.updateById(permission)){
                return Result.success(true,null,"修改成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.success(false,null,"修改失败");
    }

    /**
     * 删除权限
     * @param id
     * @return
     */
    @SysLog("权限删除操作")
    @RequestMapping("/deleteById")
    public Result deleteById(int id){
        //删除成功
        if(permissionService.removeById(id)){
            return Result.success(true,null,"删除成功");
        }
        //删除失败
        return Result.success(false,null,"删除失败");
    }

}
package com.it.controller;


/**
 * <p>
 *  前端控制器
 * </p>
 *
 */
@RestController
@RequestMapping("/permission")
public class PermissionController {

    @Autowired
    private PermissionService permissionService;

    /**
     * 菜单列表
     * @param permissionVO
     * @return
     */
    @RequestMapping("/permissionList")
    public DataGridViewResult permissionList(PermissionVO permissionVO){
        //创建分页对象
        IPage<Permission> page = new Page<Permission>(permissionVO.getPage(), permissionVO.getLimit());
        QueryWrapper<Permission> queryWrapper = new QueryWrapper<Permission>();
        queryWrapper.eq("type","permission");
        queryWrapper.like(StringUtils.isNotBlank(permissionVO.getTitle()),"title", permissionVO.getTitle());
        queryWrapper.like(StringUtils.isNotBlank(permissionVO.getPercode()),"percode", permissionVO.getPercode());
        queryWrapper.eq(permissionVO.getId()!=null,"id", permissionVO.getId())
                .or().eq(permissionVO.getId()!=null,"pid", permissionVO.getId());
        queryWrapper.orderByAsc("id");
        permissionService.page(page,queryWrapper);
    /**
     * 登录
     *
     * @param username 用户名
     * @param password 密码
     * @param request
     * @return
     */

    @SysLog("登录操作")
    @PostMapping("/login")
    public Result login(String username, String password, String code,HttpServletRequest request) {
        try {

            if (!(request.getSession().getAttribute("code")+"").equalsIgnoreCase(code+"")) {
                return Result.error(false, "400", "登录失败,验证码错误");
            }

            //获取当前登录主体对象
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
            subject.login(token);
            LoginUserVO userDTO = (LoginUserVO) subject.getPrincipal();
            request.getSession().setAttribute("username", userDTO.getUser());
            return Result.success(true, "200", "登录成功");
        } catch (UnknownAccountException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,用户名不存在");
        }catch (IncorrectCredentialsException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,密码错误");
        }catch (AuthenticationException e) {
            e.printStackTrace();
            return Result.error(false, "400", "登录失败,账户禁用");
        }
    }

    /**
     * 得到登陆验证码
     * @param response

@RestController
@RequestMapping("file")
public class FileController {

    /**
     * 文件上传
     * @param mf
     * @return
     */
    @RequestMapping("uploadFile")
    public Map<String,Object> uploadFile(MultipartFile mf) {
        //1.得到文件名
        String oldName = mf.getOriginalFilename();
        //2.根据旧的文件名生成新的文件名
        String newName= AppFileUtils.createNewFileName(oldName);
        //3.得到当前日期的字符串
        String dirName= DateUtil.format(new Date(), "yyyy-MM-dd");
        //4.构造文件夹
        File dirFile=new File(AppFileUtils.UPLOAD_PATH,dirName);
        //5.判断当前文件夹是否存在
        if(!dirFile.exists()) {
            //如果不存在则创建新文件夹
            dirFile.mkdirs();
        }
        //6.构造文件对象
        File file=new File(dirFile, newName+"_temp");
        //7.把mf里面的图片信息写入file
        try {
            mf.transferTo(file);
        } catch (IllegalStateException | IOException e) {
            e.printStackTrace();
        }
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("path",dirName+"/"+newName+"_temp");
        return map;
    }
        return Result.error(false,null,"删除失败!");
    }
}
package com.it.controller;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 */
@RestController
@RequestMapping("/permission")
public class PermissionController {

    @Autowired
    private PermissionService permissionService;

    /**
     * 菜单列表
     * @param permissionVO
     * @return
     */
    @RequestMapping("/permissionList")
    public DataGridViewResult permissionList(PermissionVO permissionVO){
        //创建分页对象
        IPage<Permission> page = new Page<Permission>(permissionVO.getPage(), permissionVO.getLimit());
        QueryWrapper<Permission> queryWrapper = new QueryWrapper<Permission>();
        queryWrapper.eq("type","permission");
        queryWrapper.like(StringUtils.isNotBlank(permissionVO.getTitle()),"title", permissionVO.getTitle());
        queryWrapper.like(StringUtils.isNotBlank(permissionVO.getPercode()),"percode", permissionVO.getPercode());
        queryWrapper.eq(permissionVO.getId()!=null,"id", permissionVO.getId())
                .or().eq(permissionVO.getId()!=null,"pid", permissionVO.getId());
        queryWrapper.orderByAsc("id");
        permissionService.page(page,queryWrapper);
     *
     */
    @RequestMapping("/toProvider")
    public String toProvider(){
        return "system/provider/providerManager";
    }

    /**
     * 跳转到客户管理页面
     * @return
     */
    @RequestMapping("/toCustomer")
    public String toCustomer(){
        return "system/customer/customerManager";
    }

    /**
     * 跳转到商品类别管理页面
     * @return
     */
    @RequestMapping("/toCategory")
    public String toCategory(){
        return "system/category/categoryManager";
    }

    /**
     * 跳转到权限管理页面
     * @return
     */
    @RequestMapping("/toPermission")
    public String toPermission() {
        return "system/permission/permissionManager";
    }
    /**
     * 跳转到权限管理页面-left
     * @return
     */
    @RequestMapping("/toPermissionLeft")
    public String toPermissionLeft() {
        return "system/permission/left";
     * @return
     */
    @RequestMapping("/index")
    public String toIndex(){
        return "system/home/index";
    }

    /**
     * 登出  用的是shiro默认的logout
     * @param session
     * @return
     */
    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        Subject subject = SecurityUtils.getSubject();
        subject.logout();
        return "redirect:login";
    }

    /**
     *跳转到首页工作台
     */
    @RequestMapping("/toDes")
    public String toDesktop(){
        return "system/home/desktopManager";
    }

    /**
     * 跳转到日志管理页面
     *
     */
    @RequestMapping("/toLog")
    public String toLog(){
        return "system/log/logsManager";
    }

    /**
     * 跳转到供应商管理页面
     *
     */
    @RequestMapping("/toProvider")
    public String toProvider(){
        return "system/provider/providerManager";
    }

    /**
     * 跳转到客户管理页面
     * @return
     */
    @RequestMapping("/toCustomer")
    public String toCustomer(){
        return "system/customer/customerManager";
            return Result.success(true,"200","删除成功!");
        }
        return Result.error(false,null,"删除失败!");
    }

    /**
     *
     * 加载下拉框
     * @return
     */
    @RequestMapping("/loadAllProvider")
    public DataGridViewResult loadAllProvider(){
        QueryWrapper<Provider> queryWrapper = new QueryWrapper<>();
        List<Provider> list = providerService.list(queryWrapper);
        return new DataGridViewResult(list);

    }

}
package com.it.controller;

/**
        }
        return Result.error(false,null,"删除失败!");
    }

    /**
     * 添加供应商信息
     * @param provider
     * @param session
     * @return
     */
    @SysLog("供应商添加操作")
    @PostMapping("/addprovider")
    public Result addProvider(Provider provider, HttpSession session){
        User user = (User) session.getAttribute("username");
        provider.setOpername(user.getUname());
        boolean bool = providerService.save(provider);
        if(bool){
            return Result.success(true,"200","添加成功!");
        }
        return Result.error(false,null,"添加失败!");
    }

    /**
     * 修改供应商信息
     * @param provider
     * @return
     */
    @SysLog("供应商修改操作")
    @PostMapping("/updateprovider")
    public Result updateProvider(Provider provider){

        boolean bool = providerService.updateById(provider);
        if(bool){
            return Result.success(true,"200","修改成功!");
        }
        return Result.error(false,null,"修改失败!");
    }

    /**
     * 删除单条数据
     * @param id
     * @return
     */
    @SysLog("供应商删除操作")
    @RequestMapping("/deleteOne")
    public Result deleteOne(int id) {

        boolean bool = providerService.removeById(id);
        if(bool){
            return Result.success(true,"200","删除成功!");
        }

@Aspect
@Component
public class AspectController {

    @Autowired
    private LogsService logsservice;

    @Pointcut("@annotation(com.it.aspect.SysLog)")
    public void logPointCut() {}

   @Around("logPointCut()")
    public Object aroundLog(ProceedingJoinPoint point) throws Throwable {

       Object proceed = point.proceed();
       saveLog(point);
       return proceed;
    }

    /**
     * 保存日志
     * @param joinPoint
     * @param
     */
    private void saveLog(ProceedingJoinPoint joinPoint) {
        // 获取签名
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        SysLog sysLog = method.getAnnotation(SysLog.class);
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String funcName = signature.getName();
        Logs logs = new Logs();
        if(sysLog != null) {
            //注解上的描述
            logs.setType(sysLog.value());
        }
        LoginUserVO user= (LoginUserVO) SecurityUtils.getSubject().getPrincipal();
        if (null!=user) {
            logs.setLtime(new Date());

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值