基于java+ssm+vue的物流配送管理系统

项目介绍

如今,科学技术的力量越来越强大,通过结合较为成熟的计算机技术,促进了学校、医疗、商城等许多行业领域的发展。为了顺应时代的变化,各行业结合互联网、人工智能等技术,纷纷开展了管理信息化建设。传统的物流配送信息管理模式,主要以人工记录的方式统计和存储物流配送信息,这种管理模式容易丢失信息,并且不方便管理人员更新和查询相关数据。相比于传统管理模式,信息化管理模式主要使用计算机存储和管理相关信息记录,操作简单便捷,并且具体较强的灵活性,容易对数据实现查询和更新操作,有利于相关人员在同等时间内,完成更多的工作,并且能够尽可能的减少工作人员发生失误的概率。在idea集成开发平台上,物流配送管理系统采用了B/S开发结构模式,并且通过使用Java语言编写相关代码,设计系统功能模块,MySQL数据库设计数据表格,存储物流配送信息,Tomcat服务器发布系统网址,处理请求和响应消息。本系统的开发,改进企业管理人员的工作模式,有利于简化工作流程,加快工作进度,提高信息处理效率。

4.1系统的总体设计
本系统是以B/S开发结构为基础进行设计和实现的,并且通过关键的开发技术,比如Java语言、SSM框架、MySQL数据库等技术,对系统的功能模块、后台管理模块等进行实现,系统功能实现后,用户可以通过使用浏览器,运行和使用系统。通过需求分析的相关内容,可以确定用户对于本系统的具体使用需求,进而规划出系统基本需要具备的功能模块。基于web的物流配送管理系统的使用对象主要分为管理员角色和用户角色,主要的功能需求包括用户管理、车辆信息管理、货物订单管理等。系统总体功能设计图如图4-1所示。
在这里插入图片描述

开发环境

编程语言:Java
数据库 :Mysql
系统架构:B/S
后端框架:SSM
编译工具:idea或者eclipse,jdk1.8,maven
支持定做:java/php/python/android/小程序/vue/爬虫/c#/asp.net

系统实现

5.1个人中心
个人中心模块设计的主要目的是方便用户对个人信息进行管理,用户可以根据自己的实际需求,选择每隔一段时间,对个人账户的密码等相关信息进行更新操作,修改密码界面设计如图5-1所示,个人信息界面如图5-2所示。
在这里插入图片描述

图5-1修改密码界面
在这里插入图片描述

图5-2个人信息界面

5.2管理员管理
管理员管理模块设计的主要目的是方便管理用户对相关的管理员信息进行管理,管理用户可以选择查看管理员的用户名,修改管理员的密码,管理员管理界面设计如图5-3所示。
在这里插入图片描述

图5-3管理员管理界面

5.3员工管理
员工管理模块设计的主要目的是方便管理用户对相关的员工信息进行管理,管理用户可以选择查看员工的邮箱,修改员工的手机号码,员工管理界面设计如图5-4所示。
在这里插入图片描述

图5-4用户管理界面

5.4客户管理
客户管理模块设计的主要目的是方便管理用户对相关的客户信息进行管理,管理用户可以选择查看客户的邮箱,修改客户的手机号码,客户管理界面设计如图5-5所示。
在这里插入图片描述

图5-5客户管理界面

5.5车辆信息管理
车辆信息管理模块设计的主要目的是方便用户对相关的车辆信息进行管理,用户可以选择查看车辆的详细信息,修改车辆的名称,车辆信息管理界面设计如图5-6所示。
在这里插入图片描述

图5-6车辆信息管理界面

5.6基础数据管理
基础数据管理模块设计的主要目的是方便用户对相关的部门、货物类型、公告类型信息进行管理,用户可以选择查看部门、货物类型、公告类型的详细信息,修改部门、货物类型、公告类型的名称,部门管理界面设计如图5-7所示,货物类型管理界面设计如图5-8所示,公告类型管理界面设计如图5-9所示。
在这里插入图片描述

图5-7部门管理界面
在这里插入图片描述

图5-8货物类型管理界面
在这里插入图片描述

图5-9公告类型管理界面

5.7货物信息管理
货物信息管理模块设计的主要目的是方便用户对相关的货物、货物订单信息进行管理,用户可以选择查看货物、货物订单的详细信息,修改货物的名称,修改货物订单的送货地点,货物信息管理界面设计如图5-10所示,货物订单管理界面设计如图5-11所示。
在这里插入图片描述

图5-10货物信息管理界面
在这里插入图片描述

图5-11货物订单管理界面

