Java项目:快递物流管理系统(java+SpringBoot+shiro+Bootstrap+ssm+maven+mysql)

本文介绍了使用SpringBoot、SSM、Shiro开发的物流管理系统,涉及角色权限控制、菜单管理、管理员与角色编辑、业务员操作限制等功能。管理员可以管理用户、角色,业务员只能添加客户和订单,而财务可查看订单详情并导出Excel。
摘要由CSDN通过智能技术生成

源码获取:博客首页 "资源" 里下载!

项目技术:

使用 spring boot,基于 ssm 框架和 shiro 安全框架,开发的一个物流管理系统。前端使用的是 H-ui 开源框架,运用了 Bootstrap table、zTree、PageHelper、jQuery validate 等插件。

特点

1. 基于 spring boot、maven 构建;
2. 运用了 spring、spring mvc、mybatis 和 shiro 框架;
3. 采用了 RBAC 的思路设计系统,采用了 Mysql 作为数据库支持;
4. 不同的角色登录系统会有不同的菜单列表,且会根据角色返回特定的数据;
5. 拥有基础数据管理模块,管理员管理模块,角色管理模块,权限管理模块,客户管理模块,订单管理模块和业务处理模块;

6. 能够实现完整的业务流程:添加客户、添加订单、订单处理、财务报表。

细节介绍

1. 业务员访问时,只能访问客户管理、订单管理、业务处理菜单,且只有添加的权力,没有修改和删除的权力;
2. 业务员添加订单时,只能基于自己拥有的客户添加;
3. 业务经理拥有客户管理、订单管理、业务处理的所有功能,可以查看所有业务员的客户和订单;
4. 总经理角色可以查看所有数据,但是没有修改的权力;
5. 仓管员只有业务处理中,测量物品信息和入库的功能,其他数据不可修改;

6. 财务可以查看审核订单价格详情并导出为 excel 表格。

运行环境:

1. JDK 1.8;
2. Maven;
3. Tomcat 8;
4. Mysql 8.0/Mysql 5.7均可。
 

使用前修改 application.properties 里的数据库的连接信息即可。可以通过 dataBase 目录下的 sql 文件创建所需要的表,数据库名字为 logistic_system。

测试账号

> username:admin

> password:123456

 

 

 

 

 

 

后台管理员管理控制器:

/**
 * 后台管理员管理控制器
 * @author yy
 *
 */
@RequestMapping("/admin/user")
@Controller
public class UserController {

	@Autowired
	private UserService userService;
	@Autowired
	private RoleService roleService;
	@Autowired
	private OperaterLogService operaterLogService;
	/**
	 * 管理员列表页面
	 * @param model
	 * @param user
	 * @param pageBean
	 * @return
	 */
	@RequestMapping(value="/list")
	public String list(Model model,User user,PageBean<User> pageBean){
		model.addAttribute("title", "管理员列表");
		model.addAttribute("username", user.getUsername());
		model.addAttribute("pageBean", userService.findList(pageBean,user.getUsername(), UserRoleTypeEnum.ADMIN));
		return "admin/user/list";
	}
	
