springboot+vue.js倉儲調度平臺 倉庫管理系統 開發紀實

介紹

最近公司接到一個倉庫管理系統的開發,特地再次跟大家分享開發經驗

技術棧

前端:vue+elementui+echarts+vuex+websocket
後端:springboot+springSecurity+MybatisPlius+Redis+websocket

系統介紹

基於B/S的倉庫管理系統,本系統基於客戶->訂單->生產->待檢->入庫->盤點->出庫這條企業管理鏈路開發。整合了springSecurity實現了,用戶的認證和權限的管理,整合了Redis在權限認證時使用的redis緩存了權限的用戶角色權限的數據。通過MybatisPlus大大提高了了工作效率。使用了快遞鳥的第三方接口實現了物流跟蹤(免費使用只支持中通、圓通、申通)。

系統運行快照

登錄頁
登錄實現代碼如下:

    /**
     *
     * @param mobile 前端傳的手機號
     * @param session 保存驗證碼的地方
     * @return
     */
    @GetMapping("/smsCode")
    public RespBean sms(@RequestParam("mobile") String mobile, HttpSession session) {
        User user=userMapper.loadUserByUsername(mobile);
        if (user == null){
            return RespBean.error("該手機號未曾註冊");
        }
        SmsCode smsCode = new SmsCode(
                RandomStringUtils.randomNumeric(4), 60, mobile);
        //TODO 調用短信服務
        log.info(smsCode.getCode() + "->" + mobile);
        session.setAttribute("sms_key",smsCode);
        return RespBean.ok("短信驗證碼已經發送,1分鐘內有效");
    }

websocket聊天室
實現代碼如下:

package cn.pqz.emsboot.modules.communication.controller;


import cn.pqz.emsboot.modules.sys.entity.RespBean;
import cn.pqz.emsboot.modules.sys.entity.User;
import cn.pqz.emsboot.modules.sys.service.UserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/ws")
public class WebSocketController {

    @Autowired
    UserService userService;

    @GetMapping("/addressBook/")
    public RespBean addressBook(@RequestParam("name") String name){
        RespBean respBean = null;
        try {
            QueryWrapper queryWrapper=new QueryWrapper();
            queryWrapper.like("name",name);
//            queryWrapper.like("username",name);
            List<User> userList = userService.list(queryWrapper);
            if (userList.size()==0){
                QueryWrapper queryWrapper1 = new QueryWrapper();
                queryWrapper1.like("username",name);
                userList=userService.list(queryWrapper1);
            }
            respBean=RespBean.ok("",userList);
        }catch (Exception e){
            e.printStackTrace();
            respBean=RespBean.error("通訊錄獲取失敗");
        }
        return respBean;
    }


}

系統儀表盤
實現代碼如下:

    /**
     * 獲取倉庫信息
     *
     * @return
     */
    @GetMapping("/myWarehouse")
    public RespBean myTransitions() {
        RespBean respBean = null;
        try {
            List<Warehouse> warehouses = warehouseService.myTransitions();
            respBean = RespBean.ok("", warehouses);
        } catch (Exception e) {
            e.printStackTrace();
            respBean = RespBean.error("倉庫數據獲取失敗");
        }
        return respBean;
    }

個人中心
實現代碼如下:

    /**
     * 改變用戶狀態enable
     * @param id
     * @param enabled
     * @return
     */
    @PutMapping("/updateEnabled/{userId}/{userEnabled}")
    public RespBean updateEnabled(@PathVariable("userId") Integer id,
                                  @PathVariable("userEnabled") Boolean enabled,
                                  HttpServletRequest request){
        RespBean respBean=null;
        User user=new User();
        user.setId(id);
        user.setEnabled(enabled);
//        SecurityContextImpl securityContext=(SecurityContextImpl) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");
//        Authentication authentication=securityContext.getAuthentication();
//        UsernamePasswordAuthenticationToken auth=new UsernamePasswordAuthenticationToken(user,authentication.getCredentials());
//        auth.setDetails(authentication.getDetails());
//        securityContext.setAuthentication(auth);
        Boolean i=userService.updateById(user);
        if (i){
            respBean=RespBean.ok("更新狀態成功");
            logger.info("----------用戶狀態更新成功----------");
        }else{
            respBean=RespBean.error("更新狀態失敗");
        }
        return respBean;
    }
    @PostMapping("/addUser")
    public RespBean addUser(@RequestBody User user){
        RespBean respBean=null;
        String phone=user.getPhone();
        QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("phone",phone);
        User user1=userService.getOne(queryWrapper);
        if (!Objects.isNull(user1)){
            respBean=RespBean.error(phone+"已經註冊");
        }else {
            int i=userService.addUser(user);
            if (i!=0){
                respBean=RespBean.ok("添加成功");
            }else{
                respBean=RespBean.error("添加失敗");
            }
        }
        return respBean;
    }