5.8出入库管理
出入库管理模块设计的主要目的是方便用户对相关的出入库信息进行管理,用户可以选择查看出入库的详细信息,修改出入库的名称,出入库管理界面设计如图5-12所示,出入库详情管理界面设计如图5-13所示。
在这里插入图片描述

图5-12出入库管理界面
在这里插入图片描述

图5-13出入库详情管理界面

5.9公告信息管理
公告信息模块设计的主要目的是方便用户对相关的公告信息进行管理,用户可以选择查看公告的详细信息,修改公告的名称,公告信息管理界面设计如图5-14所示。
在这里插入图片描述

图5-14公告信息界面

核心代码

package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 货物信息
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/goods")
public class GoodsController {
    private static final Logger logger = LoggerFactory.getLogger(GoodsController.class);

    @Autowired
    private GoodsService goodsService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表service

    @Autowired
    private YonghuService yonghuService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("员工".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        if(params.get("orderBy")==null || params.get("orderBy")==""){
            params.put("orderBy","id");
        }
        PageUtils page = goodsService.queryPage(params);

        //字典表数据转换
        List<GoodsView> list =(List<GoodsView>)page.getList();
        for(GoodsView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        GoodsEntity goods = goodsService.selectById(id);
        if(goods !=null){
            //entity转view
            GoodsView view = new GoodsView();
            BeanUtils.copyProperties( goods , view );//把实体数据重构到view中

            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody GoodsEntity goods, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,goods:{}",this.getClass().getName(),goods.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<GoodsEntity> queryWrapper = new EntityWrapper<GoodsEntity>()
            .eq("goods_name", goods.getGoodsName())
            .eq("goods_types", goods.getGoodsTypes())
            .eq("goods_kucun_number", goods.getGoodsKucunNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GoodsEntity goodsEntity = goodsService.selectOne(queryWrapper);
        if(goodsEntity==null){
            goods.setCreateTime(new Date());
            goodsService.insert(goods);
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody GoodsEntity goods, HttpServletRequest request){
        logger.debug("update方法:,,Controller:{},,goods:{}",this.getClass().getName(),goods.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<GoodsEntity> queryWrapper = new EntityWrapper<GoodsEntity>()
            .notIn("id",goods.getId())
            .andNew()
            .eq("goods_name", goods.getGoodsName())
            .eq("goods_types", goods.getGoodsTypes())
            .eq("goods_kucun_number", goods.getGoodsKucunNumber())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        GoodsEntity goodsEntity = goodsService.selectOne(queryWrapper);
        if("".equals(goods.getGoodsPhoto()) || "null".equals(goods.getGoodsPhoto())){
                goods.setGoodsPhoto(null);
        }
        if(goodsEntity==null){
            goodsService.updateById(goods);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        goodsService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<GoodsEntity> goodsList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("../../upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            GoodsEntity goodsEntity = new GoodsEntity();
//                            goodsEntity.setGoodsName(data.get(0));                    //货物名称 要改的
//                            goodsEntity.setGoodsTypes(Integer.valueOf(data.get(0)));   //货物类型 要改的
//                            goodsEntity.setGoodsPhoto("");//详情和图片
//                            goodsEntity.setGoodsKucunNumber(Integer.valueOf(data.get(0)));   //货物数量 要改的
//                            goodsEntity.setGoodsMoney(data.get(0));                    //货物价格 要改的
//                            goodsEntity.setGoodsContent("");//详情和图片
//                            goodsEntity.setCreateTime(date);//时间
                            goodsList.add(goodsEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        goodsService.insertBatch(goodsList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}

论文参考

在这里插入图片描述

目录
第一章 绪论 1
1.1研究背景与意义 1
1.2国内外研究现状 1
1.3论文组织结构 1
第二章 相关技术介绍 3
2.1 B/S架构 3
2.2 Java语言 3
2.3 MySQL数据库 3
2.4 JSP技术 4
第三章 系统分析 5
3.1系统的需求分析 5
3.2系统的可行性分析 5
3.2.1经济可行性 5
3.2.2技术可行性 5
3.2.3操作可行性 6
第四章 系统设计 7
4.1系统的总体设计 7
4.2数据库设计 7
4.2.1概念设计 7
4.2.2逻辑设计 11
第五章 系统实现 15
5.1个人中心 15
5.2管理员管理 15
5.3员工管理 15
5.4客户管理 16
5.5车辆信息管理 16
5.6基础数据管理 17
5.7货物信息管理 18
5.8出入库管理 19
5.9公告信息管理 19
第六章 系统测试 21
6.1系统测试内容 21
6.2测试结果分析 22
第七章 总结与展望 23
致谢 24
参考文献 25

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_3306428634

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值