基于SSM实现企业生资源管理系统-ERP系统

简介: 基于SSM实现企业生资源管理系统-ERP系统

项目编号:BS-XX-157

一,项目简介


这是一个生产管理ERP系统。依托科技计划重点项目“制造装备物联及生产管理系统研发”,主要包括:计划进度、设备管理、工艺监控、物料监控、人员监控、质量监控、系统管理7大模块。系统采用SSM框架开发实现,前端主要基于JQUERY-UI实现页面布局展示。


ERP(Enterprise Resource Planning,企业资源计划)系统,是进行物质资源、资金资源和信息资源集成一体化管理的企业信息管理系统,ERP统领企业全局,为管理层服务,重心在于企业决策,ERP对企业宏观管理,一个企业一套ERP,具有整合性、系统性、灵活性、实时控制性等显著特点。ERP 系统的供应链管理思想对企业提出了更高的要求,是企业在信息化社会、在知识经济时代繁荣发展的核心管理模式。

image.png

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:SSM框架开发

前端开发技术:ajax+jquery+jquery-ui

三,系统展示


用户登陆:

image.png

计划进度管理:

image.png

计划进度管理-订单管理

image.png

计划进度管理-客户管理

image.png

计划进度管理-产品管理

image.png

计划进度管理-作业管理

image.png

计划进度管理-生产计划管理

image.png

计划进度管理-生产派工管理

image.png

设备管理—设备台账

image.png

设备管理—设备种类

image.png

设备管理—设备例检

image.png

设备管理—设备故障

image.png

设备管理—设备维修

image.png

工艺监控—工艺管理

image.png

物料监控—物料信息

image.png

系统管理—用户管理

image.png

系统管理—角色管理

image.png

image.png

四,核心代码展示


package com.megagao.production.ssm.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.megagao.production.ssm.domain.customize.ActiveUser;
import com.megagao.production.ssm.util.CollectionsFactory;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import static com.megagao.production.ssm.common.Constants.NO_PERMISSION;
/**
 *
 * 权限判断controller
 *
 */
@RestController
public class AuthorityJudgeController {
  private static final Logger logger = LoggerFactory.getLogger(AuthorityJudgeController.class);
  @RequestMapping("*/*_judge")
  public Map<String,Object> authorityJudge(HttpServletRequest request) throws Exception{
    Subject subject = SecurityUtils.getSubject();
    ActiveUser activeUser = (ActiveUser) subject.getPrincipal();
    //根据uri,使用shiro判断相应权限
    String uri = request.getRequestURI();
    String[] names = uri.split("/");
    String featureName = names[2];
    String operateName = names[3].split("_")[0];
    Map<String,Object> map = CollectionsFactory.newHashMap();
    if(!activeUser.getUserStatus().equals("1")){
      if (logger.isDebugEnabled()) {
        logger.debug(NO_PERMISSION, "账户已被锁定!");
      }
      map.put("msg", "您的账户已被锁定,请切换账户登录!");
    }else if(!activeUser.getRoleStatus().equals("1")){
      if (logger.isDebugEnabled()) {
        logger.debug(NO_PERMISSION, "角色已被锁定!");
      }
      map.put("msg", "当前角色已被锁定,请切换账户登录!");
    }else{
      if (logger.isDebugEnabled()) {
        logger.debug(NO_PERMISSION, "没有权限!");
      }
      if(!subject.isPermitted(featureName+":"+operateName)){
        map.put("msg", "您没有权限,请切换用户登录!");
      }
    }
    return map;
  }
}
package com.megagao.production.ssm.controller;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.megagao.production.ssm.service.FileService;
import com.megagao.production.ssm.util.DownloadUtil;
import com.megagao.production.ssm.util.JsonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
 *
 * 上传图片处理
 *
 */
