项目概述
随着工业 4.0 和智能制造的快速发展,制造企业对生产过程的精细化管理需求日益增长。传统生产管理模式依赖人工记录和纸质单据,存在数据滞后、信息孤岛和效率低下等问题。MES(制造执行系统)作为连接企业计划层与控制层的关键桥梁,能够实现生产过程的实时监控、资源优化和数据分析。
本系统采用前后端分离架构,后端基于 SpringBoot 框架实现 RESTful API;前端使用 Vue.js 框架构建动态交互界面;数据库采用 MySQL 存储生产数据。系统功能涵盖生产计划管理、设备监控、质量追溯、物料管理和报表分析等模块。
数据表设计
生产任务数据表
生产任务数据表用于存储生产工单的基本信息,包括任务状态、优先级和关联设备等。
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| task_id | VARCHAR(32) | 任务编号(主键) |
| task_name | VARCHAR(64) | 任务名称 |
| product_code | VARCHAR(32) | 关联产品编码 |
| device_bind | VARCHAR(32) | 绑定设备编号 |
| task_status | INT | 任务状态(0 待执行,1 进行中,2 完成) |
| priority_level | INT | 优先级(1-5) |
| start_time | DATETIME | 计划开始时间 |
| end_time | DATETIME | 计划结束时间 |
| create_time | DATETIME | 任务创建时间(自动生成) |
设备监控数据表
设备监控数据表记录生产设备的运行状态和实时参数,用于故障预警和性能分析。
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| device_id | VARCHAR(32) | 设备编号(主键) |
| device_name | VARCHAR(64) | 设备名称 |
| runtime_hours | FLOAT | 累计运行时长(小时) |
| current_status | INT | 运行状态(0 离线,1 空闲,2 忙碌,3 故障) |
| last_maintain | DATETIME | 上次维护时间 |
| temperature | FLOAT | 当前温度(℃) |
| vibration_level | FLOAT | 振动幅度(mm/s) |
| update_time | DATETIME | 数据更新时间 |
质量检测数据表
质量检测数据表存储产品质检结果,支持质量追溯与统计分析。
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| check_id | VARCHAR(32) | 检测编号(主键) |
| task_link | VARCHAR(32) | 关联任务编号 |
| operator_id | VARCHAR(32) | 质检员编号 |
| defect_type | VARCHAR(64) | 缺陷类型 |
| check_result | INT | 检测结果(0 合格,1 不合格) |
| check_time | DATETIME | 检测时间 |
| remark | TEXT | 备注信息 |
技术架构
后端技术:Spring Boot
Spring Boot 作为现代 Java 企业级开发的核心框架,以其'约定优于配置'的设计哲学定义了应用开发模式。核心特性包括零配置启动、嵌入式服务器、生产就绪组件及微服务友好性。
前端技术:Vue.js
Vue.js 以其渐进式框架设计和良好的开发者体验成为现代前端开发的首选解决方案。技术亮点包括响应式数据流、组件化架构及丰富的生态系统。
核心代码
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.service.UsersService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UsersController {
@Autowired
private UsersService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if (user == null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(), username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UsersEntity user) {
if (userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) != null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if (user == null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user, null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, UsersEntity user) {
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list(UsersEntity user) {
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
ew.allEq(MPUtil.allEQMapPre(user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id) {
UsersEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的 session 用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request) {
Long id = (Long) request.getSession().getAttribute("userId");
UsersEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user) {
if (userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) != null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UsersEntity user) {
UsersEntity u = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername()));
if (u != null && u.getId() != user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids) {
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}


