毕业设计 : 基于java web的进存销管理系统 - spring mvc SSM

毕业设计 : 基于java web的进存销管理系统 - spring mvc SSM,第1张

毕业设计 : 基于java web的进存销管理系统 - spring mvc SSM

文章目录
  • 0 前言
  • 1 项目介绍
  • 2 系统功能模块
    • 2.1 基础资料
    • 2.2 系统管理
    • 2.3 采购管理
    • 2.4 销售管理
    • 2.5 库存管理
    • 2.6 财务管理
  • 3 技术栈
  • 4 数据库搭建
  • 5 部分关键代码
  • 6 系统实现效果
  • 7 最后-毕设帮助

0 前言

Hi,同学们好呀,被评为全网最细的丹成学长ヾ(•ω•`)o,今天带大家复盘一个学长帮往届同学做的一个毕业作品

基于java web的进存销管理系统

需要毕设帮助的同学,看过来~
毕设帮助,开题指导,技术解答
746876041
1 项目介绍

进销存系统是什么?

进销存系统是为了对企业生产经营中进货、出货、批发销售、付款等全程进行(从接获订单合同开 始,进入物料采购、入库、领用到产品完工入库、交货、回收货款、支付原材料款等)跟踪(每一步都 提供详尽准确的数据)、管理(有效辅助企业解决业务管理、分销管理、存货管理、营销计划的执行和 监控、统计信息的收集等方面的业务问题)而设计的整套方案。

2 系统功能模块

2.1 基础资料

往来单位资料 货品资料 员工信息 仓库资料 计量单位 账户信息 公司信息 用户可以快速、直观地 查询所需要的数据资料。

2.2 系统管理

*** 作员管理 系统设置 数据初始化 系统管理是整个系统的门户,在系统的安全性上起到了不可估 量的作用。各种信息要求尽量全面详细,使管理变得更轻松更有效。

2.3 采购管理

新增采购订单 采购订单查询 新增采购单 采购单查询 采购退货 采购明细表 货品采购汇总表 供应商采购汇总表 采购订单完成情况 采购覆盖企业采购的各个环节。企业通过虚拟的在线货品目 录,迅速而实时的访问货品信息;通过价格和品质的比较,选定产品供应商。

2.4 销售管理

新增销售订单 销售订单查询 新增销售单 销售单查询 销售退货 销售明细表 货品销售汇总表 客户销售汇总表 销售订单完成情况 销售覆盖企业销售的各个环节。通过销售订单录入与变更,跟 踪管理商品销售情况;根据货品报价和销售数量自动开出销售发票,根据发货单产生结算凭证和 收货单。

2.5 库存管理

新增入库单 新增出库单 仓库调拨 库存盘点 期末提供了货品盘点、货品调价以及业务审核等 期末业务处理功能,业务期末结算为财务期末结算做了必要的铺垫作用。

2.6 财务管理

付款单 收款单 其他收入 其他支出 账户查询 应付账款表-单据 应付账款表-往来单位 应收账款 表-单据 应收账款表-往来单位

3 技术栈

4 数据库搭建


5 部分关键代码

登陆流程

@Bean 
public UserDetailsService userDetailsService(){ 
  return new UserDetailsService() { 
     @Override 
     public UserDetails loadUserByUsername(String username) throws 
UsernameNotFoundException { 
        // 根据用户名查询用户记录   
        User userDetails = (User) userService.findUserByUserName(username); 
        return userDetails; 
    } 
  }; 

使用生效SpringSecurity 登录配置

 
@Override 
public void configure(WebSecurity web) throws Exception { 
   web.ignoring().antMatchers( 
       "/images 
@Bean 
public PasswordEncoder encoder(){ 
return new BCryptPasswordEncoder(); 
} 
 
@Override 
protected void configure(AuthenticationManagerBuilder auth) throws Exception 
{ 
auth.userDetailsService(userDetailsService()).passwordEncoder(encoder()); 
}

jxc-admin pom.xml 引入Spring Security 坐标
 
 
   org.springframework.boot 
   spring-boot-starter-security 
 
用户登录成功,用户信息页面展示获取 
${(Session.SPRING_SECURITY_CONTEXT.authentication.principal.username)!'lzj'}

使用SpringSecurity 对密码进行加密

@RequestMapping("setting") 
public String setting(Principal principal, Model model){ 
   String userName  = principal.getName(); 
   User user = userService.findUserByUserName(userName); 
   model.addAttribute("user",user); 
   return "user/setting"; 
}

添加图片验证码

 
   com.github.penggle 
   kaptcha 
   2.3.2 
 
@Configuration 
@PropertySource(value = {"classpath:kaptcha.properties"}) 
public class CaptchaConfig { 
   @Value("${kaptcha.border}") 
   private String border; 
   @Value("${kaptcha.border.color}") 
   private String borderColor; 
   @Value("${kaptcha.textproducer.font.color}") 
   private String fontColor; 
   @Value("${kaptcha.image.width}") 
   private String imageWidth; 
   @Value("${kaptcha.image.height}") 
   private String imageHeight; 
   @Value("${kaptcha.session.key}") 
   private String sessionKey; 
   @Value("${kaptcha.textproducer.char.length}") 
   private String charLength; 
   @Value("${kaptcha.textproducer.font.names}") 
   private String fontNames; 
   @Value("${kaptcha.textproducer.font.size}") 
   private String fontSize; 
    
   @Bean(name = "captchaProducer") 
   public DefaultKaptcha getKaptchaBean(){ 
       DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); 
       //加载验证码配置 
       Properties properties = new Properties(); 
       properties.setProperty("kaptcha.border", border;
 properties.setProperty("kaptcha.border.color", borderColor
); 
       properties.setProperty("kaptcha.textproducer.font.color", fontColor); 
       properties.setProperty("kaptcha.image.width", imageWidth); 
       properties.setProperty("kaptcha.image.height", imageHeight); 
       properties.setProperty("kaptcha.session.key", sessionKey); 
       properties.setProperty("kaptcha.textproducer.char.length", charLength); 
       properties.setProperty("kaptcha.textproducer.font.names", fontNames); 
       properties.setProperty("kaptcha.textproducer.font.size",fontSize); 
       defaultKaptcha.setConfig(new Config(properties)); 
       return defaultKaptcha; 
  } 
}

控制器输出验证码

@RequestMapping(value="/image",method = RequestMethod.GET) 
public void kaptcha(HttpSession session, HttpServletResponse response) throws 
IOException { 
   response.setDateHeader("Expires", 0); 
   response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); 
   response.addHeader("Cache-Control", "post-check=0, pre-check=0"); 
   response.setHeader("Pragma", "no-cache"); 
   response.setContentType("image/jpeg"); 
   //验证码文字 
   String capText = captchaProducer.createText(); 
   //将验证码存到session 
   session.setAttribute("captcha_key", 
           new CaptchaImageModel(capText,2 * 60)); 
   //将图片返回给前端 
   try(ServletOutputStream out = response.getOutputStream()){ 
       BufferedImage bufferedImage = captchaProducer.createImage(capText);  // 
生成验证码图片 
       ImageIO.write(bufferedImage,"jpg",out); 
       out.flush(); 
  } 

校验登录验证码

@Component 
public class CaptchaCodeFilter extends OncePerRequestFilter { 
   private static ObjectMapper objectMapper = new ObjectMapper(); 
   @Override 
   protected void doFilterInternal(HttpServletRequest request, 
                                   HttpServletResponse response, 
                                   FilterChain filterChain) 
           throws ServletException, IOException { 
       // 只有在登录请求时才有验证码校验 
       if(StringUtils.equals("/login",request.getRequestURI()) 
               && StringUtils.equalsIgnoreCase(request.getMethod(),"post")){
 try{ 
               //验证谜底与用户输入是否匹配 
               this.validate(new ServletWebRequest(request)); 
          }catch(AuthenticationException e){ 
               response.setContentType("application/json;charset=UTF-8"); 
               response.getWriter().write(objectMapper.writevalueAsString( 
                       RespBean.error("验证码错误"))); 
               //catch异常后,之后的过滤器就不再执行了 
               return; 
          } 
      } 
       filterChain.doFilter(request,response); 
  } 
    
   private void validate(ServletWebRequest request) throws 
ServletRequestBindingException { 
       HttpSession session = request.getRequest().getSession(); 
       String codeInRequest = ServletRequestUtils.getStringParameter( 
               request.getRequest(),"captchaCode"); 
       if(StringUtils.isEmpty(codeInRequest)){ 
           throw new SessionAuthenticationException("验证码不能为空"); 
      } 
       // 获取session中的验证码 
       CaptchaImageModel codeInSession = (CaptchaImageModel) 
                       session.getAttribute("captcha_key"); 
       if(Objects.isNull(codeInSession)) { 
           throw new SessionAuthenticationException("验证码不存在"); 
      } 
       // 校验服务器session池中的验证码是否过期 
       if(codeInSession.isExpired()) { 
           session.removeAttribute("captcha_key"); 
           throw new SessionAuthenticationException("验证码已经过期"); 
      } 
       // 请求验证码校验 
       if(!StringUtils.equals(codeInSession.getCode(), codeInRequest)) { 
           throw new SessionAuthenticationException("验证码不匹配"); 
      } 
}
6 系统实现效果




7 最后-毕设帮助
毕设帮助,开题指导,技术解答
746876041

文章版权说明:

该文章由丹成学长全网第一时间发布,CSDN: mathor-sinor,上述系统为丹成学长开发完成,违版必究,如有项目开发需求请联系 丹成学长.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5691862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存