@Controller
public class FileController {
  @Autowired
  private FileService fileService;
  @RequestMapping(value="/file/upload", method=RequestMethod.POST)
  @ResponseBody
  public String handleFileUpload(MultipartHttpServletRequest request) throws Exception{
    Iterator<String> iterator = request.getFileNames();
    String json = null;
    while (iterator.hasNext()) {
      String fileName = iterator.next();
      MultipartFile multipartFile = request.getFile(fileName);
      Map<String,Object> result = fileService.uploadFile(multipartFile);
      json = JsonUtils.objectToJson(result);
    }
    return json;
  }
  @RequestMapping(value="/file/delete")
  @ResponseBody
  public String handleFileDelete(@RequestParam String fileName) throws Exception{
    fileService.deleteFile(fileName);
    Map<String,Object> result = new HashMap<String,Object>(); 
    result.put("data", "success");
    String json = JsonUtils.objectToJson(result);
    return json;
  }
  @RequestMapping(value="/file/download")
  public void handleFileDownload(@RequestParam String fileName, HttpServletResponse response) throws Exception{
    fileName = fileName.substring(fileName.lastIndexOf("/")+1);
    String filePath = "D:\\upload\\temp\\file\\"+fileName;
    DownloadUtil du = new DownloadUtil();
    du.download(filePath, fileName, response, false);
  }
}
package com.megagao.production.ssm.controller;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.megagao.production.ssm.service.FileService;
import com.megagao.production.ssm.util.DownloadUtil;
import com.megagao.production.ssm.util.JsonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
 *
 * 上传图片处理
 *
 */