	/**
	 * 新增管理员页面
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/add",method=RequestMethod.GET)
	public String add(Model model){
		model.addAttribute("roles", roleService.findAllByRoleType(UserRoleTypeEnum.ADMIN));
		return "admin/user/add";
	}
	
	/**
	 * 管理员添加表单提交处理
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/add",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> add(User user){
		//用统一验证实体方法验证是否合法
		CodeMsg validate = ValidateEntityUtil.validate(user);
		if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
			return Result.error(validate);
		}
		if(user.getRole() == null || user.getRole().getId() == null){
			return Result.error(CodeMsg.ADMIN_USER_ROLE_EMPTY);
		}
		//判断管理员名是否存在
		if(userService.isExistUsername(user.getUsername(), 0L)){
			return Result.error(CodeMsg.ADMIN_USERNAME_EXIST);
		}
		user.setUserType(UserRoleTypeEnum.ADMIN);
		//到这说明一切符合条件,进行数据库新增
		if(userService.save(user) == null){
			return Result.error(CodeMsg.ADMIN_USE_ADD_ERROR);
		}
		operaterLogService.add("添加管理员,管理员名:" + user.getUsername());
		return Result.success(true);
	}
	
	/**
	 * 管理员编辑页面
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/edit",method=RequestMethod.GET)
	public String edit(Model model,@RequestParam(name="id",required=true)Long id){
		model.addAttribute("roles", roleService.findAllByRoleType(UserRoleTypeEnum.ADMIN));
		model.addAttribute("user", userService.find(id));
		return "admin/user/edit";
	}
	
	/**
	 * 编辑管理员信息表单提交处理
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/edit",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> edit(User user){
		//用统一验证实体方法验证是否合法
		CodeMsg validate = ValidateEntityUtil.validate(user);
		if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
			return Result.error(validate);
		}
		if(user.getRole() == null || user.getRole().getId() == null){
			return Result.error(CodeMsg.ADMIN_USER_ROLE_EMPTY);
		}
		if(user.getId() == null || user.getId().longValue() <= 0){
			return Result.error(CodeMsg.ADMIN_USE_NO_EXIST);
		}
		if(userService.isExistUsername(user.getUsername(), user.getId())){
			return Result.error(CodeMsg.ADMIN_USERNAME_EXIST);
		}
		//到这说明一切符合条件,进行数据库保存
		User findById = userService.find(user.getId());
		//讲提交的管理员信息指定字段复制到已存在的user对象中,该方法会覆盖新字段内容
		BeanUtils.copyProperties(user, findById, "id","createTime","updateTime","userType");
		if(userService.save(findById) == null){
			return Result.error(CodeMsg.ADMIN_USE_EDIT_ERROR);
		}
		operaterLogService.add("编辑管理员,管理员名:" + user.getUsername());
		return Result.success(true);
	}
	
	/**
	 * 删除管理员
	 * @param id
	 * @return
	 */
	@RequestMapping(value="/delete",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
		try {
			userService.delete(id);
		} catch (Exception e) {
			return Result.error(CodeMsg.ADMIN_USE_DELETE_ERROR);
		}
		operaterLogService.add("删除管理员,管理员ID:" + id);
		return Result.success(true);
	}
}

后台角色管理控制器 :

/**
 * 后台角色管理控制器
 * @author yy
 *
 */
@RequestMapping("/admin/role")
@Controller
public class RoleController {

	
	private Logger log = LoggerFactory.getLogger(RoleController.class);
	
	@Autowired
	private MenuService menuService;
	
	@Autowired
	private OperaterLogService operaterLogService;
	
	@Autowired
	private RoleService roleService;
	
	/**
	 * 分页搜索角色列表
	 * @param model
	 * @param role
	 * @param pageBean
	 * @return
	 */
	@RequestMapping(value="/list")
	public String list(Model model,Role role,PageBean<Role> pageBean){
		model.addAttribute("title", "角色列表");
		model.addAttribute("name", role.getName());
		model.addAttribute("pageBean", roleService.findByName(role, pageBean));
		return "admin/role/list";
	}
	
	/**
	 * 角色添加页面
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/add",method=RequestMethod.GET)
	public String add(Model model){
		List<Menu> findAll = menuService.findAll();
		model.addAttribute("roleTypes", UserRoleTypeEnum.values());
		model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
		model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
		model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
		return "admin/role/add";
	}
	
	/**
	 * 角色添加表单提交处理
	 * @param role
	 * @return
	 */
	@RequestMapping(value="/add",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> add(Role role){
		Role top1ByRoleType = roleService.findTop1ByRoleTypeAndRoleTypeNot(role.getRoleType());
		if (top1ByRoleType != null){
			return Result.error(CodeMsg.ADMIN_ROLE_EXIST);
		}
		//用统一验证实体方法验证是否合法
		CodeMsg validate = ValidateEntityUtil.validate(role);
		if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
			return Result.error(validate);
		}
		if(roleService.save(role) == null){
			return Result.error(CodeMsg.ADMIN_ROLE_ADD_ERROR);
		}
		log.info("添加角色【"+role+"】");
		operaterLogService.add("添加角色【"+role.getName()+"】");
		return Result.success(true);
	}
	
