✨作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
随着现代工业的快速发展,危险化学品和化学试剂在各行各业中的应用日益广泛,涉及的种类和数量不断增加。这些危险化学品和化学试剂的存储、使用和管理成为一项重要的任务。由于其潜在的危险性,一旦管理不善,就可能引发事故,对人们生命财产安全造成严重威胁。因此,建立一个安全、智能的危化试剂仓储系统显得尤为重要。
尽管目前已经存在一些危化试剂仓储系统,但它们普遍存在以下问题:
系统功能简单,管理手段单一,无法满足复杂多变的危化试剂存储和使用需求;
智能化程度低,无法实现自动化、信息化管理,增加了管理成本和出错率;
缺乏完善的安全管理措施,无法预防和应对危险情况;
系统的可维护性和可扩展性差,不利于长期使用和管理。
本课题旨在研究和开发一个全新的危化试剂仓储系统,该系统能够解决现有解决方案存在的问题,提高危化试剂存储和使用的安全性、和可维护性。具体来说,本课题的研究目的包括:
实现危化试剂信息的数字化管理,方便管理人员和用户随时查询和跟进相关信息;
实现智能化存储管理,根据危化试剂的特性和环境条件自动调整存储环境;
实现自动化出入库管理,减少人工干预,提高工作效率和准确性;
实现信息化安全管理,及时发现和预警安全隐患,预防和应对危险情况;
提高系统的可维护性和可扩展性,方便管理人员进行日常维护和升级。
本课题的研究意义在于为危化试剂的存储和使用提供一种全新的解决方案,提高其安全性。具体来说,本课题的研究意义包括:
保障人们生命财产安全。通过本课题的研究,可以大大降低危化试剂存储和使用过程中发生事故的风险,保障人们生命财产安全;
提高工作效率。本课题研究的系统可以实现自动化、信息化管理,提高工作效率和准确性;
降低管理成本。通过本课题的研究,可以减少人力物力的投入,降低管理成本;
推动相关行业发展。本课题的研究成果可以应用于其他类似行业,推动相关行业发展;
增强国际竞争力。本课题的研究成果具有自主知识产权,可以增强我国在危险化学品和化学试剂领域的国际竞争力。
二、开发环境
- 开发语言:Java
- 数据库:MySQL
- 系统架构:B/S
- 后端:SpringBoot
- 前端:Vue
三、系统功能模块
- 角色:用户、管理员
- 功能:
用户:
试剂信息、安全管理、存储管理、出入库管理、使用记录管理、公告资讯;
管理员:
用户管理、试剂管理、安全管理、存储管理、出入库管理(出入库统计图)、使用记录管理、公告咨询管理、基础数据管理。
四、系统界面展示
- 危化试剂仓储系统界面展示:
五、部分代码设计
- 项目实战-代码参考:
/**
* <p>
* 前端控制器
* </p>
*
* @author admin
* @since 2023-08-14
*/
@Controller
@RequestMapping("/storage")
public class StorageController {
@Autowired
private StorageService storageService;
@Autowired
private MaterialInputMapper materialInputMapper;
@Autowired
private OrderDetailMapper orderDetailMapper;
@Autowired
private OrderDetailService orderDetailService;
@Autowired
private OrdersMapper ordersMapper;
@GetMapping("/list")
public String list(Integer current, Integer size, Model model){
if (current == null) current = 1;
if (size == null) size = 5;
Page<Storage> page = new Page<>(current, size);
Page<Storage> resultsPage = this.storageService.page(page);
model.addAttribute("page",
new PageUtils(
resultsPage.getCurrent(),
resultsPage.getSize(),
resultsPage.getTotal(),
resultsPage.getRecords()
));
return "storageList";
}
@PostMapping("/save")
@ResponseBody
public String save(Storage storage){
try {
if (storage.getStorageId() == null){
this.storageService.save(storage);
}else {
QueryWrapper<OrderDetail> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("storage_id",storage.getStorageId());
List<OrderDetail> list = this.orderDetailService.list(queryWrapper);
for (OrderDetail orderDetail : list) {
orderDetail.setStorageName(storage.getStorageName());
this.orderDetailService.updateById(orderDetail);
}
//还需修改material_input表中的仓库名字
this.storageService.updateById(storage);
}
return "success";
} catch (Exception e) {
return "fail";
}
}
@PostMapping("/delete")
@ResponseBody
public String delete(Integer id){
this.materialInputMapper.clearStorage(id);//返回值可能是null,int接收不了,需要使用Integer类型接收
this.orderDetailMapper.clearStorage(id);
boolean removeById = this.storageService.removeById(id);
if (removeById) return "success";
return "fail";
}
@RequestMapping("/report/list")
public String list(Long current, Long size, Model model, ReportForm reportForm){
if (current == null) current = 1L;
if (size == null) size = 5L;
Long index = (current - 1)* size;
List<OrdersVo> list = this.ordersMapper.storageReportList(index, size,reportForm);
for (OrdersVo ordersVo : list) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ordersVo.setOrderDate(format.format(ordersVo.getOrderDate1()));
}
model.addAttribute("page",
new PageUtils(
current,
size,
this.ordersMapper.storageReportCount(),
list
));
model.addAttribute("storageList",this.storageService.list());
model.addAttribute("reportForm",reportForm);//搜索条件回填
return "storageReportList";
}
@GetMapping("/report/export")
public void exportData(HttpServletResponse response) {
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
String fileName = URLEncoder.encode("仓库统计报表", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//获取数据
List<OrdersVo> storageReportVOS = this.ordersMapper.storageReportVOExportList();
List<StorageReportExportVO> storageReportExportVOS = new ArrayList<>();
for (OrdersVo storageReportVO : storageReportVOS) {
StorageReportExportVO vo = new StorageReportExportVO();
BeanUtils.copyProperties(storageReportVO, vo);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
vo.setOrderDate(format.format(storageReportVO.getOrderDate1()));
storageReportExportVOS.add(vo);
}
EasyExcel.write(response.getOutputStream(), StorageReportExportVO.class)
.registerWriteHandler(new CustomCellWriteHandler())
.sheet("仓库统计")
.doWrite(storageReportExportVOS);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@RequestMapping("/list")
public String list(Integer current, Integer size, Model model, Employee employee) {
if (current == null) current = 1;
if (size == null) size = 5;
Page<Employee> page = new Page<>(current, size);
QueryWrapper<Employee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(employee.getDepartmentId() != null, "department_id", employee.getDepartmentId())
.like(StringUtils.isNotBlank(employee.getEmployeeName()), "employee_name", employee.getEmployeeName())
.eq(StringUtils.isNotBlank(employee.getPhone()), "phone", employee.getPhone())
.eq(employee.getStatus() != null, "status", employee.getStatus());
Page<Employee> resultPage = this.employeeService.page(page, queryWrapper);
//进行转化
List<EmployeeVo> list = new ArrayList<>();
for (Employee record : resultPage.getRecords()) {
EmployeeVo vo = new EmployeeVo();
BeanUtils.copyProperties(record, vo);
Department department = this.departmentService.getById(record.getDepartmentId());
vo.setDepartmentName(department.getDepartmentName());
list.add(vo);
}
model.addAttribute("page",
new PageUtils(
resultPage.getCurrent(),
resultPage.getSize(),
resultPage.getTotal(),
list));
model.addAttribute("departmentList", this.departmentService.list());
model.addAttribute("employee", employee);
return "employeeList";
}
@PostMapping("/setStatus")
@ResponseBody
public String setStatus(Integer status, Integer id) {
Employee employee = new Employee();
employee.setEmployeeId(id);//根据id修改状态
employee.setStatus(status);
boolean updateById = this.employeeService.updateById(employee);
if (updateById) return "success";
return "fail";
}
@PostMapping("/resetPassword")
@ResponseBody
public String resetPassword(Integer id){
Employee employee = new Employee();
employee.setEmployeeId(id);
String password = AesUtils.encryptStr("123456",AesUtils.SECRETKEY);
employee.setPassword(password);
boolean updateById = this.employeeService.updateById(employee);
if (updateById) return "success";
return "fail";
}
@GetMapping("/findById")
public String findById(Integer id, Model model) {
model.addAttribute("employee", this.employeeService.getById(id));
model.addAttribute("departmentList", this.departmentService.list());
return "employeeEdit";
}
@PostMapping("/update")
public String update(Employee employee) {
boolean updateById = this.employeeService.updateById(employee);
if (updateById) return "redirect:/employee/list";//重定向到后台方法
return "error";
}
@GetMapping("/add")
public String findById(Model model) {
model.addAttribute("departmentList", this.departmentService.list());
return "employeeAdd";
}
@PostMapping("/save")
public String save(Employee employee) {
employee.setStatus(1);
employee.setPassword(AesUtils.encryptStr("123456",AesUtils.SECRETKEY));
boolean save = this.employeeService.save(employee);
if (save) return "redirect:/employee/list";//重定向到后台方法
return "error";
}
@PostMapping("/delete")
@ResponseBody
public String delete(Integer id){
QueryWrapper<RoleEmployee> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("employee_id",id);
this.roleEmployeeService.remove(queryWrapper);
boolean removeById = this.employeeService.removeById(id);
if (removeById) return "success";
return "fail";
}
}
/**
* <p>
* 前端控制器
* </p>
*
* @author admin
* @since 2023-08-25
*/
@Controller
@RequestMapping("/materialInput")
public class MaterialInputController {
@Autowired
private MaterialInputService materialInputService;
@Autowired
private SupplierService supplierService;
@Autowired
private OrdersService ordersService;
@Autowired
private OrderDetailService orderDetailService;
@RequestMapping("/list")
public String list(Integer current, Integer size, Model model, MaterialInputSearchForm form){
if (current == null) current = 1;
if (size == null) size = 5;
Page<MaterialInput> page = new Page<>(current,size);
QueryWrapper<MaterialInput> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(form.getSupplierId() != null,"supplier_id",form.getSupplierId())
.like(StringUtils.isNotBlank(form.getMaterialName()),"material_name",form.getMaterialName())
.eq(StringUtils.isNotBlank(form.getBatchNo()),"batch_no",form.getBatchNo())
.eq(form.getStatus() != null,"status",form.getStatus())
.between(StringUtils.isNotBlank(form.getOrderDate1()) && StringUtils.isNotBlank(form.getOrderDate2()),
"order_date",
form.getOrderDate1(),
form.getOrderDate2()
);
Page<MaterialInput> resultPage = this.materialInputService.page(page,queryWrapper);
List<MaterialInput> materialInputs = resultPage.getRecords();
for (MaterialInput materialInput : materialInputs) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
materialInput.setOrderDateStr(format.format(materialInput.getOrderDate()));
}
model.addAttribute("page",
new PageUtils(
resultPage.getCurrent(),
resultPage.getSize(),
resultPage.getTotal(),
resultPage.getRecords()
));
model.addAttribute("supplierList",this.supplierService.list());
model.addAttribute("form",form);
return "materialInputList";
}
@PostMapping("/import")
public String materialInputImport(@RequestParam("file") MultipartFile file, Model model, HttpSession session) throws Exception {
Employee employee = (Employee) session.getAttribute("employee");
String userName = employee.getEmployeeName();
ImportResult importResult = this.materialInputService.excelImport(file.getInputStream(),userName);
if (importResult.getCode().equals(0)) return "redirect:/materialInput/list";
model.addAttribute("errorMsg", importResult.getMsg());
return "materialInput";
}
@GetMapping("/export")
public void export(HttpServletResponse response){
try {
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
String fileName = URLEncoder.encode("采购数据", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
//获取数据
List<MaterialInput> materialInputList = this.materialInputService.list();
List<MaterialInputExportModel> list = new ArrayList<>();
for (MaterialInput materialInput : materialInputList) {
MaterialInputExportModel vo = new MaterialInputExportModel();
BeanUtils.copyProperties(materialInput,vo);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
vo.setOrderDate(format.format(materialInput.getOrderDate()));
String value = null;
switch (materialInput.getStatus()){
case 0:
value = "未审核";
break;
case 1:
value = "已审核";
break;
case 2:
value = "已入库";
break;
}
vo.setStatus(value);
list.add(vo);
}
EasyExcel.write(response.getOutputStream(), MaterialInputExportModel.class)
.registerWriteHandler(new CustomCellWriteHandler())
.sheet("采购数据")
.doWrite(list);
} catch (IOException e) {
e.printStackTrace();
}
}
@PostMapping("/verify")
@ResponseBody
public String verify(Integer status,String idArray,HttpSession session){
try {
String[] split = idArray.split(",");
for (String id : split) {
MaterialInput materialInput = this.materialInputService.getById(id);
materialInput.setStatus(status);
//存入orders
Orders orders = new Orders();
orders.setSupplierId(materialInput.getSupplierId());
orders.setStatus(1);
orders.setInvalid(1);
Employee employee = (Employee) session.getAttribute("employee");
orders.setVerifyPerson(employee.getEmployeeName());
orders.setVerifyDate(new Date());
orders.setEmployeeName(materialInput.getUserName());
orders.setOrderDate(materialInput.getOrderDate());
orders.setOrderType(1);
/*int count = this.ordersService.count(null);
String orderNo = CommonUtils.createOrderNo(count, 1);
materialInput.setOrderNo(orderNo);*/
//更新materialInput
this.materialInputService.updateById(materialInput);
orders.setOrderNo(materialInput.getOrderNo());
this.ordersService.save(orders);
//存入orderDetail
OrderDetail orderDetail = new OrderDetail();
BeanUtils.copyProperties(materialInput,orderDetail);
orderDetail.setOrderFlag("正常");
this.orderDetailService.save(orderDetail);
}
return "success";
} catch (Exception e) {
return "fail";
}
}
@PostMapping("/inStorage")
@ResponseBody
public String inStorage(Integer status,String idArray){
String[] split = idArray.split(",");
List<MaterialInput> list = new ArrayList<>();
for (String id : split) {
MaterialInput materialInput = new MaterialInput();
materialInput.setStatus(status);
materialInput.setMaterialInputId(Integer.parseInt(id));
list.add(materialInput);
}
boolean byId = this.materialInputService.updateBatchById(list);
if (byId) return "success";
return "fail";
}
@PostMapping("/delete")
@ResponseBody
public String delete(String idArray){
String[] split = idArray.split(",");
List<String> list = Arrays.asList(split);
boolean removeByIds = this.materialInputService.removeByIds(list);
if (removeByIds) return "success";
return "fail";
}
}
六、论文参考
- 计算机毕业设计选题推荐_危化试剂仓储系统-论文参考:
七、系统视频
- 危化试剂仓储系统-项目视频:
SpringBoot项目实战:危化试剂仓储系统-选题推荐
结语
SpringBoot项目实战:危化试剂仓储系统-计算机毕业设计选题推荐
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我