@Controller
public class FileController {
  @Autowired
  private FileService fileService;
  @RequestMapping(value="/file/upload", method=RequestMethod.POST)
  @ResponseBody
  public String handleFileUpload(MultipartHttpServletRequest request) throws Exception{
    Iterator<String> iterator = request.getFileNames();
    String json = null;
    while (iterator.hasNext()) {
      String fileName = iterator.next();
      MultipartFile multipartFile = request.getFile(fileName);
      Map<String,Object> result = fileService.uploadFile(multipartFile);
      json = JsonUtils.objectToJson(result);
    }
    return json;
  }
  @RequestMapping(value="/file/delete")
  @ResponseBody
  public String handleFileDelete(@RequestParam String fileName) throws Exception{
    fileService.deleteFile(fileName);
    Map<String,Object> result = new HashMap<String,Object>(); 
    result.put("data", "success");
    String json = JsonUtils.objectToJson(result);
    return json;
  }
  @RequestMapping(value="/file/download")
  public void handleFileDownload(@RequestParam String fileName, HttpServletResponse response) throws Exception{
    fileName = fileName.substring(fileName.lastIndexOf("/")+1);
    String filePath = "D:\\upload\\temp\\file\\"+fileName;
    DownloadUtil du = new DownloadUtil();
    du.download(filePath, fileName, response, false);
  }
}
package com.megagao.production.ssm.controller;
import com.megagao.production.ssm.util.CollectionsFactory;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.Map;
import static com.megagao.production.ssm.common.Constants.VALIDATE_CODE;
@Controller
public class LoginController {
  /**
   * shiro ajax登录 
   */
  @RequestMapping(value = "/ajaxLogin")
  @ResponseBody
  public Map<String,Object> ajaxLogin(@RequestParam String username,
                            @RequestParam String password,
                            @RequestParam(required=false) String randomcode,
                            HttpSession session) throws Exception{
    Map<String,Object> map = CollectionsFactory.newHashMap();
    if(randomcode !=null && !randomcode.equals("")){
        //取出session的验证码(正确的验证码)
        String validateCode = (String)session.getAttribute(VALIDATE_CODE);
      //页面中输入的验证和session中的验证进行对比 
      if(validateCode!=null && !randomcode.equals(validateCode)){
        //如果校验失败,将验证码错误失败信息放入map中
        map.put("msg", "randomcode_error");
        //直接返回,不再校验账号和密码 
        return map; 
      }
      }
    Subject currentUser = SecurityUtils.getSubject();
      if (!currentUser.isAuthenticated()) {
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
          try{
              currentUser.login(token);
          }catch(UnknownAccountException ex){
            map.put("msg", "account_error");
          }catch(IncorrectCredentialsException ex){
            map.put("msg", "password_error");
          }catch(AuthenticationException ex){
            map.put("msg", "authentication_error");
          }
      }
      //返回json数据
      return map;
  }
}
package com.megagao.production.ssm.controller.system;
import java.util.List;
import com.megagao.production.ssm.domain.customize.CustomResult;
import com.megagao.production.ssm.service.PermissionService;
import com.megagao.production.ssm.domain.authority.SysRolePermission;
import com.megagao.production.ssm.domain.customize.EUDataGridResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/permission")
public class PermissionController {
  @Autowired
  private PermissionService permissionService;
  @RequestMapping("/get/{permissionId}")
  @ResponseBody
  public SysRolePermission getItemById(@PathVariable String permissionId) throws Exception{
    SysRolePermission sysRolePermission = permissionService.get(permissionId);
    return sysRolePermission;
  }
  @RequestMapping("/find")
  public String find() throws Exception{
    return "permission_list";
  }
  @RequestMapping("/get_data")
  @ResponseBody
  public List<SysRolePermission> getData() throws Exception{
    return permissionService.find();
  }
  @RequestMapping("/get_permission")
  @ResponseBody
  public SysRolePermission getPermission(String roleId) throws Exception{
    return permissionService.getByRoleId(roleId);
  }
  @RequestMapping("/add")
  public String add() throws Exception{
    return "permission_add";
  }
  @RequestMapping("/edit")
  public String edit() throws Exception{
    return "permission_edit";
  }
  @RequestMapping("/list")
  @ResponseBody
  public EUDataGridResult getItemList(Integer page, Integer rows, SysRolePermission sysRolePermission)
      throws Exception{
    EUDataGridResult result = permissionService.getList(page, rows, sysRolePermission);
    return result;
  }
  @RequestMapping(value="/insert", method=RequestMethod.POST)
  @ResponseBody
  private CustomResult insert(SysRolePermission sysRolePermission) throws Exception {
    CustomResult result = permissionService.insert(sysRolePermission);
    return result;
  }
  @RequestMapping(value="/update")
  @ResponseBody
  private CustomResult update(SysRolePermission sysRolePermission) throws Exception {
    CustomResult result = permissionService.update(sysRolePermission);
    return result;
  }
  @RequestMapping(value="/update_by_roleid")
  @ResponseBody
  private CustomResult updateByRoleId(String roleId, String permission) throws Exception {
    CustomResult result = permissionService.updateByRoleId(roleId, permission);
    return result;
  }
  @RequestMapping(value="/update_all")
  @ResponseBody
  private CustomResult updateAll(SysRolePermission sysRolePermission) throws Exception {
    CustomResult result = permissionService.updateAll(sysRolePermission);
    return result;
  }
  @RequestMapping(value="/delete")
  @ResponseBody
  private CustomResult delete(String id) throws Exception {
    CustomResult result = permissionService.delete(id);
    return result;
  }
}
package com.megagao.production.ssm.controller.system;
import java.util.List;
import com.megagao.production.ssm.domain.vo.RoleVO;
import com.megagao.production.ssm.domain.customize.CustomResult;
import com.megagao.production.ssm.domain.customize.EUDataGridResult;
import com.megagao.production.ssm.domain.authority.SysRole;
import com.megagao.production.ssm.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.validation.Valid;
@Controller
@RequestMapping("/role")
public class RoleController {
  @Autowired
  private RoleService roleService;
  @RequestMapping("/get/{roleId}")
  @ResponseBody
  public RoleVO getItemById(@PathVariable String roleId) throws Exception{
    RoleVO sysRole = roleService.get(roleId);
    return sysRole;
  }
  @RequestMapping("/find")
  public String find() throws Exception{
    return "role_list";
  }
  @RequestMapping("/permission")
  public String permission() throws Exception{
    return "role_permission";
  }
  @RequestMapping("/get_data")
  @ResponseBody
  public List<RoleVO> getData() throws Exception{
    return roleService.find();
  }
  @RequestMapping("/add")
  public String add() throws Exception{
    return "role_add";
  }
  @RequestMapping("/edit")
  public String edit() throws Exception{
    return "role_edit";
  }
  @RequestMapping("/list")
  @ResponseBody
  public EUDataGridResult getItemList(Integer page, Integer rows, RoleVO role) throws Exception{
    EUDataGridResult result = roleService.getList(page, rows, role);
    return result;
  }
  @RequestMapping(value="/insert", method=RequestMethod.POST)
  @ResponseBody
  private CustomResult insert(@Valid SysRole role, BindingResult bindingResult) throws Exception {
    CustomResult result;
    if(bindingResult.hasErrors()){
      FieldError fieldError = bindingResult.getFieldError();
      return CustomResult.build(100, fieldError.getDefaultMessage());
    }
    if(roleService.findByRoleNameAndId(role.getRoleName(), role.getRoleId()).size()>0){
      result = new CustomResult(0, "该角色名已经存在,请更换角色名!", null);
    }else if(roleService.get(role.getRoleId()) != null){
      result = new CustomResult(0, "该角色编号已经存在,请更换角色编号!", null);
    }else{
      result = roleService.insert(role);
    }
    return result;
  }
  @RequestMapping(value="/update")
  @ResponseBody
  private CustomResult update(SysRole role) throws Exception {
    CustomResult result = roleService.update(role);
    return result;
  }
  @RequestMapping(value="/update_all")
  @ResponseBody
  private CustomResult updateAll(@Valid SysRole role, BindingResult bindingResult) throws Exception {
    CustomResult result;
    if(bindingResult.hasErrors()){
      FieldError fieldError = bindingResult.getFieldError();
      return CustomResult.build(100, fieldError.getDefaultMessage());
    }
    if(roleService.findByRoleNameAndId(role.getRoleName(), role.getRoleId()).size()>0){
      result = new CustomResult(0, "该角色名已经存在,请更换角色名!", null);
    }else if(roleService.get(role.getRoleId()) != null){
      result = new CustomResult(0, "该角色编号已经存在,请更换角色编号!", null);
    }else{
      result = roleService.updateAll(role);
    }
    return result;
  }
  @RequestMapping(value="/delete")
  @ResponseBody
  private CustomResult delete(String id) throws Exception {
    CustomResult result = roleService.delete(id);
    return result;
  }
  @RequestMapping(value="/delete_batch")
  @ResponseBody
  private CustomResult deleteBatch(String[] ids) throws Exception {
    CustomResult result = roleService.deleteBatch(ids);
    return result;
  }
  //根据角色id查找
  @RequestMapping("/search_role_by_roleId")
  @ResponseBody
  public EUDataGridResult searchRoleByRoleId(Integer page, Integer rows, String searchValue) throws Exception{
    EUDataGridResult result = roleService.searchRoleByRoleId(page, rows, searchValue);
    return result;
  }
  //根据角色名查找
  @RequestMapping("/search_role_by_roleName")
  @ResponseBody
  public EUDataGridResult searchRoleByRoleName(Integer page, Integer rows, String searchValue) throws Exception{
    EUDataGridResult result = roleService.searchRoleByRoleName(page, rows, searchValue);
    return result;
  }
}