	/**
	 * 角色编辑页面
	 * @param id
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/edit",method=RequestMethod.GET)
	public String edit(@RequestParam(name="id",required=true)Long id,Model model){
		List<Menu> findAll = menuService.findAll();
		model.addAttribute("topMenus",MenuUtil.getTopMenus(findAll));
		model.addAttribute("secondMenus",MenuUtil.getSecondMenus(findAll));
		model.addAttribute("thirdMenus",MenuUtil.getThirdMenus(findAll));
		Role role = roleService.find(id);
		model.addAttribute("role", role);
		model.addAttribute("authorities",JSONArray.toJSON(role.getAuthorities()).toString());
		model.addAttribute("roleTypes", UserRoleTypeEnum.values());
		return "admin/role/edit";
	}
	
	/**
	 * 角色修改表单提交处理
	 * @param request
	 * @param role
	 * @return
	 */
	@RequestMapping(value="/edit",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> edit(Role role){
		//用统一验证实体方法验证是否合法
		CodeMsg validate = ValidateEntityUtil.validate(role);
		if(validate.getCode() != CodeMsg.SUCCESS.getCode()){
			return Result.error(validate);
		}
		Role existRole = roleService.find(role.getId());
		if(existRole == null){
			return Result.error(CodeMsg.ADMIN_ROLE_NO_EXIST);
		}
		existRole.setName(role.getName());
		existRole.setRemark(role.getRemark());
		existRole.setStatus(role.getStatus());
		existRole.setAuthorities(role.getAuthorities());
		if(roleService.save(existRole) == null){
			return Result.error(CodeMsg.ADMIN_ROLE_EDIT_ERROR);
		}
		log.info("编辑角色【"+role+"】");
		operaterLogService.add("编辑角色【"+role.getName()+"】");
		return Result.success(true);
	}
	
	/**
	 * 删除角色
	 * @param request
	 * @param id
	 * @return
	 */
	@RequestMapping(value="delete",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> delete(@RequestParam(name="id",required=true)Long id){
		try {
			roleService.delete(id);
		} catch (Exception e) {
			// TODO: handle exception
			return Result.error(CodeMsg.ADMIN_ROLE_DELETE_ERROR);
		}
		log.info("编辑角色ID【"+id+"】");
		operaterLogService.add("删除角色ID【"+id+"】");
		return Result.success(true);
	}
}

记录控制层:

@Controller
@RequestMapping("/admin/processRecords")
public class ProcessRecordsController {

    @Autowired
    private ProcessRecordsService processRecordsService;


    @Autowired
    private UserService userService;

    /**
     * 进入运输收货列表根据订单编号查询
     * @param pageBean
     * @param waybillNumber
     * @param model
     * @return
     */
    @RequestMapping("/list")
    public String list(PageBean<ProcessRecords> pageBean, String waybillNumber, Model model) {
        User loginedUser = SessionUtil.getLoginedUser();
        model.addAttribute("title", "运输收货列表");
        model.addAttribute("waybillNumber", waybillNumber);
        model.addAttribute("UserRoleTypeEnum",loginedUser.getUserType().getCode());
        model.addAttribute("pageBean", processRecordsService.findList(pageBean, waybillNumber));
        return "admin/process_records/list";
    }

    /**
     * 进入执行运输列表根据订单编号查询
     * @param pageBean
     * @param waybillNumber
     * @param model
     * @return
     */
    @RequestMapping("/receiveList")
    public String receiveList(PageBean<ProcessRecords> pageBean, String waybillNumber, Model model) {
        model.addAttribute("title", "运输列表");
        model.addAttribute("waybillNumber", waybillNumber);
        model.addAttribute("users",userService.findByUserTypeNot());
        model.addAttribute("pageBean", processRecordsService.findListByWaybillNumber(pageBean, waybillNumber));
        return "admin/process_records/receive_list";
    }

    /**
     * 网点拾取快递并添加流程记录
     * @param id
     * @return
     */
    @RequestMapping("/takeDeliveryOfGoods")
    @ResponseBody
    public Result<Boolean> takeDeliveryOfGoods(@RequestParam(name="id",required=true)Long id){

        if (null == id){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER1_RECEIVING_EDIT_ERROR);
        }

        ProcessRecords processRecords = processRecordsService.find(id);
        processRecords.setOperation(ProcessRecords.HAVE_HANDLED);

        //讲提交的管理员信息指定字段复制到已存在的user对象中,该方法会覆盖新字段内容
        ProcessRecords newProcessRecords = new ProcessRecords();
        BeanUtils.copyProperties(processRecords, newProcessRecords,"id","createTime","updateTime");
        newProcessRecords.setTravelPosition(ExpressMailOrderStatus.INTRANSIT);
        newProcessRecords.setId(null);
        newProcessRecords.setOperation(ProcessRecords.NO_OPERATIONS);
        ProcessRecords saveNew = processRecordsService.save(newProcessRecords);
        if (null == saveNew){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER1_RECEIVING_EDIT_ERROR);
        }
        ProcessRecords save = processRecordsService.save(processRecords);
        if (null == save){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER1_RECEIVING_EDIT_ERROR);
        }
        return Result.success(true);
    }

    /**
     * 设置快递继续运输完成
     * @param id
     * @param userId
     * @return
     */
    @RequestMapping("/transportation")
    @ResponseBody
    public Result<Boolean> transportation(@RequestParam(name="id",required=true)Long id,
                                          @RequestParam(name="userId",required=true)Long userId){

        if (null == id){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER_SENDTHECARGO_ADD_EDIT_ERROR);
        }

        if (null == userId){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER_USER_NULL);
        }

        Integer integer = processRecordsService.transportation(id,userId);

        if(integer == 1){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER_SENDTHECARGO_ADD_EDIT_ERROR);
        }
        return Result.success(true);
    }

    /**
     * 指定快递员
     * @param id
     * @return
     */
    @RequestMapping("/delivery")
    @ResponseBody
    public Result<Boolean> delivery(@RequestParam(name="id",required=true)Long id){

        if (null == id){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER_SENDTHECARGO_ADD_EDIT_ERROR);
        }

        Integer integer = processRecordsService.delivery(id);

        if(integer == 1){
            return Result.error(CodeMsg.ADMIN_EXPRESSMAILORDER_SENDTHECARGO_ADD_EDIT_ERROR);
        }
        return Result.success(true);
    }




}

