项目编号:BS-XX-162
前言:
随着全球经济的快速发展,以及信息化步伐的加快,物流公司对行业信息的需求越来越大,这就促使物流信息网迅速发展,以适应物流行业的市场变化。而经济全球化进程的加快,使现代企业的专业分工和协作对现代物流提出了越来越高的要求,物流行业的人工管理早已不再适应企业发展的要求,信息化、自动化、网络化、智能化、柔性化已成为现代物流的鲜明特征。物流行业的发展,使物流的信息化日益被广大从业者和信息系统提供商所重视。 物流信息网信息的及时性、准确性完全符合国内物流企业对行业信息的要求。同时,现代企业的供应链时刻在提醒我们,物流要在激烈的竞争中占据绝对的优势,必须要求企业及时准确的掌握客户信息,同时对客户的需求做出快速的反应,在最短的时间内以最大限度挖掘和优化物流资源来满足客户需求,从而建立高效的物流经济。
一,项目简介
本项目存在三个角色:顾客、员工、管理员,顾客对应使用的是前台管理系统,而员工和管理员对应使用后台管理系统。前台管理系统包括首页、用户订单、用户信息、关于我们等,后台管理系统包括用户管理、货物流程管理、轨迹管理、财务管理、运营数据等。其主要功能模块图如图1-1所示:
图3-1功能模块图
前台管理系统
客户对象:
(1)客户可以查看个人信息,针对个人信息内容进行修改,但是不能进行删除。
(2)客户进入用户订单页面可以查看自己的所有物流订单信息,还可以在此页面进行下单操作。
(3)客户可以通过首页和关于我们了解公司的基本信息
(4)客户可以在前台页面进行登录账户以及注册账号的操作。
图3-2前台管理系统功能模块图
后台管理系统:
员工对象:
(1)员工可以对员工个人信息进行修改。
(2)员工可以进行货物流程的操作,包括:收件、发件、派件、到件、签收五种操作。
(3)员工可以查看自己的定位,员工可以看到货物运输的轨迹,还可以对运输路线进行规划。
(4)员工可以看到网点财务的数据,以及员工财务数据。
管理员对象:
(1)管理员可以对自己的个人信息进行修改操作。
(2)管理员同样可以进行货物流程的操作,包括:收件、发件、派件、到件、签收五种操作。
(3)管理员可以对该系统内所有用户的个人信息进行增加、查找、修改以及删除操作,管理员还可以给不同的用户设置不同的权限。
(4)管理员可以查看司机位置,查看货物运输的轨迹,以及规划货运运输路线。
(5)管理员可以查看财务管理的所有数据,包括:中心财务数据,网点财务数据以及员工财务数据。
(6)管理员可以看到公司的总体运营数据,以便掌握公司的经营状况,对公司的未来进行规划。
图3-3后台管理系统功能模块图
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发:Springboot+mybatis
前台开发:Vue+ElementUI+Nodejs
三,系统展示
6.1 登录界面原型
6.2 注册界面原型
6.3 首页界面原型
6.4 订单中心界面原型
6.5 个人信息界面原型
6.6 用户管理界面原型
6.7 货物流程管理界面原型
6.8 轨迹管理界面原型
6.9 财务界面原型
6.10 运营数据界面原型
四,核心代码展示
package com.zh.log.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zh.log.common.Result; import com.zh.log.entity.Goods; import com.zh.log.mapper.GoodsMapper; import com.zh.log.service.GoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @RestController @RequestMapping("/finForm") public class FinFormController { @Autowired private GoodsService goodsService; @Autowired private GoodsMapper goodsMapper; //各网点每月营业总额 @GetMapping("/month") public Result bj(){ AtomicInteger m1 = new AtomicInteger(); AtomicInteger m2 = new AtomicInteger(); AtomicInteger m3 = new AtomicInteger(); AtomicInteger m4 = new AtomicInteger(); AtomicInteger m5 = new AtomicInteger(); AtomicInteger m6 = new AtomicInteger(); AtomicInteger m7 = new AtomicInteger(); AtomicInteger m8 = new AtomicInteger(); AtomicInteger m9 = new AtomicInteger(); AtomicInteger m10 = new AtomicInteger(); AtomicInteger m11 = new AtomicInteger(); AtomicInteger m12 = new AtomicInteger(); List<Goods> goodsList = goodsService.list(); QueryWrapper<Goods> wrapper1 =new QueryWrapper<>(); wrapper1.select("goodsPayway").groupBy("goodsPayway"); List<Goods> goods1 = goodsService.list(wrapper1); String[] strname=new String[goods1.size()]; int[][] price = new int[goods1.size()][12]; for (int i=0;i<goods1.size();i++){ strname[i]=goods1.get(i).getGoodsPayway(); } Map<String, Object> map = new HashMap<>(); goodsList.stream().forEach(item->{ String date = item.getGoodsDate(); String[] strNow1 =date.split("-"); int month = Integer.parseInt(strNow1[1]); if(month==1){ int i=0; m1.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } String s = item.getGoodsPayway(); String s1 =strname[i]; if (s.equals(s1)){ price[i][0]=price[i][0]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==2){ int i=0; m2.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][1]=price[i][1]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==3){ int i=0; m3.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][2]=price[i][2]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==4){ int i=0; m4.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][3]=price[i][3]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==5){ int i=0; m5.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][4]=price[i][4]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==6){ int i=0; m6.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][5]=price[i][5]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==7){ int i=0; m7.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][6]=price[i][6]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==8){ int i=0; m8.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][7]=price[i][7]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==9){ int i=0; m9.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][8]=price[i][8]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==10){ int i=0; m10.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][9]=price[i][9]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==11){ int i=0; m11.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][10]=price[i][10]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } if(month==12){ int i=0; m12.addAndGet(Integer.parseInt(item.getGoodsPrice())); while (true){ if(i>=goods1.size()){ break; } if (item.getGoodsPayway().equals(strname[i])){ price[i][11]=price[i][11]+Integer.parseInt(item.getGoodsPrice()); break; } i++; } } }); for (int i=0;i<goods1.size();i++){ ArrayList<Object> list = new ArrayList<>(); for (int j=0;j<12;j++){ list.add(price[i][j]); } String payway = goods1.get(i).getGoodsPayway(); map.put(payway,list); } return Result.success(map); } }
package com.zh.log.controller; import com.zh.log.common.Result; import com.zh.log.entity.Client; import com.zh.log.entity.Role; import com.zh.log.entity.User; import com.zh.log.mapper.RoleMapper; import com.zh.log.service.RoleService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/role") public class RoleController { @Resource private RoleMapper roleMapper; @Resource private RoleService roleService; //修改 @PostMapping public Integer save(@RequestBody Role role) { return roleService.savee(role); } //查询所有 @GetMapping public Result index(){ List<Role> all = roleMapper.findAll(); return Result.success(all); } //删除 @DeleteMapping("/{userid}") public Integer delete(@PathVariable Integer userid){ return roleMapper.deleteById(userid); } //分页查询 @GetMapping("/page") public Map<String, Object> findPage(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam String username ){ pageNum = (pageNum - 1) * pageSize; username = "%" + username + "%"; List<Role> data = roleMapper.selectPage(pageNum,pageSize,username); Integer total = roleMapper.selectTotal(username); Map<String,Object> res = new HashMap<>(); res.put("total",total); res.put("data",data); return res; } }
package com.zh.log.controller; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.http.server.HttpServerRequest; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zh.log.common.Constants; import com.zh.log.common.Result; import com.zh.log.controller.dto.UserPasswordDTO; import com.zh.log.entity.User; import com.zh.log.service.UserService; import com.zh.log.utils.TokenUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import sun.security.util.Password; import java.io.File; import java.io.IOException; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result login(@RequestBody User user) { String username = user.getUsername(); String password = user.getPassword(); if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) { return Result.error(Constants.CODE_400,"参数错误"); } User dto = userService.login(user); return Result.success(dto); } @GetMapping("/gettoken") public Result token(HttpServerRequest request){ User user = TokenUtils.getCurrentUser(); String role = user.getRole(); return Result.success(role); } @PostMapping("/register") public Result register(@RequestBody User user) { String username = user.getUsername(); String password = user.getPassword(); if (StrUtil.isBlank(username) || StrUtil.isBlank(password)) { return Result.error(Constants.CODE_400, "参数错误"); } return Result.success(userService.register(user)); } @GetMapping("/username/{username}") public Result findByUsername(@PathVariable String username) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("username", username); return Result.success(userService.getOne(queryWrapper)); } //修改用户信息 @PostMapping("/save") public Result save(@RequestBody User user) { return Result.success(userService.saveOrUpdate(user)); } /** * 修改密码 * @param userPasswordDTO * @return */ @PostMapping("/password") public Result password(@RequestBody UserPasswordDTO userPasswordDTO) { userPasswordDTO.setPassword(SecureUtil.md5(userPasswordDTO.getPassword())); userPasswordDTO.setNewPassword(SecureUtil.md5(userPasswordDTO.getNewPassword())); userService.updatePassword(userPasswordDTO); return Result.success(); } }
五,项目总结
智能物流系统是对PC端用户使用的,所以用户基数大,需要合理划分后台资源,且现如今生活速度等越来越快,各种反应速度和分配速度应当简白明了。图4-1为系统部署图
图4-1 系统部署图