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

news2024/11/26 4:23:18

作者主页:编程指南针

 

 

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-XX-157

一,项目简介

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

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

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

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

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

三,系统展示

用户登陆:

计划进度管理:

计划进度管理-订单管理

计划进度管理-客户管理

计划进度管理-产品管理

计划进度管理-作业管理

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

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

设备管理—设备台账

设备管理—设备种类

设备管理—设备例检

设备管理—设备故障

设备管理—设备维修

工艺监控—工艺管理 

物料监控—物料信息

系统管理—用户管理

系统管理—角色管理

四,核心代码展示

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 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系统应用的相关模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FlinkSql+Stream综合使用+广播流

Flink状态管理状态的分类Flink容错机制State Vs CheckPointCheckPoint原理State状态后端/State存储介质状态恢复和重启策略SavePointFlink TableAPI&SQL案例广播流状态管理 状态的分类 State ManagerState–开发中推荐使用&#xff1a;Flink自动管理/优化&#xff0c;支持多…

day 32 文件上传二次渲染.htaccess变异免杀

前言&#xff1a; #知识点&#xff1a; 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 #详细点&#xff1a; 1、检测层面&#xff1a;前端&#xff0c;后端等 2、检测内容&#xff1a;文件头&#xff0c;完整性&am…

拥抱 Spring 全新 OAuth 解决方案

以下全文 Spring Authorization Server 简称为: SAS 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护&#xff0c;该项目将不会再进行任何的迭代目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用 作为 SpringBoot 3.0 的…

设计文档编写要点

文章目录设计文档大致流程E-R关系图流程图UML图word制作目录设计文档大致流程 概要 表结构及其之间的关系&#xff08;E-R 图&#xff1a;实体-联系图 Entity Relationship Diagram&#xff09; 业务流程图、时序图&#xff08;按照人操作的维度&#xff09; 程序流程图、时序…

在X11图形环境下开启/关闭勿扰模式及其背后机制

开启/关闭勿扰模式 在Linux系统中、X11图形环境下&#xff0c;开启/关闭勿扰模式很简单&#xff0c;按照以下步骤操作即可&#xff1a; &#xff08;1&#xff09;鼠标左键点击右下角的“^”&#xff0c;即“显示隐藏的图标”。如下图所示&#xff1a; &#xff08;2&#xf…

退火算法研究分析

模拟退火算法采用类似于模拟退火的过程。先在一个高温状态下&#xff0c;逐渐退火&#xff0c;在每个温度下慢慢冷却&#xff0c;最终达到物理基态(相当于算法找到最优解&#xff09; 模拟退火算法属于贪心算法&#xff0c;在其过程中引入随机因素&#xff0c;以一定概率接收一…

Vue挂载(mount)和继承(extend)

vue.$mount 挂载 //index.html文件 <body><div id"app"></div> </body>//index.js文件 //1. 先看看普通的绑定 new Vue({el: #app,// el: document.getElementById(app) template: <div id"app">如果new Vue时候的option的…

【HTML5】弹性盒子实现导航栏和留言框

调CSS就像上方那样&#xff0c;代码逐渐变得扭曲&#xff0c;情绪逐渐变得暴躁。 目录 弹性盒子的核心属性 1、display设置元素生成框 2、弹性盒子比例划分 2.1flex-basis基本宽度 2.2flex-grow放大宽度 2.3flex-shrink缩小宽度 2.4单独的一个flex用法 3、flex-directi…

Windows安装配置Vagrant

1、下载 1.1、连接&#xff1a;https://developer.hashicorp.com/vagrant/downloads 1.2 、选择系统、版本、型号&#xff0c;然后下载 2、安装 2.1、双击运行下载的可执行文件&#xff0c;点击Next 2.2、先同意许可&#xff0c;然后点击Next 2.3、点击Change&#xff0c;选…

数理统计笔记2:总体均值的抽样分布

引言 数理统计笔记的第2篇总结了数理统计中样本均值的分布&#xff0c;可以帮助理解样本均值和总体均值分布之间的联系。举了一个例子可以加深理解&#xff0c;并且还补充了中心极限定理的知识。 一个关键的结论就此诞生了&#xff01;&#xff01;&#xff01; 样本均值的均值…