源码获取:博客首页 "资源" 里下载!

基于Java物流管理系统设计与实现 摘 要:随着世界经济的飞速发展,电商行业的成熟,使得物流行业逐渐变成人们关注的经 济热点。中国与物流相关的年总支出有139000亿元,物流成本占总GDP的20%- 25%,不可否认物流行业的发展潜力一步步的展现了出来。此次的物流公司订单管理系统 是应用于现代物流公司业务设计的,用于提高公司工作效率,主要包括:客户信息管理 、物流信息管理、客户订单管理与货物配送管理。相比传统的物流管理方式如手工录入 ,核查物流信息的方式,本系统节省了人力物力的提高了物流运输的效率,实现了物流 配送的流程智能化,简单化。不仅为物流公司的客户带来便利,企业的效率得到提升。 关键词:物流管理、管理系统、JSP、B/S结构。 Abstract: As the rapid development of the world economy and the maturity of the e-commerce industry, The logistics industry has gradually become an economic hot spot. China's total annual expenditure related to logistics is 139 billion yuan and the cost of logistics accounts for 20 % - 25 % of the total GDP. There is no denying that the development potential of the logistics industry is showing step by step. This order management system of logistics company is applied to the business design of modern logistics company to improve the work efficiency of the company, mainly including customer information management, logistics information management, customer order management and goods distribution management. Compared with traditional logistics management methods such as manual entry and checking of logistics information, this system saves manpower and material resources, improves the efficiency of logistics transportation and realizes the intellectualization and simplification of logistics distribution process. It not only brings convenience to the customers of the logistics company, but also improves the efficiency of the enterprise. Key words: Logistics ,Management systems, JSP, B / S structure. 目 录 摘 要 I Abstract I 目 录 II 1 绪论 1 1.1 研究背景 1 1.2 研究目的与意义 1 1.3 开发工具介绍 2 2 需求分析 4 2.1 需求考察 4 2.2 可行性分析 4 2.2.1 技术的可行性 4 2.2.2 经济的可行性 5 2.2.3 操作可行性 5 2.2.4 法律的可行性 5 2.3 系统用户用例图 5 2.4 功能模块需求分析 7 2.4.1 实现功能 7 2.4.2 功能详解 8 2.5 性能需求 9 2.5.1 系统的安全性 9 2.5.2 数据的完整性 9 2.6 界面需求 9 3 系统分析与设计 10 3.1 数据库的分析与设计 10 3.1.2 数据库的逻辑结构设计 10 3.2 数据分析 10 3.3.1 数据库的E-R图设计 11 3.3.2 数据表的设计 12 3.4 数据库的连接 13 3.5 处理乱码问题 14 4 系统功能实现 16 4.1 系统的主界面设计 16 4.2 管理员功能模块的设计与实现 17 4.3 系统管理的设计与实现 1
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beyondwild

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

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

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

打赏作者

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

抵扣说明:

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

余额充值