五,项目总结


本项目功能齐全,前后端交互较好,完整的实现了一个企业ERP系统应用的相关模块。

相关文章
|
2月前
|
供应链 JavaScript 数据挖掘
一套SaaS ERP管理系统源码,生产管理系统源代码
小微企业SaaS ERP系统,基于SpringBoot+Vue+UniAPP开发,集成进销存、采购销售、MRP生产、财务、CRM、OA等全流程管理功能,支持自定义表单与工作流,助力企业数字化转型。
174 1
|
3月前
|
消息中间件 缓存 JavaScript
如何开发ERP(离散制造-MTO)系统中的生产管理板块(附架构图+流程图+代码参考)
本文详解离散制造MTO模式下的ERP生产管理模块,涵盖核心问题、系统架构、关键流程、开发技巧及数据库设计,助力企业打通计划与执行“最后一公里”,提升交付率、降低库存与浪费。
|
3月前
|
消息中间件 JavaScript 前端开发
如何开发ERP(离散制造-MTO)系统中的技术管理板块(附架构图+流程图+代码参考)
本文详解ERP(离散制造-MTO)系统中的技术管理板块,涵盖产品定义、BOM、工序、工艺文件及变更控制的结构化与系统化管理。内容包括技术管理的核心目标、总体架构、关键组件、业务流程、开发技巧与最佳实践,并提供完整的参考代码,助力企业将技术数据转化为可执行的生产指令,提升制造效率与质量。
|
3月前
|
消息中间件 JavaScript 关系型数据库
如何开发一套ERP(离散制造-MTO)系统(附架构图+流程图+代码参考)
本文介绍了面向离散制造-MTO(按订单生产)模式的ERP系统设计与实现方法。内容涵盖ERP系统定义、总体架构设计、主要功能模块解析、关键业务流程(订单到交付、BOM展开、MRP逻辑、排产等)、开发技巧(DDD、微服务、事件驱动)、参考代码示例、部署上线注意事项及实施效果评估。旨在帮助企业与开发团队构建高效、灵活、可扩展的ERP系统,提升订单交付能力与客户满意度。
|
3月前
|
供应链 JavaScript BI
如何2小时搭建一套(离散制造-MTO)ERP系统?
针对离散制造MTO模式痛点,本文分享如何用零代码工具两小时内搭建极简ERP系统,实现订单、生产、物料与库存实时联动,提升交付准时率与管理透明度,降低出错与成本。
|
3月前
|
监控 供应链 前端开发
如何开发ERP(离散制造-MTO)系统中的财务管理板块(附架构图+流程图+代码参考)
本文详解离散制造MTO企业ERP系统中财务管理模块的搭建,聚焦应收账款与应付账款管理,涵盖核心功能、业务流程、开发技巧及Python代码示例,助力企业实现财务数据准确、实时可控,提升现金流管理能力。
|
3月前
|
供应链 监控 JavaScript
如何开发ERP(离散制造-MTO)系统中的库存管理板块(附架构图+流程图+代码参考)
本文详解MTO模式下ERP库存管理的关键作用,涵盖核心模块、业务流程、开发技巧与代码示例,助力制造企业提升库存周转率、降低缺货风险,实现高效精准的库存管控。
|
3月前
|
自然语言处理 安全 搜索推荐
ERP系统上手指南:首页导航+常见操作详解!
本文是ERP系统入门教程首篇,针对新手解决“如何上手”问题。涵盖登录、界面导航、基础操作、权限管理及常见问题,以简道云为例,手把手教你从0开始使用ERP,打通企业数字化第一关。
|
3月前
|
消息中间件 JavaScript BI
如何开发ERP(离散制造-MTO)系统中的客户管理板块(附架构图+流程图+代码参考)
本文详解离散制造-MTO模式下ERP系统客户管理模块的设计与实现,涵盖架构图、流程图、功能拆解、开发技巧及TypeScript参考代码,助力企业打通客户信息与报价、生产、交付全链路,提升响应效率与订单准交率。
|
3月前
|
JSON 前端开发 关系型数据库
如何开发ERP(离散制造-MTO)系统中的销售管理板块(附架构图+流程图+代码参考)
针对离散制造MTO模式,销售管理是业务核心入口,贯穿报价、订单、ATP、排产与交付。本文详解其架构设计、关键流程、数据模型及开发实践,助力企业提升交付准确率与运营效率。

热门文章

最新文章