sqli-labs/Less-50

这一关仍然是以sort作为注入点的 首先我们输入rand() 判断是数字型还是字符型 多次尝试 发生变化 说明属于数字型 接着试试报错注入 输入以下语句 sortupdatexml(1,if(11,concat(0x7e,database(),0x7e),1),1)-- 存在回显 说明可以使用报错注入哦 这一关要训练的是堆叠注入…

Compression-Resistant Backdoor Attack against Deep Neural Networks 论文笔记

论文名称Compression-Resistant Backdoor Attack against Deep Neural Networks作者Mingfu Xue&#xff08;南京航空航天大学&#xff09;会议/出版社未发表pdf&#x1f4c4;在线pdf代码无概要本文提出了一种对图像压缩&#xff08;JPEG&#xff0c;JPEG2000&#xff0c;WEBP&a…

Linux进阶-文件

Linux内核&#xff1a;屏蔽硬件区别&#xff0c;把所有的硬件设备抽象成文件&#xff0c;提供统一的接口给用户使用。 目录 虚拟文件系统&#xff1a;抽象层&#xff0c;对文件的访问实际上是对抽象层的访问。 普通文件系统&#xff1a;ext4、fat32、ubifs 特殊文件系统 文…

java 数据脱敏

1.SQL数据脱敏实现 MYSQL(电话号码,身份证)数据脱敏的实现 -- CONCAT()、LEFT()和RIGHT()字符串函数组合使用&#xff0c;请看下面具体实现-- CONCAT(str1,str2,…)&#xff1a;返回结果为连接参数产生的字符串 -- LEFT(str,len)&#xff1a;返回从字符串str 开始的len 最左字…

NestJS学习:搭建项目、依赖注入、常用命令、RESTful 风格设计

介绍 Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用 JavaScript 的渐进增强的能力&#xff0c;使用并完全支持 TypeScript &#xff08;仍然允许开发者使用纯 JavaScript 进行开发&#xff09;&#xff0c;并结合了 OOP &#xff0…

现代密码学导论-4-完美保密及其三个等价定义

目录 完美保密 Perfectly Secret Encryption 2.1 完美保密的定义 DEFINITION 2.3 完美保密加密方案的定义 LEMMA 2.5 完美保密方案的等价定义(一) 证明引理2.5与定义2.3等价 完美不可区分性 不可区分实验 The adversarial indistinguishability experiment DEFINITION …

基于微信小程序的家校通系统-JAVA【数据库设计、源码、开题报告】

第一章 绪 论 1.1选题背景 随着网络时代的到来&#xff0c;互联网的优势和普及时刻影响并改变着人们的生活方式。在信息技术迅速发展的今天&#xff0c;计算机技术已经遍及全球&#xff0c;使社会发生了巨大的变革。 为了不受时间和地点的限制&#xff0c;智能手机用户可以通…

MySQL学习笔记-----Navicat设置建表

1.数据库字段设置 id 主要设置有bigint 和int两种 长度一般都是20 字符 主要设置 varchar 长度 我一般设置 255 时间 主要是设置为timestamp 混合日期和时间值&#xff0c;时间戳 &#xff0c;建议在java端的DTO或者request设置时间格式 判断状态 比如mybatis-pl…

宋祖德六评岳云鹏,大饼脸、文化低、总有一句能戳中你的内心

都知道娱乐圈有一个纪委书记&#xff0c;那就是万达的公子王思聪&#xff0c;其实在郭德纲的北京德云社&#xff0c;也有一位义务纪委书记。著名导演宋祖德&#xff0c;就是德云社的纪委书记&#xff0c;这些年他把所有的重心&#xff0c;都放在了约束德云社上面。 俗话说&…

Mysql优化-经验分享

目录什么是索引索引类型主键索引唯一索引组合索引前缀索引全文索引空间索引索引的数据结构HASH表二叉树平衡二叉树红黑树B树B树索引的存储引擎MyISAMInnoDB索引优化方向分层SQL优化表设计三范式索引合理使用服务器优化内存升级碎片优化工具的使用explainshow processlistshow p…