介紹
最近公司接到一個倉庫管理系統的開發,特地再次跟大家分享開發經驗
技術棧
前端: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分鐘內有效");
}
實現代碼如下:
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倉儲調度平臺 倉庫管理系統