用戶列表
實現代碼如下:

    /**
     * 展示用戶列表
     * @param pageNum
     * @param size
     * @param query
     * @return
     */
    @GetMapping("/userList/")
    public RespBean userList(@RequestParam("pageNum") Integer pageNum,
                             @RequestParam("size") Integer size,
                             @RequestParam("query") String query){
        JSONObject obj=new JSONObject();
        obj.put("data",userService.userList(pageNum,size,query));
        obj.put("total",userService.count(null));
        RespBean resp=RespBean.ok("",obj);
//        logger.info("----------獲取用戶列表成功----------");
        return resp;
    }

角色管理
實現代碼如下:

    /**
     * 角色列表(更新處理方法)
     * @return
     */
    @GetMapping("/roleList")
    public RespBean roleList(){
        RespBean respBean=null;
        try{
            List<Role> roleList=roleService.getRoleList();
            respBean=RespBean.ok("",roleList);
        }catch (Exception e){
            e.printStackTrace();
            respBean=RespBean.error("獲取角色列表失敗");
        }
        return respBean;
    }

分配權限
實現代碼如下:

    /**
     * 添加權限
     */
    @PostMapping("/staff/addPow")
    public RespBean addPow(@RequestBody Menu menu){
        RespBean respBean=null;
        Boolean i=menuService.save(menu);
        if (i){
            respBean=RespBean.ok("權限添加成功");
        }
        else {
            respBean=RespBean.error("權限添加失敗");
        }
        return respBean;
    }

訂單
實現代碼如下:

package cn.pqz.emsboot.modules.output.contoller;

import cn.pqz.emsboot.modules.output.entity.OrderList;
import cn.pqz.emsboot.modules.output.service.OrderService;
import cn.pqz.emsboot.modules.sys.entity.RespBean;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private OrderService orderService;

    /**
     * 獲取訂單列表
     * @param pageNum
     * @param size
     * @param query
     * @return
     */
    @GetMapping("/orderList/")
    public RespBean orderList(@RequestParam("pageNum") Integer pageNum,
                              @RequestParam("size") Integer size,
                              @RequestParam("query") String query){
        RespBean respBean=null;
        JSONObject obj=new JSONObject();
        obj.put("data",orderService.orderList(pageNum,size,query));
        obj.put("total",orderService.count());
        respBean=RespBean.ok("",obj);
        return respBean;
    }

    /**
     * 新建生產遠程搜索
     * @param name
     * @return
     */
    @GetMapping("/orders")
    public RespBean orders(@RequestParam String name){
        RespBean respBean=null;
        try{QueryWrapper queryWrapper=new QueryWrapper();
        queryWrapper.eq("orderState",1);
        queryWrapper.like("name",name);
        List<OrderList> orders=orderService.list(queryWrapper);
        respBean=RespBean.ok("",orders);
        }catch (Exception e){
            e.printStackTrace();
            respBean=RespBean.error("獲取失敗");
        }
        return respBean;
    }
    @PostMapping("/addOrder")
    public RespBean addOrder(@RequestBody JSONObject json){
        RespBean respBean=null;
        try{
            String name=json.getString("name");
            Double price=json.getDouble("price");
            Integer count=json.getInteger("count");
            Integer cid=json.getInteger("clientId");
            orderService.addOrder(name,price,count,cid);
            respBean=RespBean.ok("新建訂單成功");
        }catch (Exception e){
            e.printStackTrace();
            respBean=RespBean.error("新建訂單失敗");
        }
        return respBean;
    }

    /**
     * 修改訂單
     * @param order
     * @return
     */
    @PutMapping("/editOrder")
    public RespBean editOrder(@RequestBody OrderList order){
        RespBean respBean=null;
        Boolean i=orderService.updateById(order);
        if (i){
            respBean=RespBean.ok("修改成功");
        }else {
            respBean=RespBean.error("修改失敗");
        }
        return respBean;
    }
    @DeleteMapping("/deleteOrder/{id}")
    public RespBean deleteOrder(@PathVariable("id") Integer id){
        RespBean respBean=null;
        Boolean i=orderService.removeById(id);
        if (!i){
            respBean=RespBean.error("刪除失敗");
        }else {
            respBean=RespBean.ok("刪除成功");
        }
        return respBean;
    }

}

生產線
我的倉庫
入庫管理

運行視頻

吊炸天springboot+vue.js倉儲調度平臺 倉庫